Geometry () nesnesinin 'length' özelliğine erişirken ölçü birimini nasıl belirleyebilirim?


10

CalculateField_management aracını kullanarak, şekil uzunluğunu hesaplarken ölçü birimini belirtebilirsiniz:

#Calculate polyline lengths in miles
polylines = "C:\sampleShape.shp"
arcpy.CalculateField_management(polylines, "shapeLen", "!Shape.length@MILES!", "PYTHON_9.3")

Aynı şeyi her imlecin 'SHAPE @ LENGTH' kısmını kullanarak yapmak istiyorum, uzunluk seçtiğim bir birimde geri döndü:

#hypothetical example 1
with arcpy.da.UpdateCursor(polylines, field_names=["SHAPE@LENGTH.FEET", "shapeLen"]) as upCurs:
    for row in upCurs:
        row[1] = row[0]
        upCurs.updateRow(row)

Ya da muhtemelen (daha az verimli) @ SHAPE geometri nesnesini kullanarak ?:

#hypothetical example 2
with arcpy.da.UpdateCursor(polylines, field_names=["@SHAPE", "shapeLen"]) as upCurs:
    for row in upCurs:
        row[1] = row[0].length@FEET
        upCurs.updateRow(row)

Bunu yapmanın bir yolu var mı?

Yanıtlar:


7

Şimdilik bir geçici çözüm kullanmanız gerekecek, uzunluk her zaman geometrinin uzamsal referansının doğrusal biriminde olacaktır. Metreden metreye ve metersPerUnitmülk için dönüşüm faktörünü bilmek size en çok yol almalı veya bir alan ekleyerek ve daha shape.length@feetönce bahsettiğiniz gibi alan hesaplayıcılarını kullanmalıdır . Başka bir seçenek, imlecin uzamsal referansını, öngörülen bir koordinat sistemi olarak değil, bir coğrafi koordinat sistemi (WGS84 gibi) olarak belirtmektir. Sonra Geometry.getLength()ve geometry.getArea()yöntemleri metre cinsinden sayıları döndürür, bu da yine ayaklara kolayca dönüştürebilirsiniz.

Birimleri belirtmek için 10.2.1'deki Geometry.getLength/getArea yöntemlere isteğe bağlı ikinci bir argüman ekledik , bu yüzden ne zaman gönderilir ve size ulaştığında bunu yapmanın doğrudan bir yolu olmalı, ancak şimdilik başka bir geçici çözüm kullanmalısınız.


6

Geometri nesneleriyle, getLength () yöntemi burada görüldüğü gibi her zaman metre cinsinden bir mesafe döndürür . Örneğin, yalnızca mil veya feet'e dönüştürüyorsanız bu istenebilir. Metre'den diğer doğrusal mesafelerden herhangi birine dönüştürmek nispeten basit olacaktır.

Uzunluğunuzu ondalık derece olarak istiyorsanız, giriş bir Coğrafi Koordinat Sisteminde (GCS) olması gerektiği için biraz daha karmaşık hale gelir. Burada tartışılan bir SpatialReference nesnesini imlecinize aktarmak isteyebilirsiniz .

Örneğin, NAD_1983_StatePlane_Louisiana_South_FIPS_1702_Feet, bir Öngörülen Koordinat Sistemi (PCS) içinde bir çoklu çizgi şekil dosyası var.

Bu kodla, her nesnenin uzunluğuna ondalık derece erişebilirim:

spatref = arcpy.SpatialReference(4326) #EPSG code for WGS84
length = [row[0] for row in arcpy.da.SearchCursor("layer", "SHAPE@LENGTH", spatial_reference=spatref)]
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.