Suite

Filtrage des entités polylignes par direction à l'aide d'ArcGIS 10.2 (ou ArcPy)


J'ai un fichier de formes polyligne représentant un réseau routier réel. Dans de nombreuses parties, il a deux segments qui se chevauchent à 100 % dans des directions opposées, représentant les deux directions de conduite (Dans l'image : segments rouges). Les lignes perpendiculaires sont les points de départ et d'arrivée des segments.

Comment pourrais-je facilement sélectionner les segments rouges qui partagent la direction de la ligne noire ? (En photo : ces segments rouges qui sont dirigés vers le nord-est). Jusqu'à présent, je ne peux trouver automatiquement que les segments rouges qui se chevauchent (avec une ligne noire) dans les deux sens.

J'ai un itinéraire en tant que ligne en 1 partie (Dans l'image: ligne noire). Ceci est dérivé du même réseau routier, donc la géométrie chevauche en fait les segments rouges.


Je pensais à ce genre de processus, après avoir trouvé les segments rouges qui se chevauchent avec la polyligne noire :
1) Pour chaque segment rouge
calculer l'azimut (direction angulaire)
2) Déterminer les extrémités des segments rouges
3) Divisez la ligne noire aux deux extrémités des segments rouges
4) Pour chaque segment noir divisé
calculer l'azimut
déterminer les 2 segments rouges qui se chevauchent
copier le segment rouge qui a le même azimut (ou à l'intérieur d'un marginal)


MAIS, existe-t-il un moyen plus simple ou un outil ? Je voudrais le faire en utilisant ArcMap 10.2 Standard ou ArcPy.

La route peut être sinueuse donc je ne peux pas utiliser un azimut global. Je dois filtrer un réseau routier complet (lignes rouges) avec n itinéraires (lignes noires).

Photo:


D'accord, ce workflow a résolu le problème.

Si un segment rouge chevauche un autre segment rouge :
1) Calculez les points de début et de fin de chaque ligne rouge. Supprimez les doublons spatiaux.
2) Divisez la ligne noire par des points.
3) Calculez l'azimut de chaque ligne noire divisée.
4) Créez un tampon autour de chaque ligne noire divisée et trouvez les segments rouges complètement dans le tampon.
5) Choisissez le segment rouge avec la bonne direction (azimut).
Ce n'est peut-être pas une si belle solution, mais ça marche quand même.

J'ai rencontré le problème de ne pas avoir de licence Advanced (Info), donc de ne pas avoir l'outil 'Split Line at Point'. Cependant, ce script semble faire l'affaire : https://www.queryxchange.com/q/23_154708/standalone-python-script-to-split-a-polyline-with-a-point-layer/


(Solution 2) En fait, le véritable objectif, après tout, était d'identifier les segments entre une paire de points (fois N) sur un réseau routier et d'effectuer des calculs sur les attributs. J'ai également pu résoudre le problème avec Network Analyst, car les itinéraires ont été générés avec Network Analyst. Cela a été possible en utilisant

Fonctionnalité de copie des fonctionnalités de source traversée :
http://pro.arcgis.com/en/pro-app/tool-reference/network-analyst/copy-traversed-source-features.htm
http://pro.arcgis.com/en/pro-app/tool-reference/network-analyst/copy-traversed-source-features-output.htm

La classe d'entités Edges générée possède le champ SourceOID, qui est une référence au FID .shp du réseau routier d'origine.

Quoi qu'il en soit, mettre en œuvre vos propres solutions est toujours une bonne chose.


  1. Calculer les points aux extrémités de la ligne
  2. Supprimez les doublons spatiaux, attribuez un nom unique aux points.
  3. Affecter de et vers des nœuds aux lignes
  4. Exécutez ce calculateur de champ sur un nouveau champ de type entier dans la table des routes
aList=[] def FirstOrNext(f,t): global aList key=(f,t) if key in aList: return 2 aList.append(key) aList.append((t,f)) return 1 FirstOrNext( !fromn !, !tonne!)

La valeur 2 dans votre champ marque la ligne « en double »


Voir la vidéo: What is ArcPy (Octobre 2021).