Agrupando formas geográficas
Estoy usando Dundas Maps e intento dibujar un mapa del mundo donde los países se agrupan en regiones que son específicas de una implementación comercial.
Tengo datos de forma (puntos y segmentos) para cada país del mundo. Puedo combinar países en regiones agregando todos los puntos y segmentos para países dentro de una región a una nueva forma de región.
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);
}
El problema es que las líneas fronterizas de los países siguen apareciendo dentro de una región y quiero eliminarlas para que solo aparezcan las fronteras regionales.
Los polígonos Dundas deben comenzar y terminar en el mismo punto. Este es el caso de todas las formas de país. Ahora necesito un algoritmo que pueda:
Determine dónde se cruzan las fronteras de los países en una frontera regional, de modo que pueda unirme a los segmentos fronterizos regionales.Determine qué fronteras de país no son fronteras regionales para que pueda descartarlas.Ordene los puntos regionales resultantes para que describan secuencialmente los límites de la forma.A continuación es donde he llegado hasta ahora con el mapa. Puede ver que las fronteras del país aún deben eliminarse. Por ejemplo, la frontera entre Mongolia y China debe descartarse, mientras que la frontera entre Mongolia y Rusia debe mantenerse.
La razón por la que necesito conservar un borde regional es que los colores de la región serán importantes para transmitir información, pero las regiones adyacentes pueden ser del mismo color. Las regiones pueden cambiar para incluir o excluir países y es por eso que la configuración regional debe ser dinámica.
EDITAR: Ahora sé que lo que estoy buscando es una UNIÓN de polígonos. David Leanexplica cómo hacerlo usando las funciones espaciales en SQL Server 2008, que podría ser una opción, pero mis esfuerzos se han detenido porque la unión del polígono resultante es tan compleja que SQL la trunca en 43,680 caracteres. Ahora estoy tratando de encontrar una solución para eso o encontrar una forma de hacer la unión en código.