2012-11-26 59 views

回答

0

你可以只使用了PostGIS SQL我想:

SELECT points,area from points_table,area WHERE 
area_geometry && points 
AND ST_Contains(area_geometry,points) 
+1

我不相信这是提问者的意思。这将找到多边形所包含的点,并且我认为不包括边界上的点。参见['ST_Contains'](http://postgis.refractions.net/docs/ST_Contains.html)。另外,我相信&&边界框检查是多余的; 'ST_Contains'已经做了边界框检查。 – jpmc26

+0

刚刚确认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)' – jpmc26

1

我不能帮你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获得多边形的边界,并检查是否包含点。

0

使用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)