Utilizzo mappe di Dundas e cerco di disegnare una mappa del mondo in cui i paesi sono raggruppati in regioni specifiche dell'implementazione aziendale.Raggruppamento di forme geografiche
Ho dati di forma (punti e segmenti) per ogni paese del mondo. Posso combinare i paesi in regioni aggiungendo tutti i punti e i segmenti per i paesi all'interno di una regione a una nuova forma di regione.
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);
}
Il problema è che le linee di confine dei paesi mostrano ancora in piedi all'interno di una regione e voglio rimuoverli in modo che solo i confini regionali si presentano.
I poligoni di Dunda devono iniziare e terminare nello stesso punto. Questo è il caso per tutte le forme del paese. Ora ho bisogno di un algoritmo che può:
- Determinare dove i confini di un paese si intersecano a una frontiera regionale, in modo da poter accedere ai segmenti di confine regionali.
- Determinare quali confini di paese non sono i bordi regionali in modo che sia possibile eliminarli.
- Ordinare i punti regionali risultanti in modo che descrivano in sequenza i contorni della forma.
Di seguito è dove sono arrivato fino ad ora con la mappa. Puoi vedere che i confini del paese devono ancora essere rimossi. Ad esempio, il confine tra la Mongolia e la Cina dovrebbe essere scartato, mentre il confine tra la Mongolia e la Russia dovrebbe essere mantenuto.
Il motivo per cui ho bisogno di mantenere un confine regionale è che i colori della regione saranno significativi nel trasmettere informazioni ma le regioni adiacenti potrebbero essere dello stesso colore. Le regioni possono cambiare per includere o escludere i paesi e questo è il motivo per cui la modellazione regionale deve essere dinamica.
MODIFICA: Ora so che quello che sto cercando è UNIONE di poligoni. David Lean explains how to do it utilizza le funzioni spaziali in SQL Server 2008 che potrebbe essere un'opzione, ma i miei sforzi si sono interrotti perché l'unione poligonale risultante è così complessa che SQL la tronca a 43.680 caratteri. Ora sto cercando di trovare una soluzione alternativa o di trovare un modo per realizzare l'unione nel codice.
Infatti. Ora ho solo bisogno di un algoritmo. – grenade
Basta leggere la tua risposta un paio di volte e penso di capire quello che stai dicendo. Adesso provatelo. – grenade
Sono arrivato a capire quali vertici sono condivisi. Sto semplicemente lavorando all'algoritmo che aggiunge i vertici non condivisi al poligono dell'unione nell'ordine corretto ... – grenade