【问题标题】:Counting number of points in each polygon计算每个多边形中的点数
【发布时间】:2019-05-12 11:30:59
【问题描述】:

我有两张桌子,

points:有两列 latitude(float) 和 longitude(float)。

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

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

我可以弄清楚如何获取包含一个点但无法进一步发展的多边形 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 行。

【问题讨论】:

  • 点表怎么能没有每个点所属的多边形的参考?我对这种数据库一无所知,我只是好奇。
  • 嗨@JoakimDanielson 我相信其目的只是使用表polygon 中的几何图形作为参数来计算表points 上的点。它们实际上并没有关系……至少与我们所掌握的信息无关:-D 祝你周日愉快
  • 点必须声明为long lat,而不是lat long

标签: sql postgresql postgis


【解决方案1】:

你缺少的是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);

.. 执行以下查询:

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)

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

【讨论】:

  • 是否还需要指定点的SRID?当然没有伤害...即 st_setsrid(ST_MakePoint(lon,lat),4326)
  • 当然不疼! :) WGS84 是默认的 SRS,以防不提供任何内容,但您是对的……它可能会产生误导。好点。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-12-19
  • 2015-03-26
  • 1970-01-01
  • 2021-01-02
  • 1970-01-01
  • 2011-08-11
  • 1970-01-01
相关资源
最近更新 更多