Geometry () 객체의 '길이'속성에 액세스 할 때 측정 단위를 지정하는 방법은 무엇입니까?


10

CalculateField_management 도구를 사용하여 모양 길이를 계산할 때 측정 단위를 지정할 수 있습니다.

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

각 기능의 'SHAPE @ LENGTH'를 사용하여 커서 내에서 동일한 작업을 수행하고 싶습니다. 길이는 선택한 단위로 반환됩니다.

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

또는 (효율적이지 않은) @SHAPE geometry 객체를 사용하여 가능합니까?

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

이것을 할 수있는 방법이 있습니까?

답변:


7

이제 해결 방법을 사용해야합니다. 길이는 항상 지오메트리의 공간 참조의 선형 단위입니다. 피트에서 미터로의 변환 계수와 metersPerUnit속성 을 알면 대부분의 방법을 찾거나 필드를 추가하고 shape.length@feet앞에서 언급 한 것처럼 필드 계산기를 사용해야합니다. 또 다른 옵션은 커서의 공간 참조를 투영 좌표계가 아닌 지리적 좌표계 (예 : WGS84)로 지정하는 것입니다. 그런 다음 Geometry.getLength()and geometry.getArea()메소드는 미터 단위의 숫자를 반환하여 다시 피트로 쉽게 변환 할 수 있습니다.

10.2.1에서 Geometry.getLength/getArea 메소드에 선택적 두 번째 인수를 추가 하여 단위를 지정하므로 배송 할 때마다 도착할 때마다 직접 수행하는 방법이 있어야하지만 지금은 다른 해결 방법을 사용해야합니다.


6

지오메트리 객체의 경우 getLength () 메소드는 여기에 표시된대로 항상 거리를 미터 단위로 반환합니다 . 예를 들어 마일이나 피트로만 변환하는 경우 바람직 할 수 있습니다. 미터에서 다른 선형 거리로 변환하는 것은 비교적 간단합니다.

10 진수로 길이를 원하는 경우 입력이 GCS (Geographic Coordinate System)에 있어야하므로 조금 까다로워집니다. 여기 에서 설명 하는 SpatialReference 오브젝트 를 커서 에 전달하려고 할 수 있습니다 .

예를 들어, PCS (Projected Coordinate System) 인 NAD_1983_StatePlane_Louisiana_South_FIPS_1702_Feet에 폴리 라인 쉐이프 파일이 있습니다.

이 코드를 사용하면 각 객체의 길이를 십진수로 액세스 할 수 있습니다.

spatref = arcpy.SpatialReference(4326) #EPSG code for WGS84
length = [row[0] for row in arcpy.da.SearchCursor("layer", "SHAPE@LENGTH", spatial_reference=spatref)]
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.