计算落在每个多边形内的点的模式

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
                    );

【讨论】:

以上是关于计算落在每个多边形内的点的模式的主要内容,如果未能解决你的问题,请参考以下文章

获取 QPolygonF 的点

如何判断一个指定的经纬度点是不是落在一个多边形区域内

如何从实际上在 Postgis 中的多边形内的多边形中获取最近点

重心坐标。 C中相对于凹多边形的点的谐波翘曲

基于周界点的多边形 - oracle 空间

在多个多边形中搜索点的最佳方法