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

Få polygoner tæt på en lat,long i MySQL

En langsom version (uden rumlige indekser):

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

For at gøre brug af de rumlige indekser, skal du denormalisere din tabel, så hver polygon vertex er gemt i sin egen post.

Opret derefter SPATIAL INDEX på feltet, som indeholder koordinaterne for hjørnerne, og udsend bare denne forespørgsel:

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

Tingene bliver meget nemmere, hvis du gemmer UTM koordinater i din database i stedet for bredde- og længdegrad.



  1. Tilbagefører en mislykket Rails-migrering

  2. JDBC returnerer tomt resultatsæt

  3. Tilføj en CHECK-begrænsning til en eksisterende tabel i SQL Server (T-SQL)

  4. PostgreSQL:Unik overtrædelse:7 FEJL:dubletnøgleværdi overtræder unik begrænsning users_pkey