sql >> Database teknologi >  >> RDS >> Mysql

Hurtigste måde at finde afstand mellem to Lat/Long-punkter

  • Opret dine point ved hjælp af Point værdier af Geometry datatyper i MyISAM bord. Fra og med Mysql 5.7.5, InnoDB tabeller understøtter nu også SPATIAL indekser.

  • Opret en SPATIAL indeks på disse punkter

  • Brug MBRContains() for at finde værdierne:

    SELECT * FROM table WHERE MBRContains(LineFromText(CONCAT( '(' , @lon + 10 / ( 111.1 / cos(RADIANS(@lat))) , ' ' , @lat + 10 / 111.1 , ',' , @lon - 10 / ( 111.1 / cos(RADIANS(@lat))) , ' ' , @lat - 10 / 111.1 , ')' ) ,mypoint)

, eller i MySQL 5.1 og derover:

    SELECT  *
    FROM    table
    WHERE   MBRContains
                    (
                    LineString
                            (
                            Point (
                                    @lon + 10 / ( 111.1 / COS(RADIANS(@lat))),
                                    @lat + 10 / 111.1
                                  ),
                            Point (
                                    @lon - 10 / ( 111.1 / COS(RADIANS(@lat))),
                                    @lat - 10 / 111.1
                                  ) 
                            ),
                    mypoint
                    )
 

Dette vil vælge alle punkter omtrent inden for feltet (@lat +/- 10 km, @lon +/- 10km) .

Dette er faktisk ikke en kasse, men et sfærisk rektangel:bredde- og længdegradsbundne segment af kuglen. Dette kan adskille sig fra et almindeligt rektangel på Franz Joseph Land , men ret tæt på den på de fleste beboede steder.

  • Anvend yderligere filtrering for at markere alt inden for cirklen (ikke firkanten)

  • Anvend eventuelt yderligere finfiltrering for at tage højde for den store cirkelafstand (for store afstande)



  1. Hvordan afkodes PostgreSQL bytea kolonne hex til int16/uint16 i r?

  2. Hvad er forskellen mellem VARCHAR og NVARCHAR i SQL server - SQL Server / T-SQL Tutorial Del 32

  3. Returnerer resultat selv for elementer i IN-listen, der ikke findes i tabellen

  4. Sådan sammenlignes dato i SQL