Récupération des points de début et de fin pour chaque fichier de formes ligne dans ligne dans ArcGIS Desktop ou QGIS?

15

J'ai un fichier de formes vectorielles (polyligne) et j'ai besoin de récupérer les points de début et de fin (nœuds) de chaque ligne et de créer un fichier de formes avec ces points. Ensuite, je dois ajouter à la table attributaire de la polyligne les points de début et de fin pour chaque ligne basée sur l'ID des points.

Comment pourrais-je le faire de manière simple dans ArcGIS Desktop ou QGIS?

user51651
la source
2
Dans ArcGIS, si vous disposez d'une licence avancée, vous pouvez utiliser la boîte à outils Gestion des données-> Jeu d'outils Fonctions-> Outil Sommets d'entité vers points avec l'option Les deux extrémités. Tous les attributs de la ligne sont conservés. Cependant, vous devez ajouter un champ à votre classe d'entités linéaires d'origine et calculer l'ID d'entité sur votre ligne pour conserver cette valeur dans les points. Si vous avez un autre champ de valeur unique sur vos lignes, vous pouvez joindre et calculer le FID après avoir exécuté l'outil. L'option finale impliquerait de faire une jointure spatiale avec l'option One To Many et de supprimer les copies avec de mauvais attributs.
Richard Fairhurst
Est-ce que cela répond à votre question? "Comment récupérer les coordonnées de début et de fin avec Python / arcpy?" gis.stackexchange.com/q/31684/8104
Aaron
J'ai essayé une approche similaire mais je me suis perdu en cours de route. Je vais essayer de le refaire. Le mieux sera de créer une macro qui fera tout ce travail ensemble pour que tout le monde puisse faire la même procédure par la suite. À votre santé!
user51651
La méthode @RichardFairhurst, qui devrait également être suggérée comme réponse. Voilà comment je l'ai fait historiquement
bwp8nt

Réponses:

8

Il s'agit d'un one-liner pour GDAL. Cette commande crée un fichier de formes à partir des nœuds de départ avec les attributs sélectionnés:

ogr2ogr -f "ESRI Shapefile" -dialect sqlite output.shp -sql "select ST_StartPoint(geometry), attribute_1, attribute_2, attribute_3 from input" input.shp

Utilisez ST_EndPoint pour les points de terminaison.

user30184
la source
Merci beaucoup! Cela fait probablement le travail, mais je cherchais quelque chose de plus simple (visuel) pour que d'autres personnes sans compétences en programmation puissent effectuer la tâche.
user51651
Où écrivez-vous cette commande?
blue_chip
À la ligne de commande. Sous Linux, utilisez le shell normal. Sous Windows, utilisez la fenêtre de commande mais veillez à ce que votre environnement ait les bons chemins. Le shell Osgeo4w le fait automatiquement.
user30184
6

Il existe un plugin QGIS "Localiser les points le long des lignes" . Pour dériver les points de départ et d'arrivée, choisissez Ajouter des points d' extrémité et utilisez un intervalle plus long que votre ligne la plus longue.

EikeMike
la source
6

Solution QGIS: Il est possible d'extraire les nœuds de début et de fin (coordonnées) d'un fichier vectoriel de ligne, simplement en utilisant xat et yat dans la calculatrice de champ, avec les indices respectifs 0 (début) et -1 (fin).

xat(0)    
yat(0)
xat(-1)
yat(-1)
gonethou
la source
5

Pour une solution ArcGIS, j'ai créé un outil de géotraitement qui crée des points sur les lignes.

Vous pouvez le télécharger et voir le code ici: Créer des points sur les lignes

Pour le Type, vous voudrez choisir POINTS DE DÉBUT / FIN. Cela créera une nouvelle classe d'entités points qui contient les points de début et de fin de chaque polyligne.

La classe d'entités points en sortie aura également un champ appelé LineOID, qui enregistre l'OID de la polyligne à partir de laquelle elle a été créée. De cette façon, vous pouvez réintégrer vos données d'attribut.

Voici une capture d'écran de la façon dont vous définissez les paramètres:

entrez la description de l'image ici

ianbroad
la source
C'est génial Ian! Je vais le télécharger et le tester et vous donner des commentaires dès que possible. Je pense que cet outil sera utile pour ce dont j'ai besoin et aidera à automatiser le processus mieux! Merci!
user51651
Salut Ian, Idk pourquoi mais je ne peux pas faire fonctionner votre outil dans ArcGIS 10.0 ou 10.1 ... Je l'ai ajouté à la boîte à outils mais il ne déjeune pas ... = /
user51651
@ user51651 Recevez-vous un message d'erreur? Cela ne fonctionnera pas avec 10.0, mais cela devrait fonctionner avec 10.1 et supérieur. Si vous allez dans le menu Géotraitement, puis dans Résultats. Y a-t-il des messages là-dedans?
ianbroad
3

pour ajouter les coordonnées des points finaux dans la table attributaire, à l'aide d'ArcGIS, vous pouvez utiliser la calculatrice de champ (pas besoin de créer des géométries). Cliquez sur le nom du champ, calculatrice de champ, puis utilisez la syntaxe Python avec les lignes simples ci-dessous (exemple avec la coordonnée X):

!shape.firstPoint.X!

!shape.lastPoint.X!

notez que tout est à l'intérieur du !!

radouxju
la source
C'est une très bonne réponse, je ne savais pas que c'était possible. Un instantané de celui-ci dans Field Calculator pourrait aider les personnes moins familières avec la tâche. Je suppose que vous pouvez également le faire avec des valeurs M?
bwp8nt
2

Dans QGIS, utilisez l' outil Extraire des sommets spécifiques . Définissez les indices de sommet à 0 pour obtenir les points de départ et -1 pour obtenir les points de fin ou 0, -1 pour obtenir les deux.

QGIS Extraire des sommets spécifiques

Notez la description:

Le premier sommet correspond à un indice de 0, le deuxième sommet a un indice de 1, etc. Des indices négatifs peuvent être utilisés pour trouver des sommets à la fin de la géométrie, par exemple, un indice de -1 correspond au dernier sommet, - 2 correspond à l'avant-dernier sommet, etc.

Karol Daniluk
la source
1

Dans ArcGIS, si vous disposez d'une licence avancée, vous pouvez utiliser la boîte à outils Gestion des données-> Jeu d'outils Fonctions-> Outil Sommets d'entité vers points avec l'option Les deux extrémités. Tous les attributs de la ligne sont conservés. Cependant, vous devez ajouter un champ à votre classe d'entités linéaires d'origine et calculer l'ID d'entité sur votre ligne pour conserver cette valeur dans les points. Si vous avez un autre champ de valeur unique sur vos lignes, vous pouvez joindre et calculer le FID après avoir exécuté l'outil. L'option finale impliquerait de faire une jointure spatiale avec l'option One To Many et de supprimer les copies avec de mauvais attributs.

Richard Fairhurst
la source