Suite

Script Python pour identifier et inverser les lignes numérisées dans le mauvais sens ?

Script Python pour identifier et inverser les lignes numérisées dans le mauvais sens ?


J'ai un jeu de données de rivière qui a été numérisé à la fois dans le sens du flux et dans le sens opposé du flux. Je dois trouver une méthode automatisée pour déterminer quelles lignes ont été numérisées d'aval en amont et les retourner automatiquement. Je n'ai pas d'analyste spatial, 3D ou réseau. Je cherche un code python. Ces lignes ont été créées dans MicroStation à l'aide d'un ensemble de données LiDAR de terre nue. Ils ont été numérisés à la main et il ne s'agit pas d'une ligne médiane de cours d'eau mais d'une ligne suivant les bords de la rivière.


Pour ce faire, je crée des itinéraires à partir des lignes à l'aide de l'outil Créer un itinéraire pour obtenir les lignes avec des attributs d'identification communs (comme un nom de rivière) toutes combinées et orientées dans une seule direction. Extrayez ensuite les points d'extrémité FROM et TO des lignes d'origine dans des classes d'entités ponctuelles distinctes à l'aide de l'outil Sommets d'entités vers points. J'utilise l'outil Localiser les entités le long des itinéraires avec les points d'extrémité de ligne pour obtenir les valeurs M des points d'extrémité de ligne et sélectionner uniquement les enregistrements où l'attribut ROUTE_ID est partagé par les points et les exporter. Ensuite, je joins les points De aux lignes d'origine sur les champs ORIG_FID et OBJECTID, puis je joins les points À aux lignes d'origine sur les mêmes champs. Je sélectionne toutes les lignes dont les mesures À sont inférieures aux mesures De. Ces lignes ont été inversées par rapport à l'orientation souhaitée représentée par l'itinéraire. Ensuite, je casse la jointure et applique l'outil Inverser la ligne à toutes les lignes sélectionnées (faites une sauvegarde de vos lignes avant de faire quoi que ce soit, car cet outil modifie directement vos données de ligne d'origine). Les itinéraires de branchement créeront des problèmes et devraient être simplifiés en itinéraires sans branchement pour obtenir les meilleurs résultats. Mon réseau est pour les routes, donc obtenir des itinéraires sans embranchement est plus simple pour moi que ce ne le sera pour vous avec vos rivières, mais l'effort en vaut la peine et plus rapide et moins sujet aux erreurs que tous les scripts que j'ai vus ou créés qui essaient de comparer la ligne à la ligne.