Geolocation 如何避免Postgis中重叠区域的重复计数?

Geolocation 如何避免Postgis中重叠区域的重复计数?,geolocation,gis,postgis,Geolocation,Gis,Postgis,我想使用Postgis计算一个城镇中事件的影响。我有一个包含事件点位置(事件计数、2019年地理位置)的表格,还有一个包含镇上所有建筑(乌得勒支、2020年)以及点位置的表格。我计算了200多米范围内的所有房屋,并计算了有人居住的房屋数量。请参阅下面的代码 -- In a range of ~200 meters UPDATE event_count_2019_geo SET gw200 = temp.aantal_woningen FROM (SELECT locatie, count(eve

我想使用Postgis计算一个城镇中事件的影响。我有一个包含事件点位置(事件计数、2019年地理位置)的表格,还有一个包含镇上所有建筑(乌得勒支、2020年)以及点位置的表格。我计算了200多米范围内的所有房屋,并计算了有人居住的房屋数量。请参阅下面的代码

-- In a range of ~200 meters
UPDATE event_count_2019_geo
SET gw200 = temp.aantal_woningen
FROM (SELECT locatie, count(event_count_2019_geo.locatie) AS aantal_woningen
      FROM event_count_2019_geo
           INNER JOIN utrecht_2020 AS bag ON (ST_DWithin(bag.geo_lokatie, event_count_2019_geo.geo_lokatie, 0.002))  
      WHERE  bag.verblijfsobjectgebruiksdoel LIKE '%woonfunctie%'
      GROUP BY locatie
     ) AS temp
WHERE event_count_2019_geo.locatie = temp.locatie;
麻烦的是,我最终有太多的房子受到这次事件的影响。我画了一张关于每项赛事200米范围的图(见下图)。重叠区域计数两次、三次或四次。每场比赛的房屋数都是正确的,但我无法计算结果的总和。有没有办法纠正这些重叠,这样我就可以得到所有选定活动中房屋数量的正确总数

编辑:示例


这只是一个非常简单的例子:对事件1的查询产生房屋a、B、D;事件2=C,D,E。每个事件的计数是3,它们的总和是6(这确实是正确的行为),我希望看到的是5,因为D是双倍的。

感谢@JimJones的建议,我找到了解决方案。我定义了两个视图:一个是以旧方式查找所有房屋(find_houses_all),另一个是仅返回唯一房屋(find_houses_unique)

我运行了两个脚本,得到了预期的输出

SELECT locatie, COUNT (locatie)
FROM find_houses_all -- find_houses_unique
GROUP BY locatie
ORDER BY locatie;
在任何情况下,find_houses_all的输出都大于或等于find_houses_unique的输出。电子表格中的示例输出和减去的结果如下所示:

Locatie         All Unique  All - Unique
achter st.-ptr. 617 222     395
berlijnplein    87   87       0
boothstraat     653 175     478
breedstraat    1057 564     493
buurkerkhof     914 163     751
catharijnesngl. 134  38      96
domplein        842 149     693
 ...
Total         35399 13196   22203

负数表示有错误。

Hi Arnold。为了确保我正确理解您的问题:您的问题是否与某些缓冲区(区域)重叠,因此单个几何体可能位于多个缓冲区内的事实有关?六边形会是一种选择而不是缓冲区吗?你能提供一些样本数据和准确的预期结果吗?你所描述的行为实际上是意料之中的,因为房子确实在200米半径内:)@JimJones,你说得对,这与重叠区域有关。我知道这种行为是意料之中的,但对我来说是不必要的。添加了一个简单的例子:这有帮助吗?那么,您感兴趣的只是房屋总数,而不是每个缓冲区的房屋数?由于我不熟悉您的数据集,我不能肯定地告诉您,但我相信
DISTINCT ON()
可能会从您的计数中消除重复的记录。如果它不起作用,在您的问题中添加一些几何图形,以便我可以执行您的查询并重现问题。干杯:)
Locatie         All Unique  All - Unique
achter st.-ptr. 617 222     395
berlijnplein    87   87       0
boothstraat     653 175     478
breedstraat    1057 564     493
buurkerkhof     914 163     751
catharijnesngl. 134  38      96
domplein        842 149     693
 ...
Total         35399 13196   22203