sql >> Database >  >> RDS >> Mysql

Snelste manier om afstand tussen twee lat/lange punten te vinden

  • Creëer uw punten met Point waarden van Geometry gegevenstypen in MyISAM tafel. Vanaf Mysql 5.7.5, InnoDB tabellen ondersteunen nu ook SPATIAL indices.

  • Maak een SPATIAL index op deze punten

  • Gebruik MBRContains() om de waarden te vinden:

      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)
    

, of, in MySQL 5.1 en hoger:

    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
                    )

Dit selecteert alle punten ongeveer binnen het vak (@lat +/- 10 km, @lon +/- 10km) .

Dit is eigenlijk geen doos, maar een bolvormige rechthoek:breedte- en lengtegraad gebonden segment van de bol. Dit kan verschillen van een gewone rechthoek op het Franz Joseph Land , maar vrij dichtbij op de meeste bewoonde plaatsen.

  • Pas extra filtering toe om alles binnen de cirkel te selecteren (niet het vierkant)

  • Pas eventueel extra fijne filtering toe om rekening te houden met de grote cirkelafstand (voor grote afstanden)



  1. Hoe automatisch identiteit voor een Oracle-database genereren via Entity Framework?

  2. Spring Boot-applicatie loopt vast op Hikari-Pool-1 - Starten...

  3. Converteer tekst naar getal in MySQL-query

  4. Hoe JSON-gegevens op te slaan in MySQL