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

Uzyskaj wielokąty zbliżone do szerokości geograficznej, długiej w MySQL

Wolna wersja (bez indeksów przestrzennych):

SELECT  *
FROM    mytable
WHERE   MBRIntersects(mypolygon, LineString(Point(@X - @distance, @Y - @distance), Point(@X + @distance, @Y + @distance))

Aby skorzystać z indeksów przestrzennych, musisz zdenormalizować swoją tabelę, aby każdy wierzchołek wielokąta był przechowywany we własnym rekordzie.

Następnie utwórz SPATIAL INDEX na polu zawierającym współrzędne wierzchołków i po prostu wydaj to zapytanie:

SELECT  DISTINCT polygon_id
FROM    vertices
WHERE   MBRContains(vertex, LineString(Point(@X - @distance, @Y - @distance), Point(@X + @distance, @Y + @distance))

Sprawy będą znacznie prostsze, jeśli przechowujesz UTM współrzędne w Twojej bazie danych, a nie szerokość i długość geograficzna.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jak pokazać sortowanie połączenia w MySQL?

  2. Uruchom surowy SQL podczas migracji

  3. Zapytanie SQL ze średnią i grupowaniem według

  4. ImportError:Brak modułu o nazwie MySQLdb

  5. Jak zapobiec duplikowaniu nazw użytkowników, gdy ludzie się rejestrują?