¿Encontrar el punto medio de la línea usando ArcPy?

12

¿Cómo se puede calcular el punto medio de una polilínea utilizando el marco de geoprocesamiento , por ejemplo, en un script de Python?

La propiedad polyline.centroid devuelve el centroide verdadero si está dentro o sobre la entidad; de lo contrario, se devuelve el punto de etiqueta . El centroide rara vez se encuentra en líneas no rectas, lo cual es inútil para mis propósitos.

La herramienta Vértices de entidades a puntos tiene una opción de punto medio, pero esto requiere ArcInfo, que actualmente no tengo.

Una opción podría ser agregar medidas a las polilíneas y crear un evento de ruta al 50% a lo largo de la línea.

Otra solución es usar la opción Calcular geometría en ArcMap, pero idealmente necesito automatizar este proceso en un script.

¿Alguna sugerencia mejor / más rápida?

Por el momento estoy limitado a ArcGIS 10.0 (sin acceso a una licencia de nivel ArcInfo).

Stephen Lead
fuente
44
Ver esta pregunta . Al final, utilicé las funciones de referencia lineal en Shapely para determinar el punto medio.
Mike T
1
Creo que @MikeToews tiene la idea correcta, y solo uso las funciones de referencia lineal en ArcGIS en lugar de llevarlo a Shapely. Parece que esta es la función que desearía: Crear capa de evento de ruta - Referencia lineal . Probablemente puedas hacer la tabla de eventos sobre la marcha. Esto es para 10.1, pero debería ser lo mismo en 10.0.
Consigue espacial el
1
Este blog parece contener un algoritmo que podría convertirse a Python / ArcPy: rbrundritt.wordpress.com/2008/10/14/…
PolyGeo
¿Alguien lo hizo en javascript? Lo hice con éxito solo en Arcpy. Sinceramente Ezequias
Ezequias
Si tiene una nueva pregunta, hágala haciendo clic en el botón Hacer pregunta . Incluya un enlace a esta pregunta si ayuda a proporcionar contexto. - De la opinión
BERA

Respuestas:

23

La clase Polyline tiene un nuevo método llamado "positionAlongLine" en ArcGIS 10.1. Esto devolverá un objeto PointGeometry con exactamente un punto a una distancia especificada desde el extremo inicial de la línea, o una fracción de la distancia entre el inicio y el final . Para encontrar el punto medio, solo necesitas hacer positionAlongLine(0.5,True). Para encontrar los puntos medios de las líneas y agregar sus coordenadas a la tabla de atributos, puede hacer la Calculadora de campo en la siguiente instrucción:

  • !Shape!.positionAlongLine(0.5,True).firstPoint.X
  • !Shape!.positionAlongLine(0.5,True).firstPoint.Y

Tenga en cuenta que debe usar el analizador Python en la calculadora de campo para que esto funcione.

Si desea acceder a este objeto de punto en Python, simplemente haría lo siguiente:

Input_shp = "C:\Temp\Line.shp"
Cursor = arcpy.SearchCursor(Input_shp)
for Feature in Cursor:
    Midpoint = Feature.shape.positionAlongLine(0.50,True).firstPoint
    print Midpoint.X
    print Midpoint.Y
dmahr
fuente
gracias, esto se ve genial Sin embargo, debería haber mencionado que actualmente estoy limitado a 10.0, por lo que la opción de ruta anterior puede ser suficiente por ahora
Stephen Lead
Error: la fila contiene un valor incorrecto. Usando arcGIS10, con Python marcado en Model Builder, utilicé la misma declaración:! Shape! .PositionAlongLine (0.5, True) .firstPoint.X
juasmilla
1

Con la licencia ET Geo Wizards, puede probar la función "Polilínea a punto" con la opción "Puntos intermedios" y "Eliminar puntos duplicados" (opcional): http://www.ian-ko.com/ET_GeoWizards/UserGuide/convertPl2Pnt. htm

Puede implementar ET Geo Wizards de esta manera:

toolbox_ETgeowizards = arcpy.GetParameterAsText(0) # Location ET Toolbox (Type: Toolbox)
arcpy.ImportToolbox(toolbox_ETgeowizards)

...

arcpy.ET_GPPolylineToPoints(pInFeatureClass, sOutFileName, sExportOption, bRemoveDuplicates)

Para conocer las variables de entrada de la función ET, consulte: http://www.ian-ko.com/ET_GeoWizards/UserGuide/Scripting/scripting_PolylineToPoint.htm

KalleBlomquist
fuente