【发布时间】:2012-11-13 14:30:11
【问题描述】:
我在表格中有点数据和多面数据。如何使用 postgis 和 geodjango 找到位于多面边界上的点?
【问题讨论】:
我在表格中有点数据和多面数据。如何使用 postgis 和 geodjango 找到位于多面边界上的点?
【问题讨论】:
geodjango 方面我无法为您提供帮助,但我可以为您提供 PostGIS 查询。
SELECT ST_Contains(ST_Boundary(ST_GeomFromText('POLYGON((1 1,0 0, -1 1, 1 1))')),
ST_GeomFromText(points.g))
FROM UNNEST(ARRAY['POINT(1 1)', 'POINT(0 1)']) points (g)
关键是使用ST_Boundary获取多边形的边界并检查是否包含点。
【讨论】:
我猜你可以只使用 PostGIS SQL:
SELECT points,area from points_table,area WHERE
area_geometry && points
AND ST_Contains(area_geometry,points)
【讨论】:
ST_Contains。此外,我认为 && 边界框检查是多余的; ST_Contains 已经做了边界框检查。
SELECT ST_Contains(ST_GeomFromText('POLYGON((1 1,0 0, -1 1, 1 1))'), ST_GeomFromText(g)) FROM UNNEST(ARRAY['POINT(1 1)', 'POINT(0 1)']) t (g)
使用 ST_Covers 它包含自己的边界。但要小心,在这种情况下,一个点可以包含在许多(多)多边形中。
SELECT ST_Covers(ST_GeomFromText('POLYGON((1 1,0 0, -1 1, 1 1))'),
ST_GeomFromText(points.g))
FROM UNNEST(ARRAY['POINT(1 1)', 'POINT(0 1)', 'POINT(0 0.5)']) points (g)
【讨论】: