Mit ArcPy den Mittelpunkt der Linie finden?


11

Wie kann der Mittelpunkt einer Polylinie mithilfe des Geoverarbeitungs-Frameworks berechnet werden , z. B. in einem Python-Skript?

Die Eigenschaft polyline.centroid gibt den wahren Schwerpunkt zurück, wenn er sich innerhalb oder auf dem Feature befindet. Andernfalls wird der Beschriftungspunkt zurückgegeben . Der Schwerpunkt befindet sich selten auf nicht geraden Linien, was für meine Zwecke nutzlos ist.

Das Werkzeug Feature-Eckpunkte zu Punkten verfügt über eine Mittelpunktoption, erfordert jedoch ArcInfo, das ich derzeit nicht habe.

Eine Option könnte darin bestehen, den Polylinien Kennzahlen hinzuzufügen und ein Routenereignis zu 50% entlang der Linie zu erstellen.

Eine andere Problemumgehung besteht darin, die Option "Geometrie berechnen" in ArcMap zu verwenden. Idealerweise muss dieser Prozess jedoch in einem Skript automatisiert werden.

Irgendwelche besseren / schnelleren Vorschläge?

Ich bin momentan auf ArcGIS 10.0 (ohne Zugriff auf eine ArcInfo-Lizenz) beschränkt.


4
Siehe diese Frage . Am Ende habe ich die linearen Referenzierungsfunktionen in Shapely verwendet, um den Mittelpunkt zu bestimmen.
Mike T

1
Ich denke, @MikeToews hat die richtige Idee und verwendet einfach die linearen Referenzierungsfunktionen in ArcGIS, anstatt sie in Shapely zu übernehmen. Es sieht so aus, als wäre dies die gewünschte Funktion: Routenereignisebene erstellen - Lineare Referenzierung . Sie können die Ereignistabelle wahrscheinlich im laufenden Betrieb erstellen. Dies ist für 10.1, sollte aber in 10.0 gleich sein.
Holen Sie sich Spatial

1
Dieser Blog scheint einen Algorithmus zu enthalten, der in Python / ArcPy konvertiert werden könnte: rbrundritt.wordpress.com/2008/10/14/…
PolyGeo

Hat es jemand in Javascript gemacht? Ich habe es nur in Arcpy erfolgreich gemacht. Mit freundlichen Grüßen Ezequias
Ezequias

Wenn Sie eine neue Frage haben, fragen Sie es bitte durch Klicken Frage stellen Taste. Fügen Sie einen Link zu dieser Frage hinzu, wenn dies zur Bereitstellung des Kontexts beiträgt. - Aus dem Rückblick
BERA

Antworten:


22

Die Polyline- Klasse verfügt in ArcGIS 10.1 über eine neue Methode namens "positionAlongLine". Dadurch wird ein PointGeometry- Objekt mit genau einem Punkt in einem bestimmten Abstand vom Anfangsende der Linie oder einem Bruchteil des Abstands zwischen Start und Ende zurückgegeben . Um den Mittelpunkt zu finden, müssten Sie nur tun positionAlongLine(0.5,True). Um die Mittelpunkte für Linien zu finden und ihre Koordinaten zur Attributtabelle hinzuzufügen, können Sie den Feldrechner für die folgende Anweisung ausführen:

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

Beachten Sie, dass Sie den Python-Parser im Feldrechner verwenden müssen, damit dies funktioniert.

Wenn Sie in Python auf dieses Punktobjekt zugreifen möchten, gehen Sie wie folgt vor:

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

Danke, das sieht gut aus. Ich hätte erwähnen sollen, dass ich derzeit auf 10.0 beschränkt bin, daher muss die obige
Stephen Lead

Fehler: Die Zeile enthält einen fehlerhaften Wert. Unter Verwendung von arcGIS10, bei dem Python im Model Builder aktiviert war, habe ich dieselbe Anweisung verwendet :! Shape! .PositionAlongLine (0.5, True) .firstPoint.X
juasmilla

1

Mit der ET Geo Wizards-Lizenz können Sie die Funktion "Polylinie zum Punkt" mit den Optionen "Mittelpunkte" und "Doppelte Punkte entfernen" (optional) ausprobieren: http://www.ian-ko.com/ET_GeoWizards/UserGuide/convertPl2Pnt. htm

Sie können ET Geo Wizards wie folgt implementieren:

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

...

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

Eingabevariablen der ET-Funktion finden Sie unter: http://www.ian-ko.com/ET_GeoWizards/UserGuide/Scripting/scripting_PolylineToPoint.htm

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.