ArcPy kullanarak çizgi orta noktasını mı buldunuz?


12

Bir çoklu çizginin orta noktası , örneğin bir Python betiğinde , coğrafi işlem çerçevesi kullanılarak nasıl hesaplanabilir ?

Polyline.centroid özellik döndürür o dahilinde veya özellik açıksa gerçek ağırlık noktasına; aksi takdirde etiket noktası döndürülür . Centroid nadiren düz olmayan çizgiler üzerinde bulunur, bu da benim amacım için işe yaramaz.

Özelliği Tepe Noktaları için aracı bir orta nokta seçeneği vardır ama bu şu anda yok ArcInfo gerektirir.

Bir seçenek, çoklu çizgilere hesaplama eklemek ve çizgi boyunca% 50'lik bir rota olayı oluşturmak olabilir.

Başka bir geçici çözüm ArcMap'te Geometri Hesapla seçeneğini kullanmaktır, ancak ideal olarak bu işlemi bir komut dosyasında otomatikleştirmem gerekir.

Daha iyi / daha hızlı öneriniz var mı?

Şu an için ArcGIS 10.0 ile sınırlıyım (ArcInfo seviye lisansına erişim olmadan).


4
Bu soruya bakın . Sonunda orta noktayı belirlemek için Shapely'deki doğrusal referans fonksiyonlarını kullandım.
Mike T

1
Bence @MikeToews doğru fikre sahip ve sadece Shagely içine almak yerine ArcGIS doğrusal referans fonksiyonları kullanın. Bu, istediğiniz bir işlev gibi görünüyor: Rota Olay Katmanı Yap - Doğrusal Başvuru . Muhtemelen olay tablosunu anında yapabilirsiniz. Bu 10.1 içindir, ancak 10.0'da aynı olmalıdır.
Mekansal Olsun

1
Bu blog, Python / ArcPy'ye dönüştürülebilecek bir algoritma içeriyor gibi görünüyor: rbrundritt.wordpress.com/2008/10/14/…
PolyGeo

Javascript'te birisi yaptı mı? Bunu sadece Arcpy'de başarıyla yaptım. Saygılarımızla Ezequias
Ezequias

Yeni bir sorunuz varsa, lütfen Soru Sor düğmesini tıklayarak sorun . Bağlam sağlamaya yardımcı oluyorsa bu soruya bir bağlantı ekleyin. - Yorumdan
BERA

Yanıtlar:


23

Çoklu çizgi sınıfı ArcGIS 10.1'de "positionAlongLine" denilen yeni bir yöntem vardır. Bu , çizginin başlangıç ​​ucundan belirli bir mesafede tam olarak bir noktaya veya başlangıç ​​ile bitiş arasındaki mesafenin bir kısmına sahip bir PointGeometry nesnesi döndürür . Orta noktayı bulmak için yapmanız gereken tek şey . Çizgilerin orta noktalarını bulmak ve koordinatlarını öznitelik tablosuna eklemek için, aşağıdaki ifadede Alan Hesaplayıcısı'nı yapabilirsiniz:positionAlongLine(0.5,True)

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

Bunun çalışması için Python ayrıştırıcısını alan hesaplayıcısını kullanmanız gerektiğini unutmayın.

Bu nokta nesnesine Python'da erişmek istiyorsanız, aşağıdakileri yapmanız yeterlidir:

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

teşekkürler, bu harika görünüyor. Yine de 10.0 ile sınırlı olduğumu söylemeliydim, bu yüzden yukarıdaki Rota seçeneği şimdilik yeterli olabilir
Stephen Lead

Hata: Satır hatalı bir değer içeriyor. ArcGIS10 kullanarak, Model Builder'da Python işaretli olarak, aynı ifadeyi kullandım:! Shape! .PositionAlongLine (0.5, True) .firstPoint.X
juasmilla

1

ET Geo Wizards lisansı ile "Orta Noktalar" ve "Yinelenen Noktaları Kaldır" (isteğe bağlı) seçeneği ile "Çoklu Çizgi'den Noktaya" işlevini deneyebilirsiniz: http://www.ian-ko.com/ET_GeoWizards/UserGuide/convertPl2Pnt. htm

ET Geo Sihirbazlarını şu şekilde uygulayabilirsiniz:

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

...

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

ET işlevinin giriş değişkenleri için lütfen bkz: http://www.ian-ko.com/ET_GeoWizards/UserGuide/Scripting/scripting_PolylineToPoint.htm

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.