【发布时间】:2011-02-08 21:00:49
【问题描述】:
我正在使用 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 explains how to do it 使用 SQL Server 2008 中的空间函数,这可能是一种选择,但我的努力已经停止,因为生成的多边形联合非常复杂,以至于 SQL 将其截断为 43,680 个字符。我现在正在尝试找到解决方法或找到一种在代码中进行联合的方法。
【问题讨论】:
标签: c# algorithm geometry geography dundas