ডেস্কটপের জন্য আর্কজিআইএস ব্যবহার করে পয়েন্ট ফিচারের চারপাশে স্কোয়ার বাফার তৈরি করা হচ্ছে?


31

আমি একটি বিন্দু বৈশিষ্ট্য থেকে একটি স্কোয়ার বাফার তৈরি করতে চাই তবে আমি এতে কোডটি বুঝতে পারি না।

ফোরামসেসরি ওয়েবসাইটে অনুরূপ প্রশ্ন জিজ্ঞাসা করা হয়েছিল তবে এটি 10 ​​বছর আগে ছিল এবং আমি কোডটি চেষ্টা করার পরে এটি কার্যকর হয়নি not

আমি কীভাবে একটি পয়েন্ট বৈশিষ্ট্য থেকে স্কোয়ার বাফার তৈরি করব?


gis.stackexchange.com/questions/12479/… মূলত একটি সদৃশ (কারণ এটি এই প্রশ্নের সাধারণীকরণকে সম্বোধন করে) তবে এখানে ইতিমধ্যে ভাল উত্তরগুলি রয়েছে যা বর্গক্ষেত্রের বাফারগুলির সাথে সুনির্দিষ্ট, তাই উভয় থ্রেড খোলা রাখা ভাল বলে মনে হয় এবং তাদের মার্জ করার চেয়ে আলাদা করুন। তবে আপনি যদি আরও সমাধান চান তবে অন্যান্য থ্রেডটিও পড়ুন!
whuber

2
ঠিক আছে ধন্যবাদ আমি গতকাল এই ওয়েবসাইটটি পেয়েছি এবং আমি এখনও এটির সাথে পরিচিত হয়েছি। আমি আমার ভবিষ্যতের পোস্ট / প্রশ্ন দিয়ে তা করার চেষ্টা করব। আমি এই সাইটটি আর্কজিআইএস ফোরামগুলির চেয়ে অনেক ভাল পছন্দ করছি।
কিমবল

আমি এই মন্তব্যটিকে কোনওভাবেই সমালোচনা হিসাবে বোঝাতে চাইনি, কিমবল: দুটি থ্রেড একত্রিত করা রোধ করার জন্য এটি ছিল, এটাই ছিল। আমাদের সম্প্রদায়ের স্বাগতম! (এবং দয়া করে আমাদের সম্পর্কে আপনার বন্ধুদের বলুন, বিশেষত
আরকজিআইএস

ঠিক। আমি জানি তুমি ওটা বোঝাতে চাইনি। আমি এই সম্প্রদায়টি অনেক উপভোগ করেছি এবং ইতিমধ্যে অন্যকে এই নতুন ফোরাম সম্পর্কে বলতে শুরু করেছি।
কিমবল

আপনার উল্লেখযোগ্য অংশের জন্য আপনাকে ধন্যবাদ। আমি ভাবছি যে ম্যানুয়ালি তাদের স্থানাঙ্কগুলি টাইপ না করে আপনি সরবরাহিত স্ক্রিপ্টটি ব্যবহার করে আয়তক্ষেত্রের বাফারগুলি তৈরি করতে আমি কীভাবে পয়েন্ট বৈশিষ্ট্যে ফিল্ড ডেটার সেট ব্যবহার করতে পারি। ধন্যবাদ

উত্তর:


47

আরকম্যাপ 10 দিয়ে এই পদক্ষেপগুলি ব্যবহার করে দেখুন:

  1. আপনার পয়েন্ট বৈশিষ্ট্যটি বাফার করুন (আর্টটুলবক্স> বিশ্লেষণ সরঞ্জামসমূহ> প্রক্সিমিটি> বাফার)। লিনিয়ার ইউনিট বাক্সে সঠিক দূরত্বটি নির্বাচন করতে ভুলবেন না।
  2. আপনার সদ্য নির্মিত বাফারগুলি বহুভুজ সরঞ্জামে ফিচার খামে ইনপুট করুন (ডেটা ম্যানেজমেন্ট সরঞ্জামসমূহ> বৈশিষ্ট্যসমূহ> বহুভুতে বৈশিষ্ট্যযুক্ত খাম)। আপনার একাধিক পয়েন্ট থাকলে "মাল্টপার্ট বৈশিষ্ট্যগুলি তৈরি করুন" বাক্সটি নির্বাচন করতে ভুলবেন না।

পাইথন সমাধানের জন্য:

স্কোয়ার বাফার তৈরি করতে সার্চকার্সার এবং ইনসার্টকার্সার ব্যবহার করা

এখানে চিত্র বর্ণনা লিখুন


2
+1 উত্তরগুলি যা সমাধানের কাজগুলি দেখায় সেগুলি সর্বোত্তম।
whuber

12

একটি সম্ভাব্য সমাধান হ'ল আপনার "সাধারণ" রাউন্ড বাফারগুলি স্ট্যান্ডার্ড ESRI বাফার সরঞ্জামটি ব্যবহার করুন যা আপনি চান তার ব্যাসার্ধের সাথে তৈরি করুন এবং তারপরে বাফারগুলির ফলাফল বৈশিষ্ট্য শ্রেণীর উপর বহুভুতে একটি বৈশিষ্ট্য খামটি প্রদর্শন করা। এটি প্রতিটি বৈশিষ্ট্যের সীমার চারপাশে একটি বর্গাকার খামের বৈশিষ্ট্য তৈরি করে। বহুভুতে বৈশিষ্ট্যযুক্ত খাম ডেটা ম্যানেজমেন্ট> বৈশিষ্ট্যগুলির মধ্যে অবস্থিত। মডেল নির্মাতা মডেলটির অনুরূপ দেখতে পাবেন:

এখানে চিত্র বর্ণনা লিখুন


দুর্দান্ত সমাধান! এছাড়াও, বাফারের ইনপুট আউটপুট ইন-মেমরি স্তর হিসাবে তৈরি করে (in_memory \ tmpBuffer) এবং আপনি ডিস্কে অপ্রয়োজনীয় ডেটা লেখা এড়াতে পারবেন এবং প্রক্রিয়াটি আরও দ্রুত তৈরি করতে পারবেন।
রায়ানডাল্টন

9

যেহেতু হারুনের কোডের শেষে লিঙ্কিত লিপিটি কেবল স্কোয়ার বাফারগুলির জন্য ব্যবহার করা যেতে পারে এবং নতুন আরকিপি.ডি মডিউলটি ব্যবহার করে না, তাই আমি একটি স্ক্রিপ্ট লিখেছি যা আয়তক্ষেত্রের বাফার তৈরি করতে ব্যবহার করা যেতে পারে। 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

ধরে নিই যে আপনি আর্কওবজেক্টস ব্যবহার করছেন (দয়া করে আপনি যে ভাষা এবং API ব্যবহার করছেন তা নির্দিষ্ট করার জন্য ট্যাগগুলি ব্যবহার করুন), আপনি IEnvelope.Expandউদাহরণের মতো একটি পয়েন্টের খাম থেকে স্কোয়ার বাফার তৈরি করতে ব্যবহার করতে পারেন: জিওফাইচারলায়ার স্নিপেটে পয়েন্ট অনুসন্ধান থেকে সমস্ত বৈশিষ্ট্য পান

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

1

হারুনের উত্তরের বিকল্প হিসাবে, উন্নত লাইসেন্সবিহীনদের জন্য, ন্যূনতম বাউন্ডিং জ্যামিতি সরঞ্জামটি ব্যবহার করুন । নীচের পদক্ষেপগুলি (অ্যারন থেকে পরিবর্তিত):

  1. আপনার পয়েন্ট বৈশিষ্ট্যটি বাফার করুন (আর্টটুলবক্স> বিশ্লেষণ সরঞ্জামসমূহ> প্রক্সিমিটি> বাফার)। লিনিয়ার ইউনিট বাক্সে সঠিক দূরত্বটি নির্বাচন করতে ভুলবেন না।
  2. আপনার সদ্য নির্মিত বাফারগুলি ন্যূনতম বাউন্ডিং জ্যামিতি সরঞ্জাম (ডেটা ম্যানেজমেন্ট সরঞ্জামসমূহ> বৈশিষ্ট্যসমূহ> ন্যূনতম বাউন্ডিং জ্যামিতি) এ ইনপুট করুন । 'RECTANGLE_BY_AREA' বা 'RECTANGLE_BY_WIDTH' ব্যবহার করুন, অন্যান্য বিকল্পগুলি কেবলমাত্র উন্নত লাইসেন্সের সাথে উপলব্ধ।

সম্পাদনা : এই বিকল্পটি আপনাকে 'বিকাশ' বিকল্পটি (যার জন্য উন্নত লাইসেন্সের প্রয়োজন হয়) ব্যবহার না করে ফলস্বরূপ স্কোয়ার বাফারগুলির ওরিয়েন্টেশন নিয়ন্ত্রণ করতে দেয় না। 'আউটপুটটির বৈশিষ্ট্য হিসাবে জ্যামিতি বৈশিষ্ট্যগুলি যুক্ত করুন ('চ্ছিক)' বিকল্পটি টিক দিয়ে - ফলস্বরূপ অফসেট আউটপুট বৈশিষ্ট্য শ্রেণিতে 'এমবিজি_রিয়েন্টেশন' হিসাবে রেকর্ড করা হবে। এরপরে বৈশিষ্ট্যগুলি কেন্দ্রস্থলে ফিরিয়ে আনাতে চাইলে এটি ব্যবহার করা যেতে পারে - আর্কপাই ব্যবহার করে অ্যাট্রিবিউট টেবিল থেকে মূল্য দিয়ে বহুভুজ ঘোরানো দেখুন? এটির সম্ভাব্য সমাধানের জন্য।

এখানে চিত্র বর্ণনা লিখুন


আমার নির্দিষ্ট বৈশিষ্ট্য শ্রেণীর জন্য এটি এই কর্মপ্রবাহটি ব্যবহার করে স্কোয়ারগুলি বিভিন্ন দিকে ঘোরানো শেষ করে। সম্ভবত আমার বাফার চেনাশোনাগুলিকে ওভারল্যাপ করে। নিশ্চিত না. আমার উপরে একই বৈশিষ্ট্য শ্রেণিতে এসরি আমার উপরে হারুনের পদ্ধতিটি ব্যবহার করেছিল এবং এটি বাফার্ড চেনাশোনাগুলি ঘোরেনি।
অ্যান্ড্রু

@ অ্যান্ড্রু, হ্যাঁ আপনি ঠিক বলেছেন, এটি অ্যাডভান্সড লাইসেন্স ছাড়া সরঞ্জামটির সীমাবদ্ধতা। ENVELOPE বিকল্পটি ব্যবহার করা উপরের হারুনের পদ্ধতি হিসাবে একই ফলাফলটি ফিরে আসবে, তবে এর জন্য একটি উন্নত লাইসেন্স প্রয়োজন। একটি সম্ভাব্য কাজের সমাধান হ'ল 'বৈশিষ্ট্য হিসাবে জ্যামিতির বৈশিষ্ট্যগুলি যুক্ত করুন' বিকল্পটি টিক চিহ্ন দেওয়া, তারা যে পরিমাণে ঝুঁকির দিকে ঝুঁকির পরিমাণ রয়েছে (তা সামঞ্জস্যপূর্ণ হওয়া উচিত) তা খুঁজে বের করুন, তারপরে কোনও সম্পাদনা সেশনে ফলাফলের স্কোয়ার বাফারগুলি সেই পরিমাণ দ্বারা ঘোরান। এটি এখনও চেষ্টা করে দেখেনি।
ড্যান ক্যান

0

এই সাইটটি বর্ণিত হয়েছে যে কীভাবে সিএসভি কে বর্গক্ষেত্র বা আয়তক্ষেত্র বা বৃত্ত বাফারগুলিতে ভৌগলিক লিঙ্ক জাভাস্ক্রিপ্ট এবং জেএস 2 শেফফিল ব্যবহার করে রূপান্তর করতে হবে।

এটি যদি আপনার সমস্যার সমাধান করে তবে আপনি একবার দেখতে পারেন।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.