डेस्कटॉप के लिए ArcGIS का उपयोग करके बिंदु सुविधा के चारों ओर स्क्वायर बफर बनाना?


31

मैं एक बिंदु सुविधा से एक वर्ग बफर बनाना चाहूंगा लेकिन मुझे उस कोड को समझ में नहीं आता जो इसमें जाता है।

फ़ोरम.श्री वेबसाइट पर भी इसी तरह के सवाल पूछे गए हैं, लेकिन यह 10 साल पहले खत्म हो गया था, और जब मैंने कोड की कोशिश की तो यह काम नहीं किया।

मैं एक बिंदु सुविधा से एक वर्ग बफर कैसे बनाऊं?


gis.stackexchange.com/questions/12479/… अनिवार्य रूप से एक डुप्लिकेट है (क्योंकि यह इस प्रश्न के सामान्यीकरण को संबोधित करता है), लेकिन जैसा कि यहां पहले से ही अच्छे उत्तर हैं जो वर्ग बफ़र्स के लिए विशिष्ट हैं, यह दोनों को खुला और छोड़ने के लिए सबसे अच्छा लगता है उन्हें विलय करने के बजाय अलग करें। लेकिन अगर आप अभी और समाधान चाहते हैं, तो दूसरे धागे को भी पढ़ें!
whuber

2
ठीक है धन्यवाद whuber। मुझे कल ही यह वेबसाइट मिली थी और मैं अब भी इससे परिचित हूं। मैं अपने भविष्य के पोस्ट / प्रश्नों के साथ ऐसा करने की कोशिश करूंगा। मैं इस साइट को आर्कगिस मंचों से बहुत बेहतर पसंद कर रहा हूं।
किमबॉल

मेरा यह मतलब नहीं था कि किसी भी तरह से आलोचना के रूप में टिप्पणी करें, किमबॉल: यह दो धागे के विलय को रोकने के लिए था, बस। हमारे समुदाय में आपका स्वागत है! (और कृपया अपने मित्रों को हमारे बारे में, विशेष रूप से ArcGIS मंचों पर उन बता :-)।
whuber

सही। मुझे पता है कि आप इस तरह से इसका मतलब नहीं था। मैं इस समुदाय का बहुत आनंद लेता हूं और इस नए मंच के बारे में दूसरों को बताना शुरू कर चुका हूं।
किमबॉल

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

जवाबों:


47

ArcMap 10 के साथ इन चरणों का प्रयास करें:

  1. अपनी बिंदु सुविधा को बफ़र करें (ArcToolbox> विश्लेषण उपकरण> निकटता> बफर)। रैखिक इकाई बॉक्स में सही दूरी का चयन करना सुनिश्चित करें।
  2. अपने नए बनाए गए बफ़र्स को फ़ीचर लिफाफे में बहुभुज टूल (डेटा मैनेजमेंट टूल> फीचर्स> फ़ीचर एनवेलप टू पॉलीगॉन) में इनपुट करें । यदि आपके पास कई बिंदु हैं, तो "मल्टीपार्ट फीचर बनाएं" बॉक्स का चयन करना सुनिश्चित करें।

पायथन समाधान के लिए:

स्क्वायर बफ़र्स बनाने के लिए SearchCursor और InsertCursor का उपयोग करना

यहाँ छवि विवरण दर्ज करें


2
+1 जवाब जो समाधान कार्यों को प्रदर्शित करता है वह सबसे अच्छा है।
whuber

12

एक संभावित समाधान यह होगा कि आप अपने "सामान्य" राउंड बफ़र्स को मानक ESRI बफर टूल का उपयोग करके बना सकते हैं, जिसमें आप जो भी त्रिज्या चाहते हैं और उसके बाद फ़ीचर लिफ़ाफ़ा टू पॉलीगॉन का प्रदर्शन करेंगे, जिसके परिणामस्वरूप बफ़र्स का फ़ीचर क्लास होगा। यह प्रत्येक सुविधा के चारों ओर एक चौकोर लिफाफा सुविधा बनाता है। फ़ीचर लिफ़ाफ़ा टू पॉलीगॉन डेटा मैनेजमेंट> फीचर्स के भीतर स्थित है। मॉडल बिल्डर मॉडल निम्न के समान दिखाई देगा:

यहाँ छवि विवरण दर्ज करें


उत्कृष्ट समाधान! इसके अलावा, एक in_memory लेयर (in_memory \ tmpBuffer) के रूप में बफर का आउटपुट बनाकर और आप डिस्क पर अनावश्यक डेटा लिखने से बच सकते हैं, और प्रक्रिया को बहुत तेज कर सकते हैं।
रयानडाल्टन

9

चूंकि हारून के कोड के अंत में लिंक की गई स्क्रिप्ट का उपयोग केवल स्क्वायर बफ़र्स के लिए किया जा सकता है और नए arcpy.da मॉड्यूल का उपयोग नहीं करता है, इसलिए मैंने एक स्क्रिप्ट लिखी है जिसका उपयोग आयत बफ़र्स बनाने के लिए किया जा सकता है। 10k यादृच्छिक बिंदु डेटासेट पर, यह 10 सेकंड में पूरा हुआ:

यहाँ छवि विवरण दर्ज करें

import os, arcpy

point_FC = arcpy.GetParameterAsText(0)
w = float(arcpy.GetParameterAsText(1))
h = float(arcpy.GetParameterAsText(2))
output_FC = arcpy.GetParameterAsText(3)

def rect(coord, w, h):
        #Given XY coordinates and rectangle dimensions,
        #return a polygon object of a rectangle centered about the point
        x,y = coord
        w *= 0.5
        h *= 0.5
        xmin,xmax = x-w, x+w
        ymin,ymax = y-h, y+h
        poly = ((xmin, ymax), (xmax, ymax), (xmax, ymin), (xmin, ymin))
        return arcpy.Polygon(arcpy.Array(arcpy.Point(*p) for p in poly))

#Create output feature class.
spatref = arcpy.Describe(point_FC).spatialReference
folder, base = os.path.split(output_FC)
arcpy.CreateFeatureclass_management(folder, base, "POLYGON", spatial_reference=spatref)

#Get field object for every field in input except OID and Shape.
fields = [f for f in arcpy.ListFields(point_FC) if f.type not in ("OID", "Geometry")]

for field in fields:
         arcpy.AddField_management(output_FC, field.name, field.type, field.precision,
                                   field.scale, field.length, field.aliasName,
                                   field.isNullable, field.required, field.domain)

#Get field names to be inputted to cursors.
#Need SHAPE@XY token to read point coords and SHAPE@ token to write polygon coords.
fnames = [f.name for f in fields]
fields_in = fnames[::]
fields_out = fnames[::]
fields_in.append("SHAPE@XY")
fields_out.append("SHAPE@")

#Create buffers and write attributes to output FC, if any.
count = int(arcpy.GetCount_management(point_FC)[0])
arcpy.SetProgressor("step", "Buffering...", 0, count, 1)
with arcpy.da.SearchCursor(point_FC, fields_in) as Scursor,  arcpy.da.InsertCursor(output_FC, fields_out) as Icursor:
        for i,row_in in enumerate(Scursor):                
                #"Convert" point to rectangle
                arcpy.SetProgressorPosition(i)
                feature = list(row_in)
                feature[-1] = rect(feature[-1], w, h)                
                Icursor.insertRow(feature)

5

मान लें कि आप ArcObjects का उपयोग कर रहे हैं (कृपया भाषा और API का उपयोग करने के लिए टैग का उपयोग करें), आप IEnvelope.Expandएक बिंदु के लिफाफे से एक वर्ग बफर बनाने के लिए उपयोग कर सकते हैं , इस उदाहरण में: GeoFeaturepayer Snippet में बिंदु खोज से सभी सुविधाएँ प्राप्त करें

ESRI.ArcGIS.Geometry.IEnvelope envelope = point.Envelope;
envelope.Expand(searchTolerance, searchTolerance, false);

1

एक उन्नत लाइसेंस के बिना उन लोगों के लिए हारून के जवाब के विकल्प के रूप में, न्यूनतम बाउंडिंग ज्यामिति उपकरण का उपयोग करें । नीचे दिए गए चरण (हारून से संशोधित):

  1. अपनी बिंदु सुविधा को बफ़र करें (ArcToolbox> विश्लेषण उपकरण> निकटता> बफर)। रैखिक इकाई बॉक्स में सही दूरी का चयन करना सुनिश्चित करें।
  2. अपने नए बनाए गए बफ़र्स को न्यूनतम बाउंडिंग ज्यामिति टूल (डेटा प्रबंधन उपकरण> सुविधाएँ> न्यूनतम बाउंडिंग ज्यामिति) में इनपुट करें । 'RECTANGLE_BY_AREA' या 'RECTANGLE_BY_WIDTH' का उपयोग करें, अन्य विकल्प केवल एक उन्नत लाइसेंस के साथ उपलब्ध हैं।

EDIT : यह विकल्प आपको 'ENVELOPE' विकल्प (जिसके लिए एक उन्नत लाइसेंस की आवश्यकता है) का उपयोग किए बिना, परिणामी वर्ग बफ़र्स के उन्मुखीकरण को नियंत्रित करने की अनुमति नहीं देता है। आउटपुट (वैकल्पिक) विकल्प के रूप में 'ज्यामिति विशेषताओं को जोड़ें' विकल्प पर टिक करके - परिणामी ऑफसेट को आउटपुट सुविधा वर्ग में 'MBG_Orientation' के रूप में दर्ज किया जाएगा। इसके बाद सुविधाओं को वापस केंद्र में घुमाने के लिए इस्तेमाल किया जा सकता है यदि वांछित हो - आर्कपी का उपयोग करके विशेषता तालिका से मूल्य द्वारा बहुभुज घूर्णन देखें ? उस के लिए एक संभावित समाधान के लिए।

यहाँ छवि विवरण दर्ज करें


मेरी विशेष सुविधा वर्ग के लिए यह वर्कफ़्लो का उपयोग करके विभिन्न दिशाओं में वर्गों को घुमाते हुए समाप्त होता है। शायद इसलिए कि मेरे पास बफर सर्किल ओवरलैपिंग है। निश्चित नहीं। मैंने अपने समान फीचर वर्ग में एरी का विधि के ऊपर एरी का उपयोग किया था और इसने बफ़र्ड सर्कल को घुमाया नहीं था।
एंड्रयू

@ और, हाँ, आप सही हैं, यह एक उन्नत लाइसेंस के बिना उपकरण की एक सीमा है। ENVELOPE विकल्प का उपयोग करने से हारून की विधि के समान परिणाम प्राप्त होगा, लेकिन इसके लिए उन्नत लाइसेंस की भी आवश्यकता होती है। संभावित वैकल्पिक हल 'ज्यामिति विशेषताओं को गुण के रूप में जोड़ें' विकल्प पर टिक करने के लिए होगा, यह पता लगाएं कि वे कितनी मात्रा में झुके हुए हैं (सुसंगत होना चाहिए), फिर एक संपादन सत्र में उस राशि से परिणामी वर्ग बफ़र्स को घुमाएं। अभी तक यह कोशिश नहीं की है।
डन कान

0

यह साइट बताती है कि भौगोलिक भौगोलिक जावास्क्रिप्ट और js2shapefile का उपयोग करके सीएसवी को स्क्वायर या आयत या सर्कल बफ़र्स में कैसे परिवर्तित किया जाए।

यदि आपकी समस्या हल हो जाती है तो आप इसे देख सकते हैं।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.