计算每个多边形中的点数

时间:2019-05-12 11:31:00

标签: sql postgresql postgis

我有2张桌子

points:具有两列:纬度(浮点数)和经度(浮点数)。

polygon:具有两列polygon_id(int)和geom(多边形的形状)

我想打印出每个polygon_id中包含的点数。

我可以弄清楚如何获取包含一个点但无法进一步处理的polygon_id。

SELECT polygon.id
FROM polygon
WHERE st_contains(geom, ST_GeomFromText('POINT(120.32155 -33.843322)', 4326)) = true

我想使用点表中的纬度和经度

ST_GeomFromText('POINT(points.latitude points.longitude)

没用。

预期结果中包含了polygon_id和每一行polygon_id包含的点。由于有100个多边形,所以我希望有100行。

1 个答案:

答案 0 :(得分:3)

您缺少的是ST_MakePoint

考虑您的表格结构和以下示例,这些示例由一个多边形和两个重叠的点组成..

CREATE TABLE polygon (id int, geom geometry);
INSERT INTO polygon VALUES (1,'POLYGON((120.20 -33.75,120.43 -33.75,120.43 -33.88,120.20 -33.88,120.20 -33.75))'::geometry);

CREATE TABLE points (lon numeric, lat numeric);
INSERT INTO points VALUES (120.32,-33.84);
INSERT INTO points VALUES (120.39, -33.85);

enter image description here

..执行以下查询:

SELECT polygon.id,COUNT(points.lon)
FROM polygon,points
WHERE ST_Contains(geom, ST_MakePoint(lon,lat))
GROUP BY polygon.id

 id | count 
----+-------
  1 |     2
(1 row)

我建议您不要将纬度和经度存储在不同的列中。将点存储为geometrygeography始终是PostgreSQL / PostGIS中的最佳选择。