当前位置: 首页 > 知识库问答 >
问题:

方法将相邻多边形合并到google maps的单个多边形。

巫马正卿
2023-03-14

我是新来的,对C#来说也是新来的,我希望有一个简单的问题要解决。

(我使用gmaps.net for winforms来实现这一点,但也将通过web API maps版本使用该方法)。

我们的数据库中有一个zipcodes和Area的数据库。每个区域包含多个Zipcode。每个zipcode都有一系列坐标,可以为该zipcode创建一个google maps多边形。

目前,如果我们想在地图上显示我们的“区域”,我们通过为该区域的每个邮政编码绘制多边形来做到这一点,这些多边形没有边框,而且都是相同的颜色(所以它看起来像一个大多边形,只是没有边框)。

现在我的任务是给它添加一个边框,但只添加一个外部边框,而不是每个内部zipcode的边框。

现在,我无论如何都不是一个数学天才,但在我看来,应该有一种方法可以运行每组zipcodes的坐标(所有坐标组合到一个单点列表中),通过一种方法,该方法将丢弃所有“内部”点,只留下外部边界点,然后我们可以将其用作一个多边形(带边界!)对于我们的“区域”。。。这可能吗?有人能帮我朝正确的方向踢一脚吗?

谢谢!

杰森

共有1个答案

苏伟志
2023-03-14

好的,你要找的是一个凹壳而不是凸壳。与凸壳不同,凸壳对于任何给定的点集只有一个解,凹壳有许多解,并且有许多实现它们的方法。两种最常见的方法是alpha形状或Delauney三角剖分,在这两种方法中,我推荐使用三角剖分。

对Delauney三角剖分的简短解释是从一组点创建三角形网格,以使任何给定三角形的最小内角尽可能大。有很多现有的库可以为您创建Delauney三角剖分。(最受欢迎的是Triangle.NET。)

一旦对点集执行了三角剖分,就基本上放弃了两个三角形之间共享的所有边的三角形边信息。这样,您就只剩下一个三角形专有的边,该三角形对应于多边形的周长:

(这张照片要归功于蒂莫西·希尔兹的提问。)

一旦你有了这个边图,你可以简单地遍历它们(通过从边到连接节点再到连接边等等),得到一个定义凹形船体的点数组:

(伪代码)

public Point[] GetPolyFromEdgeGraph(Edge[] edges)
{
    List<Point> poly = new List<Point>();

    Edge edge = edges[0];
    Point start = edge.PointA;
    Point point = start;

    do 
    {
        poly.Add(point);

        edge = point.EdgeA != edge ? point.EdgeA : point.EdgeB;
        point = edge.PointA != point ? edge.PointA : edge.PointB;
    } while (point != start);

    return poly.ToArray();
}
 类似资料:
  • 我有一组点(英国完整的邮政编码中心)。邮政编码与邮政编码扇区和邮政编码区之间存在等级关系。原来的扇区和区是毗连的。我希望推导出扇区和地区的近似边界,这样国家的任何部分都正好属于一个扇区和一个地区,所有得到的多边形理想地应该是连续的,而且(显然?)所有原点都应该在适当的多边形中。有没有合适的算法?更好的是,是否有一些适当的实现? 我想我一定解释得很差,因为我不认为这回答了我的问题。 让我们只谈部门,

  • 我有一对(封闭的)多边形,每个多边形被定义为一个点序列(顶点)。每个多边形都代表一块土地,由一条小河分开,所以溪流在两个多边形之间形成一个狭窄的缝隙。 我正在寻找一种算法,通过将两个多边形连接成一个连接的多边形来识别和消除间隙。 下图显示了一个示例,其中原始多边形为绿色和红色,生成的多边形显示为黄色。 到目前为止,我已经能够做到以下几点: 对于多边形A中的每条边,找到多边形B中最近的顶点。 找到多

  • 我必须允许用户输入多个邮政编码,从数据库中检索纬度和经度,然后构建一个包含它们的巨大多边形。 我需要在代码中修改什么才能将所有这些较小的多边形变成一个较大的多边形?我在谷歌上搜索过答案,我所能找到的只是逐个构建每个邮政编码的多边形,但这仍然不能给我一个更大、单个多边形的最终结果。 目前,输入邮政编码后,程序从数据库中收集lat和long点,并将它们输入一个巨大的数组(确切地说是字符串[][]),然

  • 问题内容: 我有大量的多边形(〜100000),并尝试找到一种聪明的方法来计算与常规网格单元的相交面积。 当前,我正在使用形状(基于它们的角坐标)来创建多边形和网格单元。然后,使用简单的for循环,遍历每个多边形并将其与附近的网格单元进行比较。 只是一个小例子来说明多边形/网格单元。 (顺便说一句:网格单元的尺寸为0.25x0.25,多边形的最大值为1x1) 实际上,对于单个多边形/网格单元组合来

  • 有没有办法在python中合并两个重叠的GEOJSON多边形,返回一个合并的GEOJSON对象?

  • 返回顶点的输入数组,并且附有一些其他方法,如下面所描述 polygon.area() 返回此多边形的标定区域。如果顶点是逆时针顺序,面积为正,否则为负。 polygon.centroid() 返回一个表示此多边形的质心的两元素数组。 polygon.clip(subject) 对这个多边形剪切主题多边形。换句话说,返回一个多边形表示这个多边形和主题多边形的交集。假定剪切的多边形是逆时针方向以及凸多