Menemukan titik tengah garis menggunakan ArcPy?

12

Bagaimana titik tengah polyline dapat dihitung menggunakan kerangka kerja geoproses , misalnya dalam skrip Python?

The polyline.centroid properti mengembalikan Centroid benar jika itu adalah dalam atau di fitur; jika tidak, titik label dikembalikan . Centroid jarang terletak pada garis tidak lurus, yang tidak berguna untuk tujuan saya.

Alat Feature Vertices to Points memiliki opsi titik tengah tetapi ini membutuhkan ArcInfo, yang saat ini tidak saya miliki.

Opsi bisa berupa menambahkan langkah-langkah ke polyline dan membuat event rute 50% di sepanjang garis.

Solusi lain adalah dengan menggunakan opsi Calculate Geometry di ArcMap, tetapi idealnya saya perlu mengotomatiskan proses ini dalam sebuah skrip.

Adakah saran yang lebih baik / lebih cepat?

Saya terbatas pada ArcGIS 10.0 (tanpa akses ke lisensi tingkat ArcInfo) untuk saat ini.

Stephen Lead
sumber
4
Lihat pertanyaan ini . Pada akhirnya saya menggunakan fungsi referensi linear di Shapely untuk menentukan titik tengah.
Mike T
1
Saya pikir @MikeToews memiliki ide yang tepat, dan cukup gunakan fungsi referensi linear di ArcGIS sebagai lawan membawanya ke Shapely. Sepertinya ini adalah fungsi yang Anda inginkan: Make Route Event Layer - Linear Referencing . Anda mungkin dapat membuat tabel acara dengan cepat. Ini untuk 10.1, tetapi harus sama dalam 10.0.
Dapatkan Spatial
1
Blog ini tampaknya berisi algoritma yang dapat dikonversi ke Python / ArcPy: rbrundritt.wordpress.com/2008/10/14/…
PolyGeo
Apakah ada yang melakukannya di javascript? Saya berhasil hanya di Arcpy. Hormat kami Ezequias
Ezequias
Jika Anda memiliki pertanyaan baru, silakan tanyakan dengan mengklik tombol Ajukan Pertanyaan . Sertakan tautan ke pertanyaan ini jika itu membantu menyediakan konteks. - Dari Ulasan
BERA

Jawaban:

23

Kelas Polyline memiliki metode baru yang disebut "positionAlongLine" di ArcGIS 10.1. Ini akan mengembalikan objek PointGeometry dengan tepat satu titik pada jarak yang ditentukan dari ujung awal garis, atau sebagian kecil dari jarak antara awal dan akhir . Untuk menemukan titik tengah, Anda hanya perlu melakukannya positionAlongLine(0.5,True). Untuk menemukan titik tengah untuk garis dan menambahkan koordinatnya ke tabel atribut, Anda bisa melakukan Kalkulator Bidang pada pernyataan berikut:

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

Perhatikan bahwa Anda harus menggunakan parser Python di bidang kalkulator agar ini berfungsi.

Jika Anda ingin mengakses objek titik ini dengan Python, Anda cukup melakukan hal berikut:

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
sumber
terima kasih, ini terlihat hebat. Saya seharusnya menyebutkan bahwa saya saat ini terbatas pada 10.0, jadi opsi Rute di atas mungkin sudah cukup untuk saat ini
Stephen Lead
Kesalahan: Baris berisi nilai buruk. Menggunakan arcGIS10, dengan Python diperiksa di Model Builder, saya menggunakan pernyataan yang sama:! Bentuk! .PositionAlongLine (0,5, True) .firstPoint.X
juasmilla
1

Dengan lisensi ET Geo Wizards Anda dapat mencoba fungsi "Polyline to Point" dengan opsi "Middle points" dan "Remove Duplicate Points" (opsional): http://www.ian-ko.com/ET_GeoWizards/UserGuide/convertPl2Pnt. htm

Anda dapat menerapkan ET Geo Wizards seperti ini:

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

...

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

Untuk variabel input fungsi ET, silakan lihat: http://www.ian-ko.com/ET_GeoWizards/UserGuide/Scripting/scripting_PolylineToPoint.htm

KalleBlomquist
sumber