计算落在每个多边形内的点的模式
Posted
技术标签:
【中文标题】计算落在每个多边形内的点的模式【英文标题】:Calculate Mode of points that fall within each polygon 【发布时间】:2019-06-22 06:25:08 【问题描述】: 我在 SQL Server 中有两个表。 地址点和地区区域 两者都有 geom 字段并共享共同的 SRID 地址点有一个整数值字段。对于每个区,我想采用这个值字段的模式,从属于它的所有地址点。
我设法获得更新以计算平均值。但我需要模式。我需要知道每个地区最常出现的价值
UPDATE
DISTRICTS
SET AverageOfValue = (
SELECT Avg(Address_Value)
FROM Address A with (index(OBJECTID))
WHERE DISTRICTS.Shape.STIntersects(A.Shape) = 1 AND Address.Address_Value is not null)
我正在努力尝试调整它来计算模式。我该怎么做?
例如如果下表是位于特定 District 内的所有地址点的子集,我希望提取的众数值为 8,并在 District 层中更新 ModeValue 字段。
+----------+---------------+
| OBJECTID | Address_Value |
+----------+---------------+
| 23 | 8 |
| 29 | 8 |
| 35 | 5 |
| 42 | 4 |
| 44 | 8 |
| 47 | 9 |
| 58 | 8 |
+----------+---------------+
【问题讨论】:
【参考方案1】:众数是最常见的值。您可以使用聚合来计算:
UPDATE DISTRICTS
SET ModeValue = (SELECT TOP (1) Address_Value
FROM Address A with (index(OBJECTID))
WHERE DISTRICTS.Shape.STIntersects(A.Shape) = 1 AND
Address.Address_Value is not null
GROUP BY Address_Value
ORDER BY COUNT(*) DESC
);
【讨论】:
以上是关于计算落在每个多边形内的点的模式的主要内容,如果未能解决你的问题,请参考以下文章