J'ai un ensemble de lignes représentant des lignes de bus. Certaines lignes se chevauchent et empruntent les mêmes routes.
Je peux extraire les nœuds.
Cependant, je suis intéressé à extraire uniquement les croisements comme celui-ci:
Comment puis-je faire ceci? Je cherche des moyens avec QGIS ou Python.
J'ai essayé la méthode d'intersection de GDAL Python mais cela ne me renvoie essentiellement que les sommets.
La méthode Line Intersections de QGIS me renvoie les croisements si deux lignes se croisent. Cependant, dans le cas où deux lignes de bus parcourent une grande partie de leur itinéraire sur la même route, cela ne me donne pas le point de fusionner.
Réponses:
Les nœuds:
Vous voulez deux choses, les points d'extrémité des polylignes (sans nœuds intermédiaires) et les points d'intersection. Il y a un problème supplémentaire, certains points d'extrémité de polylignes sont également des points d'intersection:
Une solution consiste à utiliser Python et les modules Shapely et Fiona
1) Lisez le fichier de formes:
2) Trouvez les points d'extrémité des lignes ( comment obtenir les points d'extrémité d'une polyligne? ):
3) Calculez les intersections (itération à travers des paires de géométries dans la couche avec le module itertools ). Le résultat de certaines intersections est MultiPoints et nous voulons une liste de points:
4) Éliminez les doublons entre les points d'extrémité et les points d'intersection (comme vous pouvez le voir sur les figures)
5) Enregistrez le fichier de formes résultant
Résultat final:
Les segments de ligne
Si vous souhaitez également les segments entre les nœuds, vous devez "planariser" ( graphique planaire , aucune arête ne se croise) votre fichier de formes. Cela peut être fait par la unary_union fonction de Shapely
la source
result = endpts.extend([pt for pt in inters if pt not in endpts])
car il semble que la.extend
méthode se modifieendpt
. Dans mon casresult = None
après cette opération. C'estendpts
ce qui finit par contenir le résultat sett