Запрос к базе данных геометрии PostGIS

У меня есть несколько таблиц, содержащих мультиполигоны. Мне нужно найти точки в этих многоугольниках, которые я могу использовать в своем тестовом классе Java. Что я делал, так это отправлял запрос, чтобы вернуть все мульти-полигоны, выбрать вершину для использования в качестве точки, и в большинстве случаев это работает.

Однако эти таблицы представляют данные о рисках, 1 из 100, 1 из 200 и т. Д., Поэтому некоторые точки разделяются между таблицами (мульти-полигоны более высокого риска инкапсулируются меньшим риском). какой запрос я могу использовать для возврата точки, которая будет находиться в пределах одного мультиполигона в одной таблице, но не в других, которые я укажу?

таблицы: river_100_1k, river_200_1k и river_1000_1k


person cool mr croc    schedule 07.03.2012    source источник


Ответы (2)


Ну, вы могли бы выполнить множественное левое соединение:

SELECT a.gid, a.the_geom FROM pointsTable a
LEFT JOIN river_100_1k b 
ON ST_Intersects(a.the_geom, b.the_geom)
LEFT JOIN 
river_200_1k c
ON NOT ST_Intersects(a.the_geom, c.the_geom) -- Not Intersects
LEFT JOIN
river_1000_1k d 
ON NOT ST_Intersects(a.the_geom, d.the_geom) -- Not Intersects
WHERE 
AND c.gid IS NULL AND d.gid IS NULL AND b.gid=2 AND c.gid=2 AND d.gid=2 ; 

Я не уверен, правильно ли я понял, но это путь, по которому вам следует идти.

person Francisco Valdez    schedule 07.03.2012

Используйте ST_PointOnSurface(polygon), чтобы получить точку внутри многоугольника.

person Paul Ramsey    schedule 08.03.2012