एकल बिंदुओं से कई बहुभुजों तक सभी दूरी की गणना [बंद]


9

मेरे पास दो परतें हैं: एक पॉइंट लेयर डिफाइनिंग प्रॉपर्टीज (95 ऑब्जेक्ट्स), और एक पॉलीगॉन लेयर डिफाइनिंग प्लॉट्स ऑफ़ प्रॉपर्टीज़ (211 ऑब्जेक्ट्स)। प्रत्येक बिंदु एक या अधिक बहुभुज से संबंधित है। मैं जो उत्पादन करना चाहूंगा, वह उस बिंदु से जुड़े सभी बहुभुजों के लिए प्रत्येक बिंदु की दूरी की एक तालिका है (बहुभुज का निकटतम किनारा या सेंट्रोइड - या तो करेगा)। निकटतम दूरी की गणना QGIS और ArcGIS में अपेक्षाकृत आसान है, लेकिन वे गणना सभी दूर के बहुभुज को छोड़ देती हैं, कम से कम उन तरीकों से जिन्हें मैं नियोजित कर रहा हूं। आदर्श रूप से मैं इसका एक आउटपुट चाहूंगा

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

ArcGIS 10 या QGIS 2.2+ में कोई भी संकेत सबसे अधिक सहायक होगा।


यह आर्कजीआईएस में निकट विश्लेषण के साथ किया जा सकता है, लेकिन प्रत्येक बिंदु के लिए ऐसा करने के लिए थोड़ा स्वचालन की आवश्यकता होगी। क्या आप अजगर स्क्रिप्टिंग से परिचित हैं?
एमिल ब्रुंडेज

एमिल - नहीं, मैं पायथन से परिचित नहीं हूं, लेकिन शायद मुझे सीखना चाहिए।
निकएन

जवाबों:


1

इसे प्राप्त करने के लिए आप QGIS में डिस्टेंस मैट्रिक्स का उपयोग कर सकते हैं । आपको पहले अपने बहुभुज को सेंटीमीटर बिंदुओं में या तो वेक्टर > ज्यामिति उपकरण > बहुभुज केन्द्रक या बहुभुज केन्द्रक के SAGA संस्करण के माध्यम से परिवर्तित करने की आवश्यकता होगी । इसका कारण दूरी मैट्रिक्स फ़ंक्शन केवल 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 फ़ाइल होगी ताकि आप Microsoft Excel जैसे किसी अन्य सॉफ़्टवेयर का उपयोग करके मैन्युअल रूप से लेआउट को संपादित कर सकें।


धन्यवाद जोसेफ - मेरे जैसे जीआईएस के लिए एक नवागंतुक के लिए, यह उन उत्तरों को प्राप्त करने का सबसे सरल तरीका है जो मुझे चाहिए था।
NickN

सबसे स्वागत है दोस्त! यह प्रक्रिया (और परिणाम) बुनियादी हैं लेकिन जब आप जीआईएस सॉफ्टवेयर से अधिक परिचित हो जाते हैं, तो आप अधिक उन्नत प्रक्रियाओं का उपयोग करने का प्रयास कर सकते हैं जो अन्य उत्तरों में वर्णित हैं।
जोसफ

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

5

यह QGIS (मुझे लगता है कि कोई भी संस्करण करेगा) और DB प्रबंधक में एक बहुत ही सरल SQL कथन का उपयोग करके प्राप्त करना काफी सरल है। लेकिन इसके लिए आपका वह स्थान किसी प्रकार के स्थानिक डेटाबेस (Postgis या स्थानिक) में होना चाहिए। चूंकि यह अधिकांश लोगों के लिए अधिक सुलभ है, इसलिए मैं स्थानिक का उपयोग कर ग्रहण करूंगा, लेकिन SQL कथन पोस्टगिस के लिए समान हैं।

  1. एक नया स्थानिक डेटाबेस बनाएँ;
  2. अपने बिंदु और बहुभुज परतों को नए डेटाबेस में आयात करें;
  3. DB प्रबंधक प्लगइन खोलें, डेटाबेस का चयन करें और निम्न SQL कथनों में से एक को चलाएं:

सभी बिंदुओं से सभी बहुभुज सीमाओं से दूरी

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)

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

हाय अलेक्जेंड्रे, क्यों जुड़ें और एक साधारण नहीं कहाँ?
लुइगी पिरेली

खैर, यह कुछ ऐसा है जिसे मैंने पॉल रैमसे की प्रस्तुतियों में से एक से पकड़ा है। इस कारण को याद नहीं कर सकते कि वह क्यों जॉइन के स्पष्ट उपयोग की वकालत करता है, लेकिन अगर वह यह कहता है ...: -पीआई दोनों अंतरों को देखने की कोशिश करेगा ताकि कोई अंतर न हो।
अलेक्जेंड्रे नेटो

मैं SpatialLite के लिए नया हूं - यह जवाब एक समस्या को संबोधित करता है जिस पर मैं काम कर रहा हूं। मेरी मेज खाली है। शायद मैं यह नहीं समझ रहा हूँ। मेरे पास एक बहुभुज परत है जिसे "गड्ढे वीआरआई" कहा जाता है और एक अन्य बिंदु परत जिसे "ग्रिड गड्ढा केंद्र" कहा जाता है। मैं आपके निर्देशों का उपयोग करते हुए निम्नलिखित कोड जोड़ता हूं: SELECT f.id, g.id, st_distance (f.geom, st_centroid (g.geom)) AS 'F से' ग्रिड गड्ढे केंद्र 'AS f,' गड्ढे VRI 'AS g __ मुझे इन शीर्षकों के साथ एक खाली तालिका x प्राप्त होती है: आईडी, आईडी: 1, दूरी मैंने यहां क्या गलत किया है? QGIS 3.6 का उपयोग करना
मार्क थॉम्पसन

4

उत्पन्न टेबल के पास ArcGIS में उपकरण तुम क्या चाहते हो जाएगा, लेकिन यह एक उन्नत लाइसेंस की आवश्यकता है और के लिए यह करना होगा सभी अंक / बहुभुज - न केवल एक दूसरे के साथ जुड़े लोगों के। इसका मतलब है कि आपकी प्रत्येक 95 वस्तुओं के लिए आपको सभी 211 संपत्तियों के लिए रैंक की दूरी मिलेगी, इसलिए तालिका में 20,045 पंक्तियां। आपको या तो परिणामी तालिका को फ़िल्टर करना होगा या जैसा कि एमिल ने सुझाव दिया है कि एसोसिएशन के आधार पर चयन बनाने के लिए कार्य को स्वचालित करें और केवल उन समूहों पर चलाएं।

जहाँ तक फ़िल्टरिंग की बात है, हाँ, एक जॉइन (एक परिभाषा क्वेरी या चयन के बाद) आप सभी की आवश्यकता होगी। उपकरण परिणाम आपको IN_FID और NEAR_FID देता है। इस बात पर निर्भर करता है कि आप उपकरण कैसे चलाते हैं (गुण बिंदु के पास, या संपत्ति के पास बिंदु) यह निर्धारित करते हैं कि एफआईडी कौन सा है। फिर आप उचित FID के आधार पर उपकरण परिणाम के लिए अपनी बात और संपत्ति तालिका (दोनों) में शामिल होंगे।

यह मानता है कि आपके 211 संपत्ति रिकॉर्ड्स में से प्रत्येक में एक विशेषता है जो कहती है कि वे 95 अंकों में से कौन से हैं, क्योंकि अगला चरण चयनित तालिका में सभी रिकॉर्ड (या परिभाषा क्वेरी) का चयन करना है, जहां एक रिकॉर्ड के दो फ़ील्ड चाहिए मिलान - बिंदु नाम क्षेत्र = संपत्ति से संबंधित बिंदु नाम क्षेत्र। जिन मामलों में वे मेल नहीं खाते हैं वे बहुभुज हैं जो उस बिंदु से जुड़े नहीं हैं, इसलिए आप उस बिंदु से उनकी दूरी के बारे में परवाह नहीं करते हैं।

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