sql >> Databasteknik >  >> RDS >> Mysql

MySQL latitud och longitud tabellinställning

Du bör lagra poängen i en kolumn av datatypen Point som du kan indexera med en SPATIAL index (om din tabelltyp är MyISAM ):

CREATE SPATIAL INDEX sx_place_location ON place (location)

SELECT  *
FROM    mytable
WHERE   MBRContains
               (
               LineString
                       (
                       Point($x - $radius, $y - $radius),
                       Point($x + $radius, $y + $radius)
                       )
               location
               )
        AND Distance(Point($x, $y), location) <= $radius

Detta kommer att drastiskt förbättra hastigheten på frågor som "hitta alla inom en given radie".

Observera att det är bättre att använda vanlig TM metriska koordinater (östlig och nordlig) istället för polär (latitud och longitud). För små radier är de tillräckligt noggranna, och beräkningarna förenklas avsevärt. Om alla dina punkter är i ett halvklot och är långt från polerna, kan du använda en enda central meridian.

Du kan naturligtvis fortfarande använda polära koordinater, men formlerna för att beräkna MBR och avståndet blir mer komplext.



  1. MySQLi förberedde felrapportering för uttalanden

  2. Hur man väljer datum utan tid i SQL

  3. Hur använder man Room Persistence Library med förifylld databas?

  4. mysql delete, autoincrement