我正在使用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);
}
问题是国家边界线仍然显示在一个地区内,我想删除它们以便只显示区域边界。
登打士多边形必须在同一点开始和结束。所有国家的形状都是如此。现在我需要一个算法:
- 确定国家边界在区域边界相交的位置,以便我可以加入区域边界线段。
- 确定哪些国家边界不是区域边界,以便我可以丢弃它们。
- 对产生的区域点进行排序,以便它们按顺序描述形状边界。
下面是我到目前为止已经用地图得到的地方。你可以看到国界仍然需要删除。例如蒙古和中国之间的边界应该被丢弃,而蒙古和俄罗斯之间的边界应该被保留。
我需要保留区域边框的原因是区域颜色在传达信息方面很重要,但是相邻区域可能是相同的颜色。这些地区可以改变以包括或排除国家,这就是为什么区域形成必须是动态的。
编辑: 我现在知道我正在寻找的是多边形的联盟。 David Lean explains how to do it使用SQL Server 2008中的空间函数可能是一种选择,但我的努力已停止,因为生成的多边形联合非常复杂,SQL将其截断为43,680个字符。我现在试图找到解决方法,或者找到一种在代码中进行联合的方法。
确实。现在我只需要一个算法。 – grenade 2010-04-19 13:43:10
只要阅读你的答案几次,我想我明白你在说什么。现在就放弃一下。 – grenade 2010-04-19 13:48:41
我已经知道哪些顶点是共享的。只要按照正确的顺序通过将非共享顶点添加到联合多边形的算法... – grenade 2010-04-20 08:02:15