sql >> Databáze >  >> RDS >> Mysql

Získejte polygony blízko lat, dlouhé v MySQL

Pomalá verze (bez prostorových indexů):

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

Chcete-li využít prostorové indexy, musíte denormalizovat svou tabulku tak, aby každý vrchol polygonu byl uložen ve vlastním záznamu.

Poté vytvořte SPATIAL INDEX na pole, které obsahuje souřadnice vrcholů a zadejte tento dotaz:

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

Věci budou mnohem snazší, pokud uložíte UTM souřadnice ve vaší databázi, nikoli zeměpisná šířka a délka.



  1. Jak zamknout jeden řádek

  2. Spor o sekvenci RAC

  3. Použití 'OR' mezi klauzulemi HAVING a WHERE v MySQL?

  4. pomocí virtuálních polí k součtu hodnot v cakephp