2016-01-18 4 views
1

J'ai un certain nombre de polygones sous la forme d'une liste de coordonnées. Chacun de ces polygones représente une zone sur une carte globale et chacun a un poids.Recherche de superficies de polygones pondérés superposés

J'ai besoin de trouver la zone sur la carte où ce poids est le plus élevé. Cela signifie que lorsque les polygones se chevauchent, le poids sera la somme des deux polygones pour la zone d'intersection. Je voudrais rendre le calcul aussi efficace que possible. Toute aide serait grandement appréciée.

+0

Quelles sont les propriétés du polygone? rectiligne, convexe, concave, auto-sécante, etc.? – Paul

+0

@GilbertAllen J'ai regardé les intersections entre eux mais jusqu'ici je ne vois pas aller trop loin. – Humphrey

+0

@Paul Les polygones représentent chacun une zone telle qu'un pays. Ils ne seront pas auto-croisés ou rectilignes mais ils seront concaves. – Humphrey

Répondre

1

L'approche la plus simple de ce problème serait de regrouper les polygones par les voisins les plus proches. Cette étape est facultative et n'est utilisée que pour rendre la recherche de polygones croisés plus efficace. Au lieu de cela, le regroupement peut également être omis, ce qui nécessiterait une recherche exhaustive des polygones qui se croisent.

Dans l'étape suivante, vous pouvez remplacer deux polygones coupant A et B par trois polygones comme suit: un polygone qui se compose de la zone de A sans l'intersection de la zone avec le poids de A, un polygone équivalent pour B, et un troisième polygone qui couvre la zone d'intersection de A et B avec les poids ajoutés de A et B comme poids. Remplacez A et B par les trois polygones générés et mettez à jour le cluster. Répétez cette étape jusqu'à ce que vous ne trouviez plus aucun rectangle d'intersection et que vous avez terminé.

+0

Avez-vous des suggestions de bibliothèques pour Python qui pourraient faire cela? Je l'ai utilisé bien, mais j'ai eu des problèmes avec le calcul de la différence où l'un des polygones est contenu dans l'autre - dans cette bibliothèque, il ne supporte pas le faire. – Humphrey

+0

@ Humphrey en fait ce genre de Polygon nécessitera probablement une solution de contournement. La plupart des paquets pour les polygones ne supportent que des polygones sans trous, alors que l'un des polygones générés à partir de l'ensemble de polygones que vous avez décrit n'aura pas cette propriété. Je n'ai pas travaillé ** beaucoup avec python, mais je n'ai pas trouvé de paquet supportant ce type de polygone ... Ma recommandation pour cette situation serait d'insérer un autre bord dans le polygone en forme d'anneau pointer et donc le transformer en un polygone sans trou. – Paul