Как выполнить пространственное соединение точек и полигонов в PostGIS?


13

У меня есть точечный набор данных, представляющий домохозяйства, которые я хочу связать со слоем участков (т.е. назначить его parcel_id). С ArcMap я мог бы пространственно соединить полигоны с точками и указать, что соединение имеет определенный радиус поиска и использовать ближайший полигон.

Я хотел бы выполнить это с postgres, и мне было интересно, какой самый разумный способ сделать это. Я не могу использовать ST_contains, потому что точки падают на улицы, а не на реальные участки. Вместо ST_contains, есть ли другая функция, допускающая проверки на близость?

update households h set parcel_id = p.parcel_id 
from parcels p where ST_contains(p.the_geom, h.xy);

Ответы:


8

Для того, что вы хотите достичь, я думаю, что ST_DWithin будет работать. Из документации сайта PostGIS:

ST_DWithin - возвращает true, если геометрия находится на указанном расстоянии друг от друга. Для геометрических единиц используются пространственные ориентиры, а для географических единиц - метры, а для измерения по умолчанию используется use_spheroid = true (измерение вокруг сфероида), для более быстрой проверки используйте use_spheroid = false для измерения вдоль сферы.


Возможно, это может сработать, но хитрость заключается в том, чтобы установить правильный порог поиска. Установите его слишком высоко, и я получу более одного совпадения, установите слишком низко, и я не получу ни одного. Или установите его высоко и откажитесь от дополнительных записей матчей.
АКО
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.