gre*_*ade 10 c# algorithm geometry geography dundas
我正在使用Dundas Maps并尝试绘制世界地图,其中国家/地区被分组到特定于业务实现的区域.
我有世界上每个国家的形状数据(点和段).通过将区域内的所有国家/地区的所有点和细分添加到新的区域形状,我可以将国家/地区组合到一起.
foreach(var region in GetAllRegions()){
var regionShape = new Shape { Name = region.Name };
foreach(var country in GetCountriesInRegion(region.Id)){
var countryShape = GetCountryShape(country.Id);
regionShape.AddSegments(countryShape.ShapeData.Points, countryShape.ShapeData.Segments);
}
map.Shapes.Add(regionShape);
}
Run Code Online (Sandbox Code Playgroud)
问题是国家边界线仍然出现在一个区域内,我想删除它们,以便只显示区域边界.
Dundas多边形必须在同一点开始和结束.所有国家形状都是如此.现在我需要一个能够:
以下是我到目前为止使用地图的地方.您可以看到仍需要删除国家/地区边界.例如,蒙古和中国之间的边界应该被丢弃,而蒙古和俄罗斯之间的边界应该保留.
我需要保留区域边界的原因是区域颜色在传达信息方面很重要,但相邻区域可能是相同的颜色.这些地区可以改变以包括或排除国家,这就是区域塑造必须是动态的原因.
编辑: 我现在知道我正在寻找的是一个多边形联盟.David Lean 解释了如何使用SQL Server 2008中的空间函数来执行此操作,这可能是一个选项,但我的努力已经停止,因为生成的多边形联合非常复杂,以至于SQL将其截断为43,480个字符.我现在正在尝试为此找到解决方法或找到在代码中进行联合的方法.

在分组国家时,我希望没有重叠 - 你可以采用一种相当天真的算法来寻找共享顶点 - 一个简单的视图就是迭代一个多边形上的点,看看它是否在你的任何其他多边形上,并分享相同的下一个或上一个点,以查看是否匹配.然后只需删除共享顶点即可创建联合