วิธีการระบุหน่วยการวัดเมื่อเข้าถึงแอตทริบิวต์ 'ความยาว' ของวัตถุเรขาคณิต?


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 object (ประสิทธิภาพน้อยกว่า):

#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()และgeometry.getArea()วิธีการจะส่งกลับตัวเลขในหน่วยเมตรซึ่งคุณสามารถแปลงเป็นฟุตได้อย่างง่ายดายอีกครั้ง

เราเพิ่งเพิ่มอาร์กิวเมนต์ตัวเลือกที่สองให้กับGeometry.getLength/getArea methods ที่ 10.2.1 เพื่อระบุหน่วยดังนั้นเมื่อใดก็ตามที่มีการจัดส่งและเมื่อใดก็ตามที่คุณได้รับคุณควรมีวิธีการทำโดยตรง แต่ตอนนี้คุณควรใช้วิธีแก้ไขอื่น


6

กับวัตถุรูปทรงเรขาคณิตที่ GetLength () วิธีการเสมอกลับระยะทางในเมตรเท่าที่เห็นนี่ ซึ่งอาจเป็นที่ต้องการหากคุณแปลงเป็นไมล์หรือฟุตเท่านั้น มันจะค่อนข้างตรงไปตรงมาในการแปลงจากเมตรเป็นระยะเชิงเส้นอื่น ๆ

หากคุณต้องการความยาวเป็นองศาทศนิยมนั่นจะกลายเป็นเรื่องหลอกลวงเล็กน้อยเนื่องจากอินพุตต้องอยู่ในระบบพิกัดภูมิศาสตร์ (GCS) คุณอาจต้องการที่จะมองเข้าไปผ่านวัตถุ SpatialReferenceเคอร์เซอร์ของคุณกล่าวถึงที่นี่

ตัวอย่างเช่นฉันมีรูปร่าง polyline ใน NAD_1983_StatePlane_Louisiana_South_FIPS_1702_Feet ซึ่งเป็นระบบพิกัดที่คาดการณ์ (PCS)

ด้วยรหัสนี้ฉันสามารถเข้าถึงความยาวของแต่ละวัตถุในหน่วยทศนิยม:

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.