आकृति के साथ भू-आकृति पर अद्यतन निर्देशांक
मेरे पास एक जियोपैकेज फाइल है जिसमें कुछ वस्तुओं के बारे में सभी जानकारी है लेकिन निर्देशांक को अद्यतन करने की आवश्यकता है। मैं नए निर्देशांक प्राप्त करने के लिए एक पुराने Leica 1200 GPS का उपयोग कर रहा हूं और इन बिंदुओं पर वही आईडी दे रहा हूं जो उनके पास जियोपैकेज में है।
जीपीएस द्वारा उत्पन्न आकृति से लोगों के साथ जियोपैकेज में निर्देशांक को अपडेट करने का सबसे अच्छा तरीका क्या है यह जानते हुए कि आईडी एक ही होगी, मैं इसके लिए एक्सेल के VLOOKUP फ़ंक्शन का उपयोग कर रहा हूं, लेकिन यह जानना चाहूंगा कि क्या कोई रास्ता है इसे QGIS के अंदर करना है।
जवाब
यह संभव है, लेकिन ऐसा करने के लिए तुच्छ नहीं है और ogr2ogr और ogrinfo के साथ। शेपफाइल को पहले जियोपैकेज में डाला जाना चाहिए लेकिन जियोमेट्री अपडेट होने के बाद इसे हटाया जा सकता है।
स्रोत डेटा
jointest1 में 2 अंक हैं
ID (Integer) = 11
POINT (77 33)
ID (Integer) = 22
POINT (15 35)
jointest2 में भी दो अंक होते हैं
ID (Integer) = 22
POINT (5 25)
ID (Integer) = 0
POINT (3 2)
इसका उद्देश्य सुविधा 22 -> सूत्री (5 25) को अद्यतन करना है और सुविधा 11 को बिंदु (77 33) के रूप में रखना है। ID = 0 के साथ फ़ीचर जो संयुक्त में मौजूद नहीं है उसे जोड़ा नहीं जाना चाहिए।
लेयर जॉइंटस्टे 1 जियोपैकेज "jointest.gpkg" में है और jointest2 शेपफाइल है। पहले आयात भी संयुक्त 2 GeoPackage में।
ogr2ogr -append -update -f gpkg jointest.gpkg jointest2.shp
अद्यतन कमांड चलाने के लिए -sql पैरामीटर के साथ अगला उपयोग ogrinfo। कमांड के लिए सिंटैक्स से लिया गया हैhttps://stackoverflow.com/questions/19270259/update-with-join-in-sqlite।
ogrinfo -sql "update jointest1 set geom=(select geom from jointest2 where ID=jointest1.ID) where exists (select geom from jointest2 where ID=jointest1.ID)" jointest.gpkg
जाँच करें कि हमारे पास अब jointest1 में क्या है
ogrinfo jointest.gpkg jointest1
…
ID (Integer) = 11
POINT (77 33)
ID (Integer) = 22
POINT (5 25)
अब हम संयुक्त 2 टेबल को छोड़ सकते हैं और डेटाबेस को वैक्यूम कर सकते हैं। यदि आप किसी SQLite डेटाबेस से तालिका को छोड़ते हैं तो फ़ाइल का आकार तब तक समान रहता है जब तक आप डेटाबेस को वैक्यूम नहीं करते। यह खतरनाक नहीं है यदि आप वैक्यूम नहीं करते हैं, तो आपके पास डिस्क पर बस थोड़ा बड़ा डेटाबेस फ़ाइल होगा।
ogrinfo jointest.gpkg -sql "drop table jointest2"
ogrinfo jointest.gpkg -sql "vacuum"
निर्देशांक अपडेट करना कठिन है और संभवतः कुछ उन्नत फ़िडलिंग की आवश्यकता होगी। मैं इसके बजाय की सिफारिश करेंगे:
- QGIS में दोनों फाइलें खोलें
- ID का उपयोग करके GeoPackage लेयर से लेकर Shapefile लेयर तक की विशेषताओं से जुड़ें
- उस परत को नए जियोपैकेज के रूप में सहेजें
इस तरह से आपको ज्यामिति प्रसंस्करण को छूने की ज़रूरत नहीं है, लेकिन केवल विशेषता डेटा जो कि अधिक आसान है।