একক পয়েন্ট থেকে একাধিক বহুভুজ পর্যন্ত সমস্ত দূরত্ব গণনা করা [বন্ধ]


9

আমার দুটি স্তর রয়েছে: একটি পয়েন্ট স্তর সংজ্ঞায়িত বৈশিষ্ট্য (95 অবজেক্ট), এবং একটি বহুভুজ স্তর বৈশিষ্ট্যগুলির সাথে জড়িত জমির প্লট সংজ্ঞা দেয় (211 অবজেক্ট)। প্রতিটি পয়েন্ট এক বা একাধিক বহুভুজ সম্পর্কিত। আমি যেটি উত্পন্ন করতে চাই তা হ'ল সেই বিন্দুটির সাথে যুক্ত বহুভুজগুলির প্রতিটি বিন্দুর দূরত্বের একটি টেবিল (নিকটতম প্রান্ত বা বহুভুজের সেন্ট্রয়েড - হয় করবে)। নিকটতম দূরত্ব গণনা করা কিউজিআইএস এবং আর্কজিআইএসে তুলনামূলকভাবে সহজ, তবে সেই গণনাগুলি সমস্ত দূরবর্তী বহুভুজকে বাদ দেয়, কমপক্ষে আমি যে পদ্ধতিতে নিযুক্ত হয়েছি তার দ্বারা। আদর্শভাবে আমি একটি আউটপুট চাই

Point_ID | distance to polygon 1 | distance to polygon 2 | distance to polygon 3 | etc.

আরকজিআইএস 10 বা কিউজিআইএস 2.2+ এর কোনও পয়েন্টার সবচেয়ে সহায়ক হবে be


এটি আর্কজিআইএসে কাছাকাছি বিশ্লেষণের মাধ্যমে করা যেতে পারে তবে প্রতিটি পয়েন্টের জন্য এটি করার জন্য কিছুটা অটোমেশন প্রয়োজন হবে। আপনি অজগর স্ক্রিপ্টিং সঙ্গে পরিচিত?
এমিল ব্রুঞ্জেজ

এমিল - না, আমি পাইথনের সাথে পরিচিত নই, তবে আমার শেখা উচিত।
নিকন

উত্তর:


1

এটি অর্জনের জন্য আপনি কিউজিআইএস-এ দূরত্বের ম্যাট্রিক্স ব্যবহার করতে পারেন । আপনিই প্রথম আপনার বহুভুজ রূপান্তর করতে হবে centroid পয়েন্ট হয় এর ভেক্টর > জ্যামিতি সরঞ্জামসমূহ > বহুভুজ centroids বা বহুভুজ centroids এর কাহিনী সংস্করণ মাধ্যমে। এর কারণ হ'ল দূরত্বের ম্যাট্রিক্স ফাংশনটি কেবলমাত্র 2 পয়েন্ট স্তরগুলির মধ্যে বিশ্লেষণ করতে পারে। এছাড়াও, আউটপুট এই মত হবে:

Point_1 | PolygonCentroid_1 | Distance
Point_1 | PolygonCentroid_2 | Distance
Point_1 | PolygonCentroid_3 | Distance
Point_2 | PolygonCentroid_1 | Distance
Point_2 | PolygonCentroid_2 | Distance

আউটপুটটি একটি .csv ফাইল হবে যাতে আপনি মাইক্রোসফ্ট এক্সেলের মতো অন্য সফ্টওয়্যার ব্যবহার করে ম্যানুয়ালি বিন্যাসটি সম্পাদনা করতে পারেন।


ধন্যবাদ জোসেফ - আমার মতো জিআইএসে আগত একজনের জন্য, আমি যে উত্তর চেয়েছিলাম তা পাওয়ার সহজ উপায় এটি।
নিকএন

সবচেয়ে স্বাগত সাথী! এই পদ্ধতিটি (এবং ফলাফলগুলি) মৌলিক তবে আপনি যখন জিআইএস সফ্টওয়্যারটির সাথে আরও পরিচিত হন, আপনি অন্যান্য উত্তরগুলিতে বর্ণিত আরও উন্নত পদ্ধতি ব্যবহার করার চেষ্টা করতে পারেন।
জোসেফ

1
@ নিকন এই পদ্ধতির জন্য খুব ছোট একটি নোট, সেন্ট্রয়েডগুলি সর্বদা তার আকারের উপর নির্ভর করে বহুভুজের মধ্যে পড়ে না। আপনি কিছু ভুল দূরত্ব / র‌্যাঙ্কিং পেতে পারেন এটি সম্ভব , তবে এটি কোনও সমস্যা হবে কিনা তা আপনার ডেটা এবং প্রয়োজনীয়তার উপর নির্ভর করে। অন্যথায় এটি মূলত আর্কজিআইএসের জিএনটি-র কিউজিসআইএস সংস্করণ, পরবর্তীকটি বাদে পয়েন্টগুলির চেয়ে বেশি পরিচালনা করতে পারে এবং আমি নিশ্চিত নই যে কিউজিআইএস কীভাবে ফলাফলের নাম / আইডি পরিচালনা করে।
ক্রিস ডাব্লু

5

এটি কিউজিআইএস (আমার মনে হয় যে কোনও সংস্করণটি করবে) এবং ডিবি ম্যানেজারের একটি খুব সাধারণ এসকিউএল স্টেটমেন্ট ব্যবহার করে অর্জন করা মোটামুটি সহজ। তবে তার জন্য আপনার অবশ্যই কোনও না কোনও স্থানিক ডাটাবেস (পোস্টগিস বা স্থানিক স্থান) থাকতে হবে। যেহেতু এটি বেশিরভাগ মানুষের কাছে আরও অ্যাক্সেসযোগ্য, তাই আমি স্থানিক ব্যবহার অনুমান করব তবে এসকিউএল বিবৃতি পোস্টগ্রিসের জন্য একই রকম the

  1. একটি নতুন স্পাটালাইট ডাটাবেস তৈরি করুন;
  2. নতুন ডাটাবেসে আপনার পয়েন্ট এবং বহুভুজ স্তরগুলি আমদানি করুন;
  3. ডিবি ম্যানেজার প্লাগইনটি খুলুন, ডাটাবেসটি নির্বাচন করুন এবং নিম্নলিখিত এসকিউএল স্টেটমেন্টগুলির মধ্যে একটি চালান:

সমস্ত বহুভুজ সীমানা থেকে সমস্ত পয়েন্ট থেকে দূরত্ব

SELECT 
  f.point_id,
  g.polygon_id,
  st_distance(g.geom, f.geom) AS distance
FROM
  points_table AS f, 
  polygons_table AS g

সম্পর্কিত বহুভুজের সীমানায় সমস্ত পয়েন্টের দূরত্ব (ধরে নেওয়া যায় যে একটি সাধারণ ক্ষেত্র বিদ্যমান)

SELECT 
  f.point_id,
  g.polygon_id,
  st_distance(g.geom, f.geom) AS distance
FROM
  points_table AS f JOIN 
  polygons_table AS g ON (g.common_field = f.common_field)

সম্পর্কিত বহুভুজ সেন্ট্রয়েডের সমস্ত পয়েন্টের দূরত্ব :

SELECT 
  f.point_id,
  g.polygon_id,
  st_distance(f.geom, st_centroid(g.geom)) AS distance
FROM
  points_table AS f JOIN 
  polygons_table AS g ON (g.common_field = f.common_field)

লক্ষ্য করুন যে আপনি আপনার স্তরগুলি থেকে ফলটিতে কোনও ক্ষেত্র যুক্ত করতে পারেন:

SELECT 
  f.point_id,
  f.point_number,
  g.polygon_id,
  g.parcel_name,
  st_distance(f.geom, st_centroid(g.geom)) AS distance
FROM
  points_table AS f JOIN 
  polygons_table AS g ON (g.common_field = f.common_field)

বা এমনকি সমস্ত ক্ষেত্র:

SELECT 
  f.*,
  g.*,
  st_distance(f.geom, st_centroid(g.geom)) AS distance
FROM
  points_table AS f JOIN 
  polygons_table AS g ON (g.common_field = f.common_field)

আপনার যদি স্থানিক ডাটাবেস তৈরি করতে এবং স্তরটি আমদানি করতে হয় সে সম্পর্কে আরও ইনপুট দরকার হয় তবে আমাকে জানান এবং আমি উত্তরটি সম্পাদনা করব।
আলেকজান্দ্রি

হাই আলেকজান্দ্র, কেন যোগ দিন এবং সরল কোথায়?
লুইজি পাইরেলি

হ্যাঁ, এটি এমন কিছু যা আমি পল রামসির উপস্থাপনা থেকে পেয়েছি। তিনি যোগদানের সুস্পষ্ট ব্যবহারের পক্ষে কী কারণটি মনে করতে পারেন না, তবে তিনি যদি বলেন ...: -পরি কোনও পার্থক্য আছে কিনা তা দেখার জন্য উভয় প্রশ্নের উপর ব্যাখ্যা দেওয়ার চেষ্টা করবে will
আলেকজান্দ্রে নেটো

আমি স্পটালালাইটে নতুন - এই উত্তরটি এমন একটি সমস্যার সমাধান করছে যা আমি কাজ করছি working আমার টেবিলটি ফাঁকা। সম্ভবত আমি এটি বুঝতে পারছি না। আমার কাছে "পোথোল ভিআরআই" নামে একটি বহুভুজ স্তর রয়েছে এবং "গ্রিড পোথোল সেন্টার" নামে আরেকটি পয়েন্ট স্তর রয়েছে। আমি উপরের মত আপনার নির্দেশাবলী ব্যবহার করে নিম্নলিখিত কোড যুক্ত করছি: নির্বাচন করুন f.id, g.id, st_distance (f.geom, st_centroid (g.geom)) 'গ্রিড পোথোল সেন্টার' এএস থেকে দূরত্ব হিসাবে, 'পোথোল ভিআরআই' এএস জি __ আমি এই শিরোনাম সহ একটি খালি টেবিল এক্স পেয়েছি: আইডি, আইডি: 1, দূরত্ব আমি এখানে কী ভুল করেছি? কিউজিআইএস 3.6 ব্যবহার করে
মার্ক থম্পসন

4

জেনারেট করুন ছক নিয়ার ArcGIS এই সরঞ্জামটি আপনি যা চান তা কি করতে হবে, কিন্তু এটা একটি উন্নত লাইসেন্স প্রয়োজন এবং জন্য এটা করতে হবে সব পয়েন্ট / বহুভুজ - না শুধু একে অপরের সঙ্গে যুক্ত ছিল। এর অর্থ আপনার প্রতিটি 95 টি অবজেক্টের জন্য আপনি সমস্ত 211 টি বৈশিষ্ট্যের জন্য স্থান নির্ধারণের দূরত্ব পাবেন, সুতরাং সারণীতে 20,045 সারি। আপনাকে হয় ফলস্বরূপ সারণি ফিল্টার করতে হবে বা এমিলের পরামর্শ অনুসারে অ্যাসোসিয়েশনের উপর ভিত্তি করে নির্বাচনগুলি তৈরি করতে স্বয়ংক্রিয়ভাবে কাজ করতে হবে এবং কেবলমাত্র সেগুলি এই গ্রুপগুলিতে চালানো হবে।

ফিল্টারিং হিসাবে, হ্যাঁ, একটি সংযুক্তি (একটি সংজ্ঞা কোয়েরি বা নির্বাচন অনুসারে) আপনার যা দরকার তা হ'ল। সরঞ্জামের ফলাফল আপনাকে IN_FID এবং NEAR_FID দেয়। আপনি কীভাবে সরঞ্জামটি চালাচ্ছেন তার উপর নির্ভর করে (পয়েন্টের নিকটবর্তী বৈশিষ্ট্য, বা সম্পত্তির নিকটে পয়েন্ট) কোন এফআইডিটি নির্ধারণ করে। তারপরে আপনি যথাযথ এফআইডি এর উপর ভিত্তি করে আপনার ফলাফল এবং সম্পত্তি টেবিলগুলিতে (উভয়) যোগদান করতে পারবেন।

এটি ধরে নিয়েছে যে আপনার 211 টি সম্পত্তি রেকর্ডের একটি বৈশিষ্ট্য রয়েছে যা তাদের 95 টি পয়েন্টের মধ্যে কোনটির সাথে যুক্ত বলেছে, কারণ পরবর্তী পদক্ষেপটি যুক্ত টেবিলের সমস্ত রেকর্ড (বা সংজ্ঞা কোয়েরি) নির্বাচন করা যেখানে একটি রেকর্ডের দুটি ক্ষেত্র উচিত মিল - পয়েন্ট নাম ক্ষেত্র = সম্পত্তি সম্পর্কিত পয়েন্ট নাম ক্ষেত্র। যেসব ক্ষেত্রে তারা মেলে না সেগুলি হল বহুভুজ যা সেই বিন্দুর সাথে সম্পর্কিত নয়, সুতরাং আপনি সেই বিন্দু থেকে তাদের দূরত্বের বিষয়ে চিন্তা করবেন না।

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