我正在使用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个字符。现在,我正在尝试找到解决此问题的方法或找到在代码中执行联合的方法。