【问题标题】:MongoDB: find the common area of two polygonsMongoDB:找到两个多边形的公共区域
【发布时间】:2015-08-11 16:26:43
【问题描述】:

提前感谢所有帮助。
我有两个重叠的复杂多边形。
我需要获取重叠区域的边界。

我有这两个多边形的边界坐标,我想取回黄色区域的边界坐标。

我已经尝试在另一个中获取 $geoWithing 坐标,但是坐标没有排序,我无法正确绘制多边形。
而使用 $geoIntersects 我只能得到边界交叉点的坐标,这不足以绘制所需的区域。
以前一定有人这样做过,所以我希望它可以提供给可以提供帮助的人。

//Get first zone coordinates within zone 2
var zoneOneArea = db.zone.find(
{
    "name":"Zone 1",
    "location":
    {
        $geoWithin:
        {
            $polygon: zoneTwoCoordinatesArray
        }
    }
});
//Get zone 2 coordinates within zone 1
var zoneTwoArea = db.zone.find(
{
    "name":"Zone 2",
    "location":
    {
        $geoWithin:
        {
            $polygon: zoneOneCoordinatesArray
        }
    }
});

所以,这就是我尝试过的方法,但我无法将这两个结果放在一个有序的数组中,以便能够正确绘制它。

【问题讨论】:

  • MongoDB 不这样做。您可以在聚合管道中组合两个$geoIntersects 以查找交叉区域内的“点”,而不是交叉区域本身。您需要检索数据并使用您选择的外部 API。大多数语言都有一些流行的实现。
  • 好的,我明白了,我需要在服务器端进行这个计算,并直接从数据库中组织起来。你知道 PostGIS 是否有这样的功能吗?感谢您的回答

标签: mongodb geospatial


【解决方案1】:

正如Blakes Seven 提到的,

MongoDB 不这样做

所以我停止使用它,因为我没有简单的选择。

最后,我使用 PostGIS 实现了这一点,该函数实现了 ST_Intersection,它返回的正是我需要的,即多边形的边界导致了交叉点。
PostGIS 是几何计算方面的强大工具,因此请放心使用。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-11-11
    • 2011-05-12
    • 2021-07-15
    • 2022-01-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多