sql >> Databasteknik >  >> RDS >> Mysql

Få polygoner nära en lat,long i MySQL

En långsam version (utan rumsliga index):

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

För att använda de rumsliga indexen måste du avnormalisera din tabell så att varje polygonpunkt lagras i sin egen post.

Skapa sedan SPATIAL INDEX på fältet som innehåller koordinaterna för hörnen och ställ bara den här frågan:

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

Sakerna blir mycket lättare om du lagrar UTM koordinater i din databas snarare än latitud och longitud.



  1. Hur genererar man en trädvy från denna resultatuppsättning baserat på Tree Traversal Algorithm?

  2. Hur skapar man tillfälliga procedurer i MySQL?

  3. Autonom transaktion i PostgreSQL 9.1

  4. hur man skickar variabel från skalskript till sqlplus