Agrupando formas geográficas

Estou usando o Dundas Maps e tentando desenhar um mapa do mundo em que os países estão agrupados em regiões específicas para uma implementação de negócios.

Eu tenho dados de forma (pontos e segmentos) para cada país do mundo. Posso combinar países em regiões adicionando todos os pontos e segmentos de países dentro de uma região a uma nova forma de região.

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);
}

O problema é que as linhas de fronteira do país ainda aparecem em uma região e quero removê-las para que apenas as fronteiras regionais apareçam.

Os polígonos de Dundas devem começar e terminar no mesmo ponto. É o caso de todas as formas do país. Agora eu preciso de um algoritmo que possa:

Determine onde as fronteiras dos países se cruzam em uma fronteira regional, para que eu possa ingressar nos segmentos regionais.Determine quais fronteiras de países não são regionais para que eu possa descartá-las.Ordene os pontos regionais resultantes para que sequencialmente descrevam os limites da forma.

Abaixo é onde eu cheguei até agora com o mapa. Você pode ver que as fronteiras do país ainda precisam ser removidas. Por exemplo, a fronteira entre a Mongólia e a China deve ser descartada, enquanto a fronteira entre a Mongólia e a Rússia deve ser mantida.

A razão pela qual preciso reter uma borda regional é que as cores da região serão significativas na transmissão de informações, mas as regiões adjacentes podem ter a mesma cor. As regiões podem mudar para incluir ou excluir países e é por isso que a modelagem regional deve ser dinâmica.

EDITAR: Agora sei que o que estou procurando é uma UNIÃO de polígonos. David Leanexplica como fazê-lo usando as funções espaciais no SQL Server 2008, que podem ser uma opção, mas meus esforços foram interrompidos porque a união de polígonos resultante é tão complexa que o SQL a trunca em 43.680 caracteres. Agora estou tentando encontrar uma solução alternativa para isso ou encontrar uma maneira de fazer a união no código.

questionAnswers(2)

yourAnswerToTheQuestion