QGIS का उपयोग करते हुए नियंत्रण बिंदुओं के साथ जियोफेरेंसिंग वेक्टर परत?


29

मेरे पास एक गैर-जेरोफिरेक्ट वेक्टर परत है जिसे मुझे जियोफेरेंस करने की आवश्यकता है। रेखापुंज परतों के साथ कार्य आसान और सीधा है, लेकिन मुझे कोई पता नहीं है कि मुझे अपनी वेक्टर परत के साथ क्या करना चाहिए। मेरे पास ज्ञात निर्देशांक के साथ कुछ नियंत्रण बिंदु हैं जो परिवर्तन के लिए कुछ आधार प्रदान करना चाहिए। तो, मान लें कि मैं 1, 2 और 3 के आईडी-एस के साथ अंक जानता हूं, इसके लिए X1, y1 के निर्देशांक होने चाहिए; x2, y2; x3, Y3। सरल स्थानांतरण के अलावा कुछ रोटेशन और पैमाने परिवर्तन हो सकते हैं।

कोई विचार?


क्या आपने qgsAffine प्लगइन की कोशिश की है? यहां इसी तरह के प्रश्न: gis.stackexchange.com/questions/22691/how-to-georeference-a-dxf
Rayner

Affine प्लग-इन शायद ट्रांसफ़ॉर्मेशन करेगा, लेकिन इसका उपयोग करने के लिए आपको ट्रांसफ़ॉर्मेशन मापदंडों को जानना होगा। क्या आप वेक्टर निर्देशांक और आपके तीन बिंदुओं के लिए वास्तविक वास्तविक निर्देशांक पोस्ट कर सकते हैं? एन।
नेपटन

क्या आप आकार-प्रकार को gdal_rasterize, tiff को georeference का उपयोग करके टिफ में परिवर्तित कर सकते हैं, फिर विश्व फ़ाइल से पैरामीटर निकाल सकते हैं?
क्लेविस

जवाबों:


10

वेक्टर लेयर को जियॉफेरेंस करने के लिए, qgsAffine प्लगइन आज़माएं।

मेनू में qgsaffine कहां खोजना है पर अधिक जानकारी है ?


3
जवाब के लिए धन्यवाद। मुझे लगता है कि मुझे तब qgsAffine का उपयोग करना होगा और मैन्युअल रूप से ट्रांसफ़ॉर्मेशन मापदंडों का पता लगाना होगा। मैं बस उम्मीद कर रहा था कि उस प्रक्रिया को स्वचालित करने का कोई तरीका है। शायद मैं ऐसा करने के लिए कुछ पायथन कोड लिखने की कोशिश
करूंगा

1
इसके बारे में सोचते हुए, आपको लग सकता है कि GRASS v.transform (यह Sextante टूलकिट में है) qgsAffine प्लग-इन की तुलना में मित्रवत है। एन।
नेपटन

1
इसके बारे में नज़र रखकर v.transform रूप में अच्छी तरह से आप के लिए रकम क्या करेंगे, देखने grass.osgeo.org/gdp/html_grass63/v.transform.html
nhopton

8

इस तथ्य को देखते हुए कि आपके पास नियंत्रण के कुछ बिंदु हैं, आपको अपने वेक्टर डेटा को स्थानांतरित करने के लिए एक Affine रूपांतरण का उपयोग करने में सक्षम होना चाहिए। इस नुस्खे पर एक नजर । प्रक्रिया एक दो भाग प्रक्रिया है:

  1. अपने नियंत्रण समारोह के गुणांक को परिभाषित करने के लिए अपने नियंत्रण बिंदुओं का उपयोग करें
  2. गुणांक ले लो और उन्हें पोस्टगिस में ST_Affine () पर लागू करें।

यदि आप अपने नियंत्रण बिंदुओं को एक CSV फ़ाइल (old_x, old_y, new_x, new_y) में डालते हैं, तो आप गुणांक भाग को हल करने के लिए लिंक से R कमांडों को काट सकते हैं।


7

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

  • अनुवाद: एक शुरू से अंत बिंदु तक अनुवाद (1 जोड़ी)
  • वर्दी: अनुवाद, स्केलिंग और रोटेशन (2 जोड़े)
  • झुकने: अतिरिक्त विकृति (3 जोड़े या अधिक)

आपको यहां एक छोटा वीडियो मिला है और मैं आपको सलाह देता हूं कि आप प्लगइन इंस्टॉल करने के बाद वेक्टर बेंडर की मदद पढ़ें।


मैं मानता हूं, वेक्टर बेंडर प्लगइन काम करने के लिए सहज और तेज है। हालाँकि, मैं दर्पण / फ्लिप वैक्टर का प्रबंधन नहीं कर सका । इस ऑपरेशन के लिए मैं Affine ट्रांसफॉर्मेशन प्लगइन (QGIS v2.18 ) का उपयोग करता हूं
jurajb

5

GDAL 1.10 की रिलीज़ के साथ अब यह संभव है।

यह ogr2ogr में एक बुनियादी परिवर्तन करके और -gcp टैग में नियंत्रण बिंदुओं की आपूर्ति करके किया जाता है। http://www.gdal.org/ogr2ogr.html

एक गाइड के लिए कृपया देखें: http://gisforthought.com/georeferencing-vector-data-use-qgis-and-ogr2ogr/


2

मुझे बस यही करना था, और यह करना समाप्त कर दिया:

  1. शेपफाइल को व्यवस्थित करें
  2. Georeferencer प्लगइन का उपयोग करके रेखापुंज को विस्थापित करना
  3. gcps.pointsफ़ाइल के रूप में GCP को सहेजें
  4. इस फ़ाइल का उपयोग करके affine परिवर्तन की गणना करें
  5. QgsAffine का उपयोग करके आकृति परिवर्तन में एफाइन परिवर्तन लागू करें

निम्न स्क्रिप्ट सहेजे गए GCPs का उपयोग करके परिशोधन परिवर्तन मैट्रिक्स की गणना करता है:

# Computes an affine transform based on QGis GCPs
# Usage: gcp_affine.py gcps.points

import csv
import sys
import numpy as np
from skimage.transform import AffineTransform

u = list(csv.DictReader(open(sys.argv[1], "rb")))
source = [(d["pixelX"], d["pixelY"]) for d in u]
dest = [(d["mapX"], d["mapY"]) for d in u]
source = [map(float, s) for s in source]
dest = [map(float, s) for s in dest]
source = np.array(source)
dest = np.array(dest)
aft = AffineTransform()
aft.estimate(source, dest)
np.set_printoptions(suppress=True)
print aft._matrix

2

दो पॉलीगनों को एक साथ करने के लिए मेरा जवाब देखें और मुक्त ओपनपंप को आज़माएं।

मुझे लगता है कि इसका कॉइन रूपांतरण क्यूगिस एफिन प्लगइन की तुलना में बहुत अधिक उपयोगकर्ता के अनुकूल है।


2

रेनेर के उत्तर पर मेरी टिप्पणियों के बाद, GRASS v.transform, जिसे सेक्स्टांटे टूलबॉक्स से चलाया जा सकता है, का उपयोग ट्रांसफ़ॉर्मेशन मापदंडों की गणना करने के लिए किया जा सकता है और उन्हें शल्क परिवर्तन करने के लिए वेक्टर लेयर पर लागू किया जा सकता है। नियंत्रण बिंदुओं वाली एक पाठ फ़ाइल की आवश्यकता है, यहां दिखाए गए प्रारूप में ।

इसका उपयोग करना बहुत आसान है और अच्छी तरह से काम करता है।


शायद मैं बूढ़ा हो रहा हूं, लेकिन बस सोच रहा हूं कि क्या लोग आर्कव्यू 3.0 में शेपवार्प यूजर एडोन को याद करते हैं। इसे इस्तेमाल करना इतना आसान था। मैंने हमेशा इन अन्य उपकरणों (v.transform / affine) को अधिक बोझिल पाया है। क्या किसी ने QGIS पर ShapeWarp की आसानी को फिर से बनाने की कोशिश नहीं की है?
शरद

1

यहां दिए गए कई उत्तर QGIS 3 के लिए अब विकल्प नहीं हैं, और / या केवल वेक्टर फ़ाइल के रेखीय परिवर्तनों के लिए अनुमति दी जा रही है। यह ओपी के सवाल का जवाब दे सकता है, लेकिन जो लोग इस पोस्ट को देखते हैं, वे जियोफेरेंसिंग वेक्टर फ़ाइलों के लिए अन्य परिवर्तन विकल्प चाहते हैं।

जियॉर्फेरिंग सदिश फ़ाइलों के लिए कुछ समाधान के साथ समस्याएँ:

  • QgsAffine प्लगइन केवल रैखिक परिवर्तनों के लिए अनुमति देता है। इसका मतलब है कि यह वेक्टर फ़ाइल को स्केल, रोटेट और मूव कर सकता है, लेकिन यह वेक्टर फाइल को मोड़ या ताना नहीं दे सकता है। रेखापुंज फ़ाइलों के लिए जियोफेरेंसर अधिक विकल्प प्रदान करता है, और विभिन्न प्रकार के परिवर्तनों के लिए अनुमति देता है, जिसमें दूसरे क्रम के बहुपद और पतली प्लेट तख़्ता शामिल हैं। इसके अलावा, ऐसा नहीं लगता है कि QGIS 3 में qgsAffine प्लगइन अभी भी उपलब्ध है।

  • GRASS मॉड्यूल v.transform qgsAffine प्लगइन के समान है, और केवल रैखिक परिवर्तनों के लिए अनुमति देता है।

  • वेक्टर बेंडर प्लगइन ऐसा लगता है कि यह एक अच्छा विकल्प था, लेकिन इसे QGIS 3 में पूरी तरह से चित्रित नहीं किया गया है, इसलिए वर्तमान में कोई विकल्प नहीं है। ऐसा नहीं लग रहा है कि अब इसे बनाए रखा जा रहा है।

Ogr2ogr का उपयोग करना, जैसा कि HeikkiVesanto के पोस्ट में सुझाया गया है, एक अच्छा विकल्प है। यह एक GCPs (ग्राउंड कंट्रोल पॉइंट्स) का उपयोग करने की अनुमति देता है, और निर्दिष्ट करता है कि आप किस प्रकार का परिवर्तन चाहते हैं। मुझे ऐसा करने के लिए कहीं भी निर्देश नहीं मिला, इसलिए मैंने नीचे कुछ निर्देश शामिल किए हैं:

  1. जीसीपी जोड़े के एक सेट को उत्पन्न करें, जिसमें एक बिंदु अप्रकाशित वेक्टर फ़ाइल में मूल स्थान है, और दूसरा बिंदु आपके भू-विस्थापित कार्यक्षेत्र में वांछित स्थान है।

  2. GCPs उत्पन्न करने के कई तरीके हैं। मैंने QGIS में Georeferencer GDAL प्लगइन का उपयोग किया। यह प्लगिन प्रबंधक का उपयोग करके स्थापित होने के बाद, रेखापुंज ड्रॉपडाउन मेनू के तहत उपलब्ध है। यह केवल रैस्टर फाइलों पर काम करता है, इसलिए आपको पहले वेक्टर फाइल को रैस्टर फाइल में बदलना होगा। यह "प्रोसेसिंग टूलबॉक्स: जीडीएएल: वेक्टर रूपांतरण: रैस्टराइज (वेक्टर से रेखापुंज)) के साथ संभव है। उस नंबर पर रिज़ॉल्यूशन सेट करें जो अभी भी आपको वेक्टर फ़ाइल की विशेषताओं को देखने की अनुमति देता है।

  3. जियोफेरेंसर में एक अच्छा इंटरफ़ेस है, जो आपको कई जीसीपी बिंदुओं को जोड़ने की अनुमति देता है। आप विभिन्न परिवर्तनों का भी परीक्षण कर सकते हैं, और देख सकते हैं कि कौन सा सबसे अच्छा काम करता है। और आप देख सकते हैं कि क्या आपके किसी भी जीसीपी अंक उनके अवशिष्टों को देखकर गलती से होने की संभावना है। एक बार जब आप अपने सभी GCP अंक जोड़ लेते हैं, और यह जाँच लेते हैं कि आपको आउटपुट पसंद है, तो आप मूल वेक्टर फ़ाइल को जियोफेरेंसिंग के लिए उपयोग करने के लिए Georeferencer से GCP फ़ाइल निर्यात कर सकते हैं।

  4. GCP फ़ाइल को निम्न प्रारूप में बदलने की आवश्यकता है। आप जितने चाहें उतने GCP अंक जोड़ सकते हैं, प्रत्येक को एक -gcp द्वारा आगे बढ़ाया जाता है और एक स्थान से अलग किया जाता है। मैंने इसे 800+ जीसीपी बिंदुओं के साथ चलाया, और इसने बहुत अच्छा काम किया।

    -gcp <ungeoref_x1> <ungeoref_y1> <georef_x1> <georef_y1> -gcp <ungeoref_x2> <ungeoref_y2> <georef_x2> <georef_y2>
  1. ऐसे कई तरीके हैं जिनसे कोई GCP बिंदुओं को सही प्रारूप में बदल सकता है। मैंने उन्हें एक सीएसवी फ़ाइल के रूप में एक्सेल में आयात किया, और प्रत्येक बिंदु के लिए सही प्रारूप को आउटपुट करने के लिए एक कॉलम बनाया। फिर मैंने उस कॉलम को TextEdit में चिपकाया और लाइन को स्पेस के साथ समाप्त किया।

  2. वेक्टर फ़ाइल जिसे आप जियोरफेरेंस करना चाहते हैं, उसे उसी एसआरएस का उपयोग करके अपने कार्यक्षेत्र में आयात किया जाना चाहिए, जिसे आप अंतिम जियोफर्म्ड फ़ाइल के लिए चाहते हैं, जो आपके कार्यक्षेत्र के समान एसआरएस होनी चाहिए। यह एक लंबा रास्ता हो सकता है जहां से यह होना चाहिए, अगर यह मूल रूप से एक अलग एसआरएस का उपयोग करता है, लेकिन परिवर्तन इसे सही स्थान पर ले जाएगा।

  3. "प्रसंस्करण टूलबॉक्स: GDAL: वेक्टर रूपांतरण: कन्वर्ट प्रारूप" के माध्यम से ogr2ogr तक पहुंचें। यह आपको उन वेक्टर फ़ाइल का चयन करने की अनुमति देता है जिन्हें आप जियोरफेरेंस, और अपनी आउटपुट फ़ाइल चाहते हैं। "अतिरिक्त निर्माण विकल्प" फ़ील्ड में, यह निर्दिष्ट करने के लिए एक कमांड जोड़ें कि आप किस प्रकार का परिवर्तन चाहते हैं, और फिर आपके सभी जीसीपी बिंदुओं के साथ लाइन।

  4. विभिन्न प्रकार के परिवर्तन के लिए शामिल हैं:

    • रैखिक के लिए "-ऑर्डर 1"
    • दूसरे क्रम के बहुपद के लिए "-आर्डर 2"
    • तीसरे क्रम के बहुपद के लिए "-ऑर्डर 3"
    • "-tps" पतली प्लेट तख़्ता के लिए।
  5. उदाहरण के लिए, "अतिरिक्त निर्माण विकल्प" फ़ील्ड में जोड़ा गया कोड ऐसा लग सकता है:

-order 2 -gcp <ungeoref_x1> <ungeoref_y1> <georef_x1> <georef_y1> -gcp <ungeoref_x2> <ungeoref_y2> <georef_x2> <georef_y2>
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.