Je rencontre un problème dans ArcGIS. Je travaille sur une base de données de navigation. Dans notre base de données, les rues à voie unique sont représentées par une seule ligne, tandis qu'une rue à plusieurs voies (rue avec séparateur au centre) est représentée par deux lignes parallèles (lignes rouges sur l'image).
J'ai un fichier de formes de points avec certains points tombant à l'intérieur d'une rue à plusieurs voies et d'autres à l'extérieur.
Je veux créer un script ArcPy qui trouverait les points qui se trouvent dans les rues à plusieurs voies. c'est-à-dire entre ces lignes parallèles (marquées sur l'image).
Je ne sais pas comment y parvenir, quelqu'un peut-il m'aider?
J'ai fait un peu d'exercice dessus et j'ai trouvé que la création d'un tampon sur un côté de la ligne peut créer à l'intérieur du polygone à plusieurs voies (montré sur l'image).
mais maintenant le problème est que le polygone traverse réellement la ligne (c'est-à-dire qu'il chevauche la frontière à plusieurs voies). il capturera donc des points inutiles. existe-t-il un moyen d'aligner ce polygone sur la ligne de rue?
Remarque: l'intégration ne fonctionnera pas ici, car elle déplace également la ligne de rue. j'ai juste besoin d'aligner le polygone le long de la ligne de rue.
la source
Réponses:
J'essaierais ci-dessous l'algorithme arcpy (même manuel!)
la source
Je dirais que c'est un exercice géométrique.
CODE PSEUDO:
Comme on peut le voir, il existe des cas particuliers - points noirs encerclés:
Tous les cas ci-dessus sont très improbables, mais il semble que l'option la plus sûre consiste à travailler uniquement avec des routes à 2 lignes, c'est-à-dire à les exporter vers une classe d'entités distincte. Le cas 3 est drôle, nous allons le laisser au hasard, car la distance la plus courte par rapport à la ligne n'est jamais vraiment nulle, donc la direction `` opposée '' du rayon reliant 2 points peut être trouvée.
Implémentation de Python:
Il existe une autre solution possible, peut-être plus élégante. Cela implique une triangulation. Faites-moi savoir si cela vous intéresse et je mettrai à jour ma réponse
la source
Étant donné que les rues sont parallèles, j'ai supposé qu'elles ont été créées avec l'
Copy Parallel
outil dans la barre d'outils Modifier, ce qui fait que la paire de lignes a la même direction. Nous pouvons ensuite itérer sur les coordonnées de la première ligne et les ajouter à un polygone, puis itérer sur l' inverse de la deuxième ligne. Il y a certainement une meilleure façon d'approcher les paires de lignes de saisie; l'approche OID fonctionne, mais elle n'est pas très jolie.À partir de là, c'est un appel à Intersect / Select Layer by location / what have you. Notez que le
S
polygone formé n'est pas parfait car je l'ai dessiné à main levée et il y a des arcs quiexplode_to_points
ne se gèrent pas correctement. Exécutez simplementDensify
ou équivalent.la source
m
résolution, le multipart, etc.). Je ne sais pas comment des fonctionnalités comme celle-ci sont réellement représentées dans un réseau.