QGIS का उपयोग करके पॉइंट-टच-ए-लाइन लाइनों की परत पर वापस आना विशेषता है?


12

मैं QGIS 2.14.4-Essen का उपयोग कर रहा हूं। मेरी दो परतें हैं:

  • points.shp जिसमें एक YEAR कॉलम के साथ अंक होते हैं
  • lines.shp में वे पंक्तियाँ होती हैं जो बिल्कुल points.shp से बिंदुओं को जोड़ती हैं

मैं बिंदुओं से YEAR विशेषता प्राप्त करना चाहूंगा। प्रत्येक पंक्ति प्रत्येक छोर पर एक बिंदु के साथ एक एकल खंड है (नीचे चित्र देखें)। जो मैं प्राप्त करना चाहूंगा वह पहले बिंदु से YEAR है और YEAR दूसरे बिंदु से वापस प्रत्येक पंक्ति विशेषताओं में है।

उदाहरण के लिए: लाइन 1 YEAR = 2010 के साथ पहले बिंदु को छू रही है और YEAR = 2011 के साथ एक दूसरा बिंदु है। मैं '2010-2011' जैसी कुछ चीज़ों को पंक्ति 1 विशेषताओं में वापस लाना चाहूंगा। परिणाम इस तरह दिखना चाहिए:

id  | points
----+-----------------
1   | 2010-2011
2   | 2011-2012
3   | 2012-2016

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

क्या QGIS का उपयोग करके इसे प्राप्त करने का कोई तरीका है?

जवाबों:


9

हालाँकि @radouxju उत्तर मान्य है, मैं इसे थोड़ा और विस्तृत रूप से समझाऊँगा।

  1. आपको यह सुनिश्चित करने की आवश्यकता है कि पॉलीलाइन सुविधा बिंदु स्थानों के ठीक ऊपर विभाजित है।
  2. का उपयोग करें Join attribute by location। बिंदु स्थानों पर विभाजन रेखा विशेषता को लक्ष्य परत के रूप में चुनें - मेरे मामले में मैं इसे "विस्फोट" नाम देता हूं।
  3. सारांश अनुभाग में, "इंटरसेक्टिंग सुविधा का सारांश लें" चुनें। यहां, टूल को दो बार चलाने के बजाय; मिन के लिए एक और मैक्स के लिए एक और समय, आप इसे एक बार चला सकते हैं और मिन और मैक्स दोनों को चुन सकते हैं।

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

  1. आउट फ़ाइल में निम्न विशेषता होगी:

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

  1. स्टेप 4 से नए शेपफाइल में नाम "वर्ष" के साथ टाइप स्ट्रिंग के नए फील्ड को जोड़ें।
  2. फ़ील्ड कैलकुलेटर का उपयोग करें, और मौजूदा फ़ील्ड को अपडेट करने के लिए जाएं। "वर्ष" का चयन करें और निम्नलिखित अभिव्यक्ति लिखें:

    to_string ("MINYEAR2") + '-' + to_string ("MAXYEAR2")

  3. अंतिम आउटपुट विशेषता इस तरह दिखाई देगी:

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

  1. अंतिम आउटपुट इस तरह होगा:

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


यहां आपके डेटा का परीक्षण करने के बाद आउटपुट है:

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

बाईं ओर स्थित तालिका प्रकार पूर्णांक का एक नया क्षेत्र बनाने के बाद बिंदु डेटा है, और दाईं ओर तालिका ऊपर बताए गए चरण 2 का उपयोग करके बिंदु डेटा के साथ लाइन में शामिल होने के बाद है। फिर मैंने अंतिम डेटा बनाने के लिए चरण 5-6 का उपयोग किया।

अपडेट करें

मैंने अभिव्यक्ति to_int () का उपयोग करके फ़ील्ड YEAR को स्ट्रिंग से पूर्णांक में बदलने का प्रयास किया और यह काम कर गया। इसलिए आपको इसे मैन्युअल रूप से करने की आवश्यकता नहीं है। हालाँकि, फ़ील्ड प्रकार प्रकार का Integerनहीं होना चाहिए Integer64। सुनिश्चित करें कि क्षेत्र की लंबाई 9. तक है। यदि आपने 10 की लंबाई वाली फ़ील्ड को चुना है, तो इसे परिवर्तित कर Interger64दिया जाएगा, और यह काम नहीं करेगा Interger64। फिर आप चरण 2-6 से प्रक्रिया का पालन कर सकते हैं

अभिव्यक्ति_ का उपयोग करने के बाद यहां अंतिम आउटपुट है ():

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

बाईं ओर उपरोक्त विशेषता तालिका में, YEAR प्रकार स्ट्रिंग का है और YEAR2 प्रकार का पूर्णांक है जिसे अभिव्यक्ति to_int () का उपयोग करके परिवर्तित किया गया है। आप चरण 2-6 का पालन करने के बाद दाईं ओर स्थित विशेषता तालिका में देख सकते हैं, मुझे MINYEAR2 और MAXYEAR2 मिला, फिर फ़ील्ड YEAR में एक साथ सब कुछ समेटने के लिए फिर से स्ट्रिंग में परिवर्तित किया गया।


आपका बहुत बहुत धन्यवाद! ठीक ऐसा ही मैंने कई बार किया। मुझे लगता है कि पॉलीलाइन फीचर्स पॉइंट लोकेशन्स के बिल्कुल ऊपर बंटे हुए हैं, क्योंकि मैंने पॉइंट्स लेनोवे प्लगइन का उपयोग करके पॉइंट लेयर्स से लाइनें बनाई हैं। क्या आप इस डेटा सब्मिट के साथ प्रयास कर सकते हैं: drive.google.com/file/d/0B7ZWEFkkfYgheG92Q29sa0I3LW8/view ? एक बार फिर धन्यवाद!
विल्टोमैप

विशेषता तालिका में फ़ील्ड YEAR प्रकार स्ट्रिंग का है। आपको वर्षों के प्रकार के पूर्णांक को जोड़ने और मैन्युअल रूप से वर्षों को इनपुट करने की आवश्यकता है। पूर्णांक प्रकार फ़ील्ड बनाने और संपादन को सहेजने के बाद, पुराने स्ट्रिंग फ़ील्ड को हटा दें। फिर, उपरोक्त विस्तृत प्रक्रिया का पालन करें।
अहमदनब

मैंने अभिव्यक्ति Y_int () का उपयोग करके स्ट्रिंग से पूर्णांक तक क्षेत्र YEAR को बदलने की कोशिश की, लेकिन यह भी काम नहीं किया। जब मैंने मैन्युअल रूप से वर्षों में प्रवेश किया, तो यह उम्मीद के मुताबिक काम किया।
अहमदनब

स्पष्ट विवेचन @ यमदन्हब
शिको

धन्यवाद @ महामानव! तथ्य यह है कि मैंने जो डेटा ऊपर साझा किया है वह एक सबसेट है। मेरे पास कई हजारों लाइनें और बिंदु हैं इसलिए मैन्युअल रूप से वर्षों में प्रवेश करना काफी काम होगा! क्या यह एक बग है?
11

5

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

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

क्षेत्र कैलकुलेटर में:

tostring(minYEAR) + '-' + tostring(maxYEAR)

यह विधि प्रत्येक पंक्ति के लिए नाम COUNTऔर अतिरिक्त मान वाला एक अतिरिक्त कॉलम लौटाती है 2। या तो मिन और मैक्स विकल्प इन informations को वापस करते हैं। मैंने लाइनों की परत को लक्ष्य परत के रूप में चुना है और बिंदु परत को लेयर लेयर के रूप में चुना है, क्या मैं सही हूं?
wiltomap

क्या आप वर्ष क्षेत्र संख्यात्मक या पाठ हैं?
राडौक्सजू

YEARक्षेत्र पूर्णांक है। मैंने एक नया कॉलम बनाने की कोशिश की, to_string("YEAR")लेकिन नतीजा बिल्कुल वही है ...
wiltomap

मैंने यह सुनिश्चित करने के लिए एक त्वरित परीक्षण किया (क्यूजीआईएस 2.8.3) और इसने काम किया। यदि आपकी गिनती 2 है, तो इसका मतलब है कि आपके पास प्रत्येक खंड के लिए 2 अंक हैं, जो सही है। लेकिन मेरे साथ मैं स्थानिक जुड़ाव के द्वारा बनाई गई नई लाइन वेक्टर में MINYEAR MAXYEAR के गुण मान हैं। मुझे समझ नहीं आता कि यह आपके मामले में काम क्यों नहीं करता है। क्या आप किसी अन्य फ़ाइल के साथ प्रयास कर सकते हैं?
राडोक्सु

4

टोपोलॉजी को सही मानते हुए, अभिव्यक्ति के साथ एक फील्ड 'डब्ल्यूकेटी' का निर्माण करना

geom_to_wkt( $geometry) 

अपनी बात परत में, आप अभिव्यक्ति का उपयोग कर सकते हैं:

min( attribute( get_feature('points','WKT', geom_to_wkt(start_point($geometry)  )),'year'),attribute( get_feature('points','WKT', geom_to_wkt(end_point($geometry)  )),'year'))||'-'|| max( attribute( get_feature('points','WKT', geom_to_wkt(start_point($geometry)  )),'year'),attribute( get_feature('points','WKT', geom_to_wkt(end_point($geometry)  )),'year'))

पाइप परत के क्षेत्र कैलकुलेटर में, एक पाठ स्ट्रिंग का निर्माण।

  • विशेषता (फ़ीचर, विशेषता_नाम) एक विशेषता से एक निर्दिष्ट विशेषता का मूल्य लौटाता है, यहाँ,
    प्राप्त बिंदु सुविधा का वर्ष ।
  • get_feature (परत, विशेषता, मान) किसी दिए गए विशेषता मान से मेल खाते परत की पहली विशेषता देता है। यहां हम यह जांचते हैं कि क्या हम एक ही निर्देशांक के साथ एक बिंदु पा सकते हैं (डब्ल्यूकेटी प्रारूप में)
    जो आपकी रेखा के आरंभ और अंत के छोरों के समान हैं।
  • start_point (ज्यामिति) एक ज्यामिति से पहला नोड लौटाता है। यहां आपकी लाइन का पहला वर्कट है।
  • end_point (ज्यामिति) एक ज्यामिति से अंतिम नोड लौटाता है। यहाँ अपनी लाइन के अंतिम शीर्ष।
  • geom_to_wkt (ज्यामिति) ज्यामिति के वेल-ज्ञात पाठ (WKT) का प्रतिनिधित्व करता है। यहाँ छवि विवरण दर्ज करें

आप इसे अपडेट भी कर सकते हैं:

CASE
WHEN attribute( get_feature('points','WKT', geom_to_wkt(start_point($geometry)  )),'year') = attribute( get_feature('points','WKT', geom_to_wkt(end_point($geometry)  )),'year')
THEN attribute( get_feature('points','WKT', geom_to_wkt(end_point($geometry)  )),'year')
ELSE min( attribute( get_feature('points','WKT', geom_to_wkt(start_point($geometry)  )),'year'),attribute( get_feature('points','WKT', geom_to_wkt(end_point($geometry)  )),'year'))||'-'|| max( attribute( get_feature('points','WKT', geom_to_wkt(start_point($geometry)  )),'year'),attribute( get_feature('points','WKT', geom_to_wkt(end_point($geometry)  )),'year'))
END

केवल एक वर्ष दिखाने के लिए यदि एक ही वर्ष के साथ दो बिंदु जुड़े हुए हैं (200X-200X के बजाय 200X प्राप्त करना)।

इस पद्धति का मुख्य लाभ यह है कि यदि आपका डेटा आपके बिंदुओं में बदलता है, तो आप इसे केवल एक फ़ील्ड कैलकुलेटर के साथ बहुत तेज़ी से अपडेट कर सकते हैं। जब आप नई लाइनें बनाते हैं तो आप
इस नियम को ऑटोफिल्ड के रूप में भी जोड़ सकते हैं।
चीयर्स,

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