ज्यामिति () वस्तु की 'लंबाई' विशेषता तक पहुँचते समय माप की इकाई कैसे निर्दिष्ट करें?


10

कैलकुलेटफिल्ड_मनरेशन टूल का उपयोग करते हुए, कोई आकार की लंबाई की गणना करते समय माप की इकाई को निर्दिष्ट कर सकता है:

#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 ज्यामिति वस्तु का उपयोग करके ?:

#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 इकाइयों निर्दिष्ट करने के लिए 10.2.1 में तरीकों, इसलिए जब भी यह जहाज और जब भी यह आप के लिए हो जाता है कि आप इसे करने का एक सीधा रास्ता होना चाहिए, लेकिन अब के लिए यदि आप किसी अन्य तरीके का उपयोग करना चाहिए।


6

ज्यामिति वस्तुओं के साथ, गेटलिफ्ट () विधि हमेशा मीटर में दूरी तय करती है, जैसा कि यहां देखा गया है । उदाहरण के लिए, यदि आप केवल मील या पैरों में परिवर्तित हो रहे हैं, तो यह वांछनीय हो सकता है। मीटर से किसी अन्य रैखिक दूरी में परिवर्तित करना अपेक्षाकृत सरल होगा।

यदि आप दशमलव की डिग्री में अपनी लंबाई चाहते हैं, तो यह थोड़ा मुश्किल हो जाता है क्योंकि इनपुट एक भौगोलिक समन्वय प्रणाली (जीसीएस) में होना चाहिए। आप यहाँ चर्चा की गई अपने कर्सर के लिए एक SpatialReference ऑब्जेक्ट को देखना चाहते हैं

उदाहरण के लिए, मेरे पास 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)]
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.