Tengo el punto de inicio y el punto final de una polilínea. ¿Cómo puedo obtener un punto en esa polilínea a partir de puntos finales especificados por la distancia dada?
¿Cómo puedo obtener esto usando arcpy, siempre que este script funcione en ArcView sin importar ningún módulo ( como esta respuesta )? Estoy tratando de no codificar los valores.
Pregunta relacionada:
arcpy
line
linear-referencing
usuario
fuente
fuente
object.interpolate(distance[, normalized=False])
. ¿Es un método de arcpy? Si es así, ¿puede publicar el enlace? Lo busqué en Google, pero no lo encontré.Respuestas:
Esto suena similar a "Referencia lineal" y ese conjunto de herramientas estaría disponible en ArcView. Además, puede escribir esta herramienta muy fácilmente.
Enlace a la Ayuda de ESRI para referencias lineales
fuente
En función de sus necesidades, como se mencionó en @LouisH, el uso de referencias lineales es definitivamente el camino a seguir. Elaboré un código que debería satisfacer su necesidad de elementos no codificados, sino que los solicité como parámetros.
Como explicación, la herramienta de referencia lineal utilizada a continuación toma "Rutas", en su caso las características de línea y coloca "Eventos", en su caso los puntos, a lo largo de ellos en función de un campo de distancia. Esto da como resultado un FeatureLayer, que se almacena en la memoria, que es la razón de la última función que copia las características en una clase de características de salida.
Editar: una cosa para pensar con esta herramienta, y probablemente cualquier operación para localizar puntos en función de la distancia desde el final de una línea, es desde qué extremo de la línea comenzará. La herramienta de referencia lineal, por ejemplo, funciona en función de la dirección digitalizada de una línea. Será importante asegurarse de que tiene alguna forma de identificar en qué punto final se basan sus mediciones.
fuente
Resolver un problema de referencia lineal como este
without importing any modules
está más allá de mi rango.He utilizado
Shapely
(paquete de Python para la manipulación y análisis de geometrías geoespaciales 2D. Y tiene licencia BSD :-))descárgalo desde aquí . La versión 2.6, que es la única que admite arcgis 10 arcpy ... es una instalación simple (tamaño de 1,5 MB)
y ahora aquí está el script arcpy para lograr el propósito ... perdona mi pitón ... solo hoy aprendí sobre los bucles, tuplas, etc. :)
nota : esto no funcionará si la entidad tiene segmentos curvos
fuente
Encontré esta pregunta tratando de hacer lo que creo que es lo mismo. Quería que todo se hiciera a través de arcpy. El uso de referencia lineal no tenía sentido para mí porque aún no tengo los eventos puntuales (y no pude descubrir cómo usar LR para obtenerlos). El quid de lo que terminé usando fue
Esto requiere Arc 10.1 o superior; No pude averiguar si esto estaba disponible por debajo del nivel de licencia de ArcInfo que tengo (OP especificó ArcView).
En mi ejemplo anterior, quería un punto no a una distancia fija, sino en un porcentaje de la longitud total de la línea. Para hacer esto, proporcioné el segundo argumento opcional para
positionAlongLine
. Omite el segundo argumento si solo desea especificar una distancia absoluta. Aquí está el documento .El código de muestra más completo es
'flFL'
es mi característica Capa de líneas en la que quiero ubicar los puntos. Corre bastante rápido.NumPyArrayToFeatureClass
fue una forma muy agradable de volcar todos mis puntos en una clase de función (¡gracias a mi colega Curtis por esa parte!). Había estado experimentando w /Append_management
pero eso fue un poco más lento.fuente
Puede ser una exageración, pero si tiene acceso a la extensión de Análisis de red, podría crear una red a partir de sus polilíneas y luego crear áreas de servicio alrededor de sus puntos de entrada, especificando el tamaño de SA como la distancia de interés. Aquí hay un ejemplo superficial con 111 metros de SA desde el punto:
Entonces tendrías que encontrar puntos donde SA cruza la línea.
fuente
Creo que puede obtenerlo con el método de Vértices a puntos (gestión de datos). Puedes obtener más información aquí .
o puede consultar Split Line At Point (Gestión de datos) aquí .
no son suficientes por completo, pero puedes escribir tu propio código ...
Espero que te ayude...
fuente