Làm cách nào để chỉ định đơn vị đo khi truy cập thuộc tính 'độ dài' của đối tượng Geometry ()?


10

Sử dụng công cụ CompateField_man quản lý, người ta có thể chỉ định đơn vị đo khi tính chiều dài hình:

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

Tôi muốn làm điều tương tự trong một con trỏ bằng cách sử dụng 'SHAPE @ LENGTH' của mỗi tính năng, với độ dài được trả về trong một đơn vị tôi chọn:

#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)

Hoặc có thể bằng cách sử dụng đối tượng hình học @SHAPE (kém hiệu quả)?:

#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)

Có cách nào để làm việc này không?

Câu trả lời:


7

Bây giờ bạn sẽ cần sử dụng một cách giải quyết, độ dài sẽ luôn ở đơn vị tuyến tính của tham chiếu không gian của hình học. Biết hệ số chuyển đổi từ feet sang mét và thuộc metersPerUnittính sẽ giúp bạn có được hầu hết các cách, hoặc thêm một trường và sử dụng máy tính trường shape.length@feetnhư bạn đã đề cập trước đó. Một tùy chọn khác là chỉ định tham chiếu không gian của con trỏ là hệ tọa độ địa lý (như WGS84) và không phải là hệ tọa độ dự kiến. Sau đó Geometry.getLength(), geometry.getArea()phương thức và sẽ trả về số theo mét, mà bạn có thể lại chuyển đổi thành chân khá dễ dàng.

Chúng tôi chỉ thêm một đối số thứ hai tùy chọn vào Geometry.getLength/getArea phương thức tại 10.2.1 để chỉ định các đơn vị, vì vậy bất cứ khi nào nó xuất xưởng và bất cứ khi nào nó đến với bạn, bạn nên có cách làm trực tiếp, nhưng bây giờ bạn nên sử dụng một cách giải quyết khác.


6

Với các đối tượng hình học, phương thức getL wavel () luôn trả về khoảng cách tính bằng mét, như được thấy ở đây . Đó có thể là mong muốn nếu bạn chỉ đang chuyển đổi để dặm hoặc chân, ví dụ. Nó sẽ tương đối đơn giản để chuyển đổi từ mét sang bất kỳ khoảng cách tuyến tính khác.

Nếu bạn muốn độ dài của mình theo độ thập phân, điều đó trở nên phức tạp hơn một chút vì đầu vào phải nằm trong Hệ thống tọa độ địa lý (GCS). Bạn có thể muốn xem xét chuyển một đối tượng SpatialReference cho con trỏ của bạn, được thảo luận ở đây .

Chẳng hạn, tôi có một shapefile polyline trong NAD_1983_StatePlane_Louisiana_South_FIPS_1702_Feet, Hệ thống tọa độ dự kiến ​​(PCS).

Với mã này, tôi có thể truy cập độ dài của từng đối tượng theo độ thập phân:

spatref = arcpy.SpatialReference(4326) #EPSG code for WGS84
length = [row[0] for row in arcpy.da.SearchCursor("layer", "SHAPE@LENGTH", spatial_reference=spatref)]
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.