No estoy muy seguro de cómo redactar esto, pero espero hacerlo de una manera que transmita con precisión lo que estoy tratando de hacer...
Estoy usando Manifold GIS para este proyecto en particular, pero estoy abierto a cualquier método que logre el resultado deseado (menos ArcGIS ya que no tengo ningún software ESRI con licencia).
Empecé con un conjunto de datos que contenía una serie de puntos. Usando un script publicado por un usuario de Manifold, pude convertir estos puntos en segmentos de línea (que pueden o no ser necesarios para hacer lo que necesito).
Tengo datos como los siguientes:
ID US_NUMBER Absolute_Distance_ft DESCRIPTION FEATURE_TYPE_ID Line id
365694 5 0.059 GWD 30 5
365695 0 0.059 Weld Start 77 0
365696 0 1.814 VLV 1 7 0
365697 7 3.56 GWD 30 7
365698 0 4.177 Offtake 78 0
365699 10 4.783 GWD 30 10
365700 0 5.774 Weldolet 80 0
365701 20 6.709 GWD 30 20
365702 0 7.602 5 0
365703 0 9.209 Bend 2 0
365704 30 11.683 GWD 30 30
365705 40 20.705 GWD 30 40
Cada segmento de línea comienza donde el "FEATURE_TYPE_ID" es 30 y tiene un "US_NUMBER" de n. La siguiente línea comienza en el siguiente 30 y tiene un "US_NUMBER" n1, y así sucesivamente...
Como puede ver en la tabla, "US_NUMBER" 5 es el inicio de un segmento de línea. El siguiente segmento de línea relevante es "US_NUMBER" 7. Los dos segmentos entre 5 y 7 son 0 y 0.
Quiero recorrer toda la línea y actualizar el "ID de línea" de cada segmento para que cada segmento que tenga un ID de línea de 0 se establezca en el "US_NUMBER" donde el anterior "FEATURE_TYPE_ID" era 30...
Así que tendría algo como...
ID US_NUMBER Absolute_Distance_ft DESCRIPTION FEATURE_TYPE_ID Line id
365694 5 0.059 GWD 30 5
365695 0 0.059 Weld Start 77 5
365696 0 1.814 VLV 1 7 5
365697 7 3.56 GWD 30 7
365698 0 4.177 Offtake 78 7
365699 10 4.783 GWD 30 10
365700 0 5.774 Weldolet 80 10
365701 20 6.709 GWD 30 20
365702 0 7.602 5 20
365703 0 9.209 Bend 2 20
365704 30 11.683 GWD 30 30
365705 40 20.705 GWD 30 40
¿Tiene sentido?
0 votos
Podrías utilizar el módulo csv de python (tendrías que convertir los datos a csv primero) para leer cada línea capturando el ID de línea. Yo crearía 2 variables Pre_Feat_ID y Current_Feat_ID para almacenar el ID de la característica actual y la anterior. Luego usaría una sentencia if para comprobar si el Current_Feat_ID == 0, si es cierto, actualizaría el Current_Feat_ID con el valor del Pre_Feat_ID. No estoy muy familiarizado con Manifold, pero esto fue lo primero que se me ocurrió
0 votos
Suena bastante simple. ¡Tan simple que puede funcionar! Lo intentaré y veré si puedo hacerlo funcionar. ¡Gracias!
0 votos
Me encuentro con algunos problemas de lógica en este caso... ¿Podría publicar un ejemplo para ilustrar su proceso de pensamiento?