Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Najszybszy sposób na znalezienie odległości między dwoma punktami szerokości/długości

  • Twórz swoje punkty za pomocą Point wartości Geometry typy danych w MyISAM stół. Od Mysql 5.7.5, InnoDB tabele obsługują teraz także SPATIAL indeksy.

  • Utwórz SPATIAL indeks w tych punktach

  • Użyj MBRContains() aby znaleźć wartości:

      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)
    

lub w MySQL 5.1 i wyżej:

    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
                    )

Spowoduje to wybranie wszystkich punktów w przybliżeniu w polu (@lat +/- 10 km, @lon +/- 10km) .

To właściwie nie jest pudełko, ale sferyczny prostokąt:segment kuli związany z szerokością i długością geograficzną. Może się to różnić od zwykłego prostokąta na ziemi Franciszka Józefa , ale dość blisko w większości zamieszkałych miejsc.

  • Zastosuj dodatkowe filtrowanie, aby zaznaczyć wszystko w okręgu (nie w kwadracie)

  • Ewentualnie zastosuj dodatkowe dokładne filtrowanie, aby uwzględnić odległość dużego koła (dla dużych odległości)



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Sortowanie w MySQL przy użyciu kolejności według klauzul

  2. Oblicz percentyl na podstawie ostatnich dni w MySQL

  3. Jak możesz dołączyć do tego samego stołu, dwa razy, w mysql?

  4. Jak wypełnić brakujące daty w MySQL?

  5. MySql Count nie może pokazać wartości 0