Suite

Joindre des polygones à des polylignes en fonction d'un point spécifique de la polyligne se trouvant dans le polygone

Joindre des polygones à des polylignes en fonction d'un point spécifique de la polyligne se trouvant dans le polygone


J'essaie de joindre une classe d'entités polyligne et une classe d'entités polygone. Les polylignes auront toujours au moins leur premier point dans un polygone, et chaque polyligne se compose d'exactement trois points. Il y a une chance que le dernier point de la polyligne soit dans un autre polygone, mais je ne veux pas rejoindre ce polygone. Il y aura plusieurs polylignes à l'intérieur de chaque polygone et je souhaite les rejoindre.

Je pensais à quelque chose comme ça :

arcpy.SpatialJoin_analysis(lignes, polygones, linesAndPolygons, #, #, #, "POLYGON_CONTAINS_FIRST_POINT_OF_POLYLINE")

Il n'y a bien sûr pas d'option de correspondance explicite comme ci-dessus, mais c'est ce dont j'ai besoin. Des idées? J'envisageais de créer une nouvelle classe d'entités de points à partir des polylignes, de les joindre aux polygones, puis de joindre les polylignes aux points, mais il semble qu'il devrait y avoir un moyen plus simple.


En supposant que vous n'ayez pas le niveau de licence avancé :

Ajoutez des champs à votre classe d'entités polyligne pour stocker les coordonnées (Double) et un champ d'ID de jointure (long), puis Calculez le champ à l'aide de l'analyseur Python et de l'objet de géométrie :

JoinID = !FID! DeX = !FORME!.premierPoint.X DeY = !FORME!.premierPoint.Y

Cela attribuera à vos polylignes leurs coordonnées de départ que vous pourrez transformer en une couche de points avec Créer une classe d'entités à partir de la table XY.

Si vous avez une licence avancée, utilisez Feature Vertices to Points (start) pour obtenir les points du premier sommet… c'est une bonne idée de calculer le JoinID avant de le faire. Les points de sommet auront les mêmes attributs que la ligne source, ce qui facilitera la jonction.

Soit une jointure spatiale, soit une intersection de la couche avec vos polygones. Vos points résultants contiendront (entre autres) :

  • ID du polygone
  • JoinID de la polyligne
  • Selon match_option dans Spatial Join ou join_attributes dans Intersect éventuellement tous les attributs des deux.

Joindre les polylignes aux points joints avec Join by Attributes…

Ce sont les outils python/geoprocessing, si vous souhaitez le faire de manière interactive, vous pouvez utiliser Calculate Field etc… exactement de la même manière.


Créer un point de départ, etc. est logique et plutôt simple, je ne sais pas pourquoi ne pas l'utiliser. Ce n'est pas testé mais ça vaut le coup d'essayer :

  1. Intersection des polylignes avec des polygones, sortie - ligne
  2. Supprimer les doublons du résultat des identifiants de ligne uniques
  3. Joindre les segments restants au calque de ligne parent

METTRE À JOUR: Testé, ne fonctionne pas. Il sélectionne une partie de ligne dans un polygone plus petit [FID]


Voir la vidéo: Mapinfo: Correction des objets digitalisés; cas des polylignes.