Uso Dundas Maps e intento dibujar un mapa del mundo en el que los países se agrupen en regiones específicas de la implementación de una empresa.Agrupación de formas geográficas
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 eliminarlos de manera que sólo las fronteras regionales muestran.
Los polígonos Dundas deben comenzar y terminar en el mismo punto. Este es el caso para todas las formas de país. Ahora necesito un algoritmo que pueda:
- Determinar dónde se cruzan las fronteras de un país en un borde regional, de modo que pueda unirme a los segmentos de borde regionales.
- Determine qué fronteras de país no son fronteras regionales para que pueda descartarlas.
- Ordene los puntos regionales resultantes para que describan de forma secuencial los límites de la forma.
A continuación es donde he llegado hasta el momento con el mapa. Puedes ver que las fronteras de los países aún deben ser eliminadas. Por ejemplo, la frontera entre Mongolia y China debe descartarse, mientras que la frontera entre Mongolia y Rusia debe conservarse.
La razón por la que necesito conservar un borde regional es que los colores de la región serán significativos en el transporte de información, pero las regiones adyacentes pueden ser del mismo color. Las regiones pueden cambiar para incluir o excluir países, y esta es la razón por la que la configuración regional debe ser dinámica.
EDITAR: Ahora sé que lo que estoy buscando es un UNION de polígonos. David Lean explains how to do it 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 de polígonos resultante es tan compleja que SQL la trunca a 43,680 caracteres. Ahora estoy tratando de encontrar una solución para eso o encontrar una forma de hacer la unión en el código.
De hecho. Ahora solo necesito un algoritmo. – grenade
Solo lea su respuesta varias veces y creo que entiendo lo que está diciendo. Voy a dar una oportunidad ahora. – grenade
He llegado a comprender qué vértices se comparten. Simplemente trabajando a través del algoritmo que agrega los vértices no compartidos al polígono de unión en el orden correcto ... – grenade