Suite

Sélection de points d'un côté de la route

Sélection de points d'un côté de la route


Je suis un débutant dans les scripts python dans les SIG. J'ai 2 fichiers de formes : le premier avec des routes et le second avec des points qui contiennent le numéro d'adresse et le nom de la rue.

Je veux sélectionner ces points du côté droit ou gauche de la rue mais dans le bon ordre en fonction du début et de la fin de la rue.

Premièrement, je veux sélectionner les points du polygone rouge et les vérifier (la vérification est une autre tâche et je sais comment le faire mais en sélectionnant ces points dans le bon ordre…)

Deuxièmement, la même chose. Je veux sélectionner les points du polygone bleu et les vérifier aussi.

NB : Points est une couche, routes est une autre couche. également tampon des routes est une autre couche.

Je pense que ce serait une bonne idée d'analyser le tampon et de sélectionner par emplacement les points qui se trouvent dans le tampon, mais je ne sais pas comment.


EDIT: J'ai remanié cette réponse après avoir réalisé que le référencement linéaire prend en charge la détermination du côté le long d'une ligne.

La meilleure approche pour résoudre ce problème consiste à utiliser la boîte à outils de référencement linéaire dans ArcGIS :

Un système de référence linéaire stocke les données à l'aide d'une position relative le long des entités linéaires existantes. C'est-à-dire que l'emplacement est donné en termes d'une caractéristique linéaire connue et d'une position, ou d'une mesure, le long de celle-ci. Par exemple, la route I-10, mile 23,2, identifie de manière unique une position dans l'espace géographique et peut être utilisée à la place d'une coordonnée x,y.

Voici comment procéder, en supposant que nous utilisions les rues et les lignes ci-dessous :

  • Exécutez l'outil Créer des itinéraires (référencement linéaire) avec vos rues commein_line_features. Choisissez un champ d'ID unique pour leroute_id_fieldparamètre. Vous pouvez laisser tous les autres paramètres par défaut.

  • Exécutez l'outil Localiser les entités le long des itinéraires (référencement linéaire) avec vos points commein_features, les routes que nous avons créées ci-dessus commein_routes, et le champ d'ID de rue comme votreroute_id_field. Vous devriez changer votrerayon_ou_tolérancede telle sorte qu'il y ait suffisamment de distance par rapport à vos rues pour capturer tous vos points. Enfin, décochez la casem_direction_offsetparamètre; cela fera en sorte que la désignation gauche/droite soit basée sur la direction de numérisation de vos rues plutôt que sur la direction plus arbitraire de vos itinéraires.

  • Dans votre tableau de sortie (illustré ci-dessous), vous aurez une ligne pour chaque point. La valeur dans leMESLe champ représente la distance le long de la rue à laquelle se trouve le point. La valeur dans leDistancereprésente la distance entre le point et l'emplacement le plus proche capturé dans votre rue, où le signe de la distance indique le côté de la rue. Ainsi, les valeurs négatives indiquent des points à gauche de la rue et les valeurs positives indiquent des points à droite de la rue.

Pour parcourir vos points de gauche, triez le tableau parDÉBARRASSERetMESet ignorer les valeurs positives ; faire de même mais inverser le triMESet ignorez les valeurs négatives pour parcourir vos points de côté dans l'ordre inverse. Il est probablement plus facile de trier en Python :

points = [] curseur = arcpy.da.SearchCursor(eventTable, ["RID","MEAS","Distance","OBJECTID"]) pour la ligne dans le curseur : si ligne[2] < 0 : #valeur négative = numérisé points de gauche.append((row[0],"L",row[1])) else : #valeur positive = points de droite numérisés.append((row[0],"R",row[1]*-1.0 )) #négate MEAS pour inverser la direction points.sort() # rompra les liens lors du tri en utilisant le 2ème ou le 3ème élément dans l'impression de tuple [point[3] pour le point dans les points]

Cela se traduit par nos points triés par ID de rue, puis du côté gauche du début à la fin, puis du côté droit de la fin au début :

[9, 11, 12, 10, 8, 1, 4, 6, 5, 3, 2, 7]

Si vous avez une licence avancée, vous pouvez utiliser Buffer (Analyse) et créer des tampons Gauche et Droite. Ensuite, vous pouvez "Sélectionner par emplacement" des points dans les tampons gauche ou droit.