Znalezienie punktu środkowego linii za pomocą ArcPy?

12

W jaki sposób można obliczyć punkt środkowy polilinii za pomocą struktury geoprzetwarzania , np. W skrypcie Python?

Właściwość polyline.centroid zwraca True centroid, jeśli jest w obiekcie lub na obiekcie; w przeciwnym razie zwracany jest punkt etykiety . Środek ciężkości rzadko znajduje się na nieprostych liniach, co jest bezużyteczne dla moich celów.

Narzędzie Polecaj wierzchołki do punktów ma opcję punktu środkowego, ale wymaga to ArcInfo, którego obecnie nie mam.

Opcją może być dodanie miar do polilinii i utworzenie zdarzenia trasy 50% wzdłuż linii.

Innym obejściem jest użycie opcji Oblicz geometrię w ArcMap, ale idealnie muszę zautomatyzować ten proces w skrypcie.

Jakieś lepsze / szybsze sugestie?

W tej chwili jestem ograniczony do ArcGIS 10.0 (bez dostępu do licencji na poziomie ArcInfo).

Stephen Lead
źródło
4
Zobacz to pytanie . Na koniec użyłem funkcji odniesienia liniowego w Shapely do określenia punktu środkowego.
Mike T
1
Myślę, że @MikeToews ma słuszny pomysł i po prostu używaj liniowych funkcji odwoływania się w ArcGIS zamiast brać je w Shapely. Wygląda na to, że potrzebujesz tej funkcji: Utwórz warstwę zdarzenia trasy - odwołanie liniowe . Prawdopodobnie możesz stworzyć tabelę zdarzeń na bieżąco. To dotyczy 10.1, ale powinno być takie samo w 10.0.
Uzyskaj Spatial
1
Ten blog wydaje się zawierać algorytm, który można przekonwertować na Python / ArcPy: rbrundritt.wordpress.com/2008/10/14/…
PolyGeo
Czy ktoś zrobił to w javascript? Zrobiłem to z powodzeniem tylko w Arcpy. Z poważaniem Ezequias
Ezequias
Jeśli masz nowe pytanie, zadaj je, klikając przycisk Zadaj pytanie . Dołącz link do tego pytania, jeśli pomaga to w zapewnieniu kontekstu. - Z recenzji
BERA

Odpowiedzi:

23

Łamana klasa ma nową metodę o nazwie „positionAlongLine” w ArcGIS 10.1. To zwrócić PointGeometry przedmiotu z dokładnie jednym punkcie, w określonej odległości od wyjściowego końca linii, lub ułamek odległości między początkiem i końcem . Aby znaleźć punkt środkowy, wystarczy zrobić positionAlongLine(0.5,True). Aby znaleźć punkty środkowe linii i dodać ich współrzędne do tabeli atrybutów, możesz wykonać Kalkulator pola na następującej instrukcji:

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

Zauważ, że aby działało, musisz używać parsera Python w kalkulatorze polowym.

Jeśli chcesz uzyskać dostęp do tego obiektu punktowego w Pythonie, wykonaj następujące czynności:

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
źródło
dzięki, wygląda świetnie. Powinienem jednak wspomnieć, że obecnie jestem ograniczony do 10,0, więc może być na razie wystarczająca opcja Trasy powyżej
Stephen Lead
Błąd: wiersz zawiera złą wartość. Korzystając z arcGIS10, z Pythonem zaznaczonym w Konstruktorze modeli, użyłem tego samego wyrażenia:! Shape! .PositionAlongLine (0.5, True) .firstPoint.X
juasmilla
1

Z licencją ET Geo Wizards możesz wypróbować funkcję „Polyline to Point” z opcją „Punkty środkowe” i „Usuń duplikaty punktów” (opcjonalnie): http://www.ian-ko.com/ET_GeoWizards/UserGuide/convertPl2Pnt. htm

Możesz wdrożyć ET Geo Wizards w następujący sposób:

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

...

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

Zmienne wejściowe funkcji ET znajdują się na stronie: http://www.ian-ko.com/ET_GeoWizards/UserGuide/Scripting/scripting_PolylineToPoint.htm

KalleBlomquist
źródło