J'utilise Dundas Maps et j'essaie de dessiner une carte du monde où les pays sont regroupés en régions spécifiques à une implémentation métier.Grouper des formes géographiques
J'ai des données de forme (points et segments) pour chaque pays dans le monde. Je peux combiner des pays en régions en ajoutant tous les points et segments pour les pays d'une région à une nouvelle forme de région.
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);
}
Le problème est que les lignes frontalières de pays encore apparaissent dans une région et je veux les supprimer de sorte que seules les frontières régionales apparaissent.
Les polygones Dundas doivent commencer et se terminer au même point. C'est le cas pour toutes les formes de pays. Maintenant, j'ai besoin d'un algorithme qui peut:
- Déterminer où les frontières de pays se croisent à une frontière régionale, de sorte que je peux rejoindre les segments de la frontière régionale.
- Déterminez les frontières de pays qui ne sont pas des frontières régionales afin de pouvoir les ignorer.
- Trier les points régionaux résultants afin qu'ils décrivent séquentiellement les limites de forme.
Ci-dessous est où je suis arrivé à ce jour avec la carte. Vous pouvez voir que les frontières du pays doivent encore être supprimées. Par exemple, la frontière entre la Mongolie et la Chine devrait être écartée, tandis que la frontière entre la Mongolie et la Russie devrait être maintenue.
La raison pour laquelle je dois conserver une bordure régionale est que les couleurs de la région seront significatives pour la transmission de l'information mais que les régions adjacentes peuvent être de la même couleur. Les régions peuvent changer pour inclure ou exclure des pays et c'est pourquoi la mise en forme régionale doit être dynamique.
EDIT: Je sais maintenant que ce que je cherche est une union de polygones. David Lean explains how to do it en utilisant les fonctions spatiales dans SQL Server 2008 qui pourrait être une option mais mes efforts se sont arrêtés car l'union de polygones qui en résulte est si complexe que SQL la tronque à 43 680 caractères. J'essaie maintenant soit de trouver une solution de contournement pour cela ou de trouver un moyen de faire l'union dans le code.
En effet. Maintenant, j'ai juste besoin d'un algorithme. – grenade
Lisez juste votre réponse à quelques reprises et je pense que je comprends ce que vous dites. Je vais y aller maintenant. – grenade
J'ai compris jusqu'à quel point les sommets sont partagés. Je travaille simplement sur l'algorithme qui ajoute les sommets non partagés au polygone de l'union dans le bon ordre ... – grenade