आर्कगिस में एक रेखापुंज का केंद्र बिंदु ढूँढना?


10

अगर मेरे पास, एक आयताकार 10 और दस्तावेज़ (.tiff w / संबद्ध tfw) में लोड की गई आयताकार और भू-संदर्भित रेखापुंज फ़ाइल है, तो मैं आसानी से इसका केंद्र बिंदु कैसे ढूंढ सकता हूं और उस बिंदु को एक बिंदु वेक्टर परत में संग्रहीत कर सकता हूं?

इसके अलावा, अगर मेरे आर्कपॉइंट दस्तावेज़ में ऐसे कई रैपर हैं, तो मैं उन सभी पर प्रक्रिया कैसे लागू करूं?

दुर्भाग्य से, मेरे पास शून्य पायथन अनुभव है। इसलिए एक प्रोग्रामेटिक समाधान ठीक है, लेकिन मुझे एक मौजूदा स्क्रिप्ट को आर्कजीआईएस 10 में लोड करने के लिए विशिष्ट निर्देशों की आवश्यकता होगी, और प्रश्नों में इसे आपदाओं पर चलाएंगे। (बीटीडब्लू, रस्टर्स सभी अपनी अलग परतों में हैं)।


1
क्या प्रोग्रामेटिक समाधान स्वीकार्य हैं?
कर्क कुक्केंडल

मैं एक प्रोग्रामेटिक समाधान स्वीकार करना चाहता हूं, लेकिन शून्य पायथन अनुभव है। मुझे स्क्रिप्ट को आर्कजीआईएस में लोड करने के लिए निर्देश की आवश्यकता होगी, और इसे प्रश्न में आपदाओं पर चलाएंगे।
hpy

जवाबों:


7

हालांकि मूल प्रश्न 10.0 के लिए था, मैंने नीचे दिए गए कोड को 10.3.1 के लिए अपडेट किया है।

RasterCenter फ़ंक्शन बनाने के लिए इसे arcmap में अजगर विंडो में कॉपी करें:

import arcpy, os
def RasterCenter(raster):
    #raster: string reference to raster
    raster = arcpy.Raster(raster)
    fcname = "{}_center".format(os.path.basename(str(raster)))
    x = raster.extent.XMin + (raster.extent.XMax - raster.extent.XMin)/2
    y = raster.extent.YMin + (raster.extent.YMax - raster.extent.YMin)/2
    featureclass = arcpy.CreateFeatureclass_management("in_memory", fcname, "POINT",spatial_reference = raster.spatialReference)
    with arcpy.da.InsertCursor(featureclass, ['SHAPE@XY']) as cursor:
        cursor.insertRow(((x, y),))
    mxd = arcpy.mapping.MapDocument("CURRENT")
    df = arcpy.mapping.ListDataFrames(mxd)[0]
    arcpy.MakeFeatureLayer_management(featureclass, fcname)
    layer = arcpy.mapping.Layer(fcname)
    arcpy.mapping.AddLayer(df, layer)

फिर, आप कॉल करके अपनी सुविधा वर्ग बनाने के लिए अजगर विंडो का उपयोग कर सकते हैं

RasterCenter("<reference to raster">)

इसलिए, उदाहरण के लिए, यदि आपके पास डीईएम नामक एक रेखापुंज है, तो आप पायथन विंडो में रैस्टरकेंटर ("डीम") कहते हैं, और यह रैस्टर के केंद्र में एकल बिंदु के साथ "डेमसेटर" नामक एक परत को जोड़ देगा। परत को मेमोरी में संग्रहीत किया जाता है, इसलिए यदि आप इसे रखना चाहते हैं, तो इसे निर्यात करें।

एक कदम आगे जाने के लिए, आप स्क्रिप्ट को एक .py फ़ाइल में सहेज सकते हैं और अजगर के लिए .py फ़ाइल को खोज पथ में रख सकते हैं। उदाहरण के लिए इसे RasterCenter.py के रूप में सहेजें और PYTHONPATH में रखें (सामान्य रूप से इसके लिए स्थान C: \ Python26 \ ArcGIS10.0 \ Lib) है

तो आप कर सकते हैं:

import RasterCenter
RasterCenter.RasterCenter("<reference to raster">)

6

बहुत आसान, सरल, आपदाओं के गुण प्राप्त करते हैं और न्यूनतम, अधिकतम x और y से केंद्र बिंदु का काम करते हैं

MinX = arcpy.GetRasterProperties_management("raster", "LEFT")
MinY = arcpy.GetRasterProperties_management("raster", "BOTTOM")
MaxX = arcpy.GetRasterProperties_management("raster", "RIGHT")
MaxY = arcpy.GetRasterProperties_management("raster", "TOP")

centreX = (MaxX + MinX) / 2
centreY = (MaxY + MinY) / 2

और सामान्य त्रुटि जाँच आदि ...।

फिर अपने पॉइंट टेबल को एक अपडेटसर्वर के साथ जोड़ें


2
अच्छा तरीका। मुझे लगता है कि आप केंद्र के निर्देशों के लिए अपने सूत्रों में सुधार करना चाहते हैं: वे समापन बिंदु के साधन हैं, न कि उनके मतभेद।
whuber

ऐसा लगता है कि मैं क्या देख रहा हूं, लेकिन चूंकि मुझे आर्कजीआईएस में कोई स्क्रिप्टिंग का अनुभव नहीं है, क्या आप मुझे बता सकते हैं कि इस तरह की स्क्रिप्ट को कैसे लोड करें और चलाएं? (मैंने इसे प्रतिबिंबित करने के लिए मूल प्रश्न अपडेट किया है ...) धन्यवाद!
15

1
आप रेखापुंज सीमा गुणों का उपयोग करके मूल्यों का उपयोग भी कर सकते हैं, जैसे raster = arcpy.Raster ("raster"), फिर centreX = raster.extent.XMax - raster.extent.XMin
blord-castillo

1
@Whuber मैं अब त्रुटि देख सकता हूं, मैं कुछ और सोच रहा था जो मैं कर रहा था! धन्यवाद Whuber
बालों वाली
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.