Trovare il punto medio della linea usando ArcPy?


12

Come si può calcolare il punto medio di una polilinea usando il framework di geoprocessing , ad esempio in uno script Python?

La proprietà polyline.centroid restituisce il vero centroide se si trova all'interno o sulla funzione; in caso contrario, viene restituito il punto etichetta . Il centroide si trova raramente su linee non diritte, il che è inutile per i miei scopi.

Lo strumento Feature Vertices to Points ha un'opzione punto medio ma questo richiede ArcInfo, che al momento non ho.

Un'opzione potrebbe essere quella di aggiungere misure alle polilinee e creare un evento di rotta del 50% lungo la linea.

Un'altra soluzione alternativa è utilizzare l'opzione Calcola geometria in ArcMap, ma idealmente ho bisogno di automatizzare questo processo in uno script.

Qualche suggerimento migliore / più veloce?

Per il momento sono limitato ad ArcGIS 10.0 (senza accesso a una licenza di livello ArcInfo).


4
Vedere questa domanda . Alla fine ho usato le funzioni di riferimento lineare in Shapely per determinare il punto medio.
Mike T,

1
Penso che @MikeToews abbia l'idea giusta e usi semplicemente le funzioni di riferimento lineare in ArcGIS invece di prenderlo in Shapely. Sembra che questa sia la funzione che vorresti: Crea il livello dell'evento del percorso - Riferimenti lineari . Probabilmente puoi creare la tabella degli eventi al volo. Questo è per 10.1, ma dovrebbe essere lo stesso in 10.0.
Ottieni Spatial il

1
Questo blog sembra contenere un algoritmo che potrebbe essere convertito in Python / ArcPy: rbrundritt.wordpress.com/2008/10/14/…
PolyGeo

Qualcuno l'ha fatto in JavaScript? L'ho fatto con successo solo in Arcpy. Cordiali saluti Ezquias
Ezequias,

Se hai una nuova domanda, chiedila facendo clic sul pulsante Poni domanda . Includere un collegamento a questa domanda se aiuta a fornire un contesto. - Dalla recensione
BERA,

Risposte:


23

La classe Polyline ha un nuovo metodo chiamato "positionAlongLine" in ArcGIS 10.1. Questo restituirà un oggetto PointGeometry con esattamente un punto ad una distanza specificata dalla fine iniziale della linea, o una frazione della distanza tra l'inizio e la fine . Per trovare il punto medio, devi solo fare positionAlongLine(0.5,True). Per trovare i punti medi per le linee e aggiungere le loro coordinate alla tabella degli attributi, è possibile eseguire la calcolatrice di campo sulla seguente istruzione:

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

Si noti che è necessario utilizzare il parser Python nel calcolatore di campo affinché ciò funzioni.

Se si desidera accedere a questo oggetto punto in Python, è sufficiente fare quanto segue:

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

grazie, sembra fantastico. Avrei dovuto menzionare che al momento sono limitato alla 10.0, quindi per il momento l'opzione di cui sopra potrebbe essere sufficiente per ora
Stephen Lead,

Errore: la riga contiene un valore errato. Usando arcGIS10, con Python selezionato in Model Builder, ho usato la stessa istruzione:! Shape! .PositionAlongLine (0.5, True) .firstPoint.X
juasmilla

1

Con la licenza ET Geo Wizards è possibile provare la funzione "Polilinea da puntare" con l'opzione "Punti centrali" e "Rimuovi punti duplicati" (opzionale): http://www.ian-ko.com/ET_GeoWizards/UserGuide/convertPl2Pnt. htm

Puoi implementare ET Geo Wizards in questo modo:

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

...

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

Per le variabili di input della funzione ET, consultare: http://www.ian-ko.com/ET_GeoWizards/UserGuide/Scripting/scripting_PolylineToPoint.htm

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.