我正在使用 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);
}
问题是国家边界线仍然出现在一个区域内,我想删除它们,以便只显示区域边界。
Dundas 多边形必须在同一点开始和结束。这是所有国家形状的情况。现在我需要一个算法,它可以:
- 确定国家边界在区域边界处相交的位置,以便我可以加入区域边界段。
- 确定哪些国家边界不是区域边界,以便我可以丢弃它们。
- 对生成的区域点进行排序,以便它们按顺序描述形状边界。
下面是我到目前为止使用地图的地方。您可以看到仍然需要删除国家边界。例如,蒙古和中国之间的边界应该被丢弃,而蒙古和俄罗斯之间的边界应该被保留。
我需要保留区域边界的原因是区域颜色在传达信息方面很重要,但相邻区域可能是相同的颜色。地区可以改变以包括或排除国家,这就是为什么地区塑造必须是动态的。
编辑: 我现在知道我正在寻找的是多边形的联合。David Lean解释了如何使用 SQL Server 2008 中的空间函数来执行此操作,这可能是一种选择,但我的努力已经停止,因为生成的多边形联合非常复杂,以至于 SQL 将其截断为 43,680 个字符。我现在正在尝试找到解决方法或找到一种在代码中进行联合的方法。