QGIS kullanarak kontrol noktalarına sahip georeferencing vektör katmanı?


29

Georeferenced olmam gereken georeferenced bir vektör katmanım var. Tarama katmanları ile görev kolay ve kolaydır, ancak vektör katmanımla ne yapmam gerektiğine dair hiçbir fikrim yok. Dönüşüm için bazı temeller sağlayacak bilinen koordinatlara sahip birkaç kontrol noktam var. Öyleyse 1, 2 ve 3 numaralı id-s noktalarının x1, y1 koordinatlarına sahip olması gerektiğini biliyorum; x2, y2; x3, y3. Basit kaydırmaya ek olarak bir miktar rotasyon ve ölçek dönüşümü olabilir.

Herhangi bir fikir?


QgsAffine eklentisini denediniz mi? Burada Benzer soru: gis.stackexchange.com/questions/22691/how-to-georeference-a-dxf
Rayner

Affine eklentisi muhtemelen dönüşümü yapacak, ancak bunu kullanmak için dönüşüm parametrelerini bilmeniz gerekecektir. Üç noktanız için vektör koordinatlarını ve ilgili gerçek dünya koordinatlarını gönderebilir misiniz? N.
nhopton

Shapefile komutunu gdal_rasterize, tiff georeference ve daha sonra dünya dosyasından parametreleri ayıklayarak dönüştürebilir misiniz?
klewis

Yanıtlar:


10

Bir vektör katmanını georeference yapmak için, qgsAffine eklentisini deneyin.

Daha fazla bilgi yoktur menüde qgsaffine bulmak nerede?


3
Cevaplar için teşekkür ederim. Sanırım qgsAffine kullanmalı ve transofrmation parametrelerini manuel olarak çözmeliyim. Sadece bu süreci otomatikleştirmenin bir yolu olduğunu umuyordum. Belki de bunu yapmak için bazı Python kodları yazmayı deneyeceğim
AHaav

1
Bunu düşünürseniz, GRASS v.transform'un (Sextante araç setinde bulunur) qgsAffine eklentisinden daha kolay kullanılabileceğini görebilirsiniz. N.
nhopton

1
V.transform sizin için toplamı da sizin için yapacaktır
nhopton 11:12

8

Bazı kontrol noktalarına sahip olduğunuz gerçeği göz önüne alındığında, vektör verilerinizi değiştirmek için bir Affine dönüşümü kullanabilmelisiniz. Bu tarife bir göz atın . Süreç iki aşamalı bir süreçtir:

  1. Gerekli olan affine fonksiyonunuzun katsayılarını tanımlamak için kontrol noktalarınızı kullanın
  2. Katsayıları alın ve bunları postgis içindeki ST_Affine () 'e uygulayın.

Kontrol noktalarını bir CSV dosyasına yerleştirirseniz (old_x, old_y, new_x, new_y), katsayılar bölümünü çözmek için R komutlarını bağlantıdan kesebilir.


7

QGIS için Vector Bender eklentisini öneririm. Denedim ve iyi çalışıyor ve kullanıcı dostu. Tanımladığınız nokta çiftinin miktarına bağlı olarak, aşağıdakilerden birini yapabilirsiniz:

  • çeviriler: bir başlangıçtan bitiş noktasına kadar çeviri (1 çift)
  • Tekdüzen: çeviri, ölçeklendirme ve döndürme (2 çift)
  • bükme: ek deformasyon (3 çift veya daha fazla)

Burada kısa bir video buluyorsunuz ve eklentiyi yükledikten sonra Vector Bender yardımını okumanızı tavsiye ediyorum.


Kabul ediyorum, Vector bender eklentisi sezgisel ve çalışmak için hızlı. Ancak, vektörleri yansıtmayı / çevirmeyi başaramadım . Bu işlem için Affine dönüşüm eklentisini kullanıyorum (QGIS v2.18).
jurajb


2

Sadece bunu yapmak zorunda kaldım ve sonunda bunu yaptım:

  1. Şekil dosyasını rasterleştir
  2. Georeferencer eklentisini kullanarak raster'i Georeference
  3. GCP'yi bir gcps.pointsdosya olarak kaydedin
  4. Bu dosyayı kullanarak afine dönüşümünü hesapla
  5. QgsAffine kullanarak afine dönüşümünü şekil dosyasına uygulayın

Aşağıdaki komut dosyası, kaydedilen GCP'leri kullanarak affine dönüşüm matrisini hesaplar:

# 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

Rayner'ın cevabı hakkındaki yorumlarımdan sonra, Sextante araç kutusundan çalıştırılabilen GRASS v.transform, dönüşüm parametrelerini hesaplamak ve bunları bir afin dönüşümünü gerçekleştirmek için bir vektör katmanına uygulamak için kullanılabilir. Burada gösterilen biçimde kontrol noktalarını içeren bir metin dosyası gereklidir .

Kullanımı çok kolay ve iyi çalışıyor.


Belki yaşlanıyorum, ama sadece insanların Arcview 3.0'daki ShapeWarp kullanıcı eklentisini hatırlayıp hatırlamadıklarını merak ediyorum. Kullanımı çok kolaydı. Bu diğer araçları her zaman (v.transform / affine) çok daha hantal buldum. Birisi QGIS üzerindeki ShapeWarp kolaylığını yeniden yaratmaya çalıştı mı?
Sharad

1

Burada verilen cevapların birçoğu artık QGIS 3 için seçenek değildir ve / veya yalnızca vektör dosyalarının doğrusal olarak dönüştürülmesine izin verilir. Bu OP'nin sorusuna cevap verebilir, ancak bu gönderiye bakanlar diğerleri coğrafi referans vektör dosyaları için başka dönüşüm seçenekleri de isteyebilirler.

Coğrafi referans vektör dosyaları için bazı çözümlerle ilgili sorunlar:

  • QgsAffine eklentisi yalnızca doğrusal dönüşümlere izin verir. Bu, vektör dosyasını ölçekleyebilir, döndürebilir ve taşıyabilir, ancak vektör dosyasını bükemez veya bükemez. Tarama dosyaları için Georeferencer daha fazla seçenek sunar ve ikinci dereceden polinom ve ince plaka spline da dahil olmak üzere çeşitli dönüşümler için izin verir. Ayrıca, qgsAffine eklentisinin hala QGIS 3'te mevcut olduğu görünmüyor.

  • GRASS modülü v.transform, qgsAffine eklentisine benzer ve yalnızca doğrusal dönüşümlere izin verir.

  • Vector Bender eklentisi iyi bir seçenektir, ancak QGIS 3'e tam olarak taşınmamıştır, bu nedenle şu anda bir seçenek değildir. Artık korunuyor gibi görünmüyor.

HeikkiVesanto'nun gönderisinde önerildiği gibi ogr2ogr kullanmak iyi bir seçenektir. GCP'leri (Yer Kontrol Noktaları) kullanabilmenizi ve ne tür bir dönüşüm istediğinizi belirtmenizi sağlar. Bunun nasıl yapılacağına ilişkin hiçbir talimat bulamadım, bu yüzden aşağıda bazı talimatları da ekledim:

  1. GCP çiftleri kümesi oluşturun; bir nokta eoseoferenced vektör dosyasındaki orijinal konumdur ve diğer nokta georeferenced çalışma alanınızdaki istenen konumdur.

  2. GSO'ları üretmenin çeşitli yolları vardır. QGIS'de Georeferencer GDAL eklentisini kullandım. Bu, Eklenti yöneticisi kullanılarak yüklendikten sonra Raster açılır menüsünde kullanılabilir. Yalnızca raster dosyalar üzerinde çalışır, bu yüzden önce vektör dosyasını bir raster dosyasına dönüştürmelisiniz. Bu "İşleme Araç Kutusu: GDAL: Vektör dönüşüm: Rasterleştir (rasterden vektöre)" ile mümkündür. Çözünürlüğü vektör dosyasının özelliklerini görmenize izin veren sayıya ayarlayın.

  3. Georeferencer, birçok GCP noktası eklemenizi sağlayan hoş bir arayüze sahiptir. Ayrıca farklı dönüşümleri test edebilir ve hangisinin en iyi sonucu verdiğini görebilirsiniz. Ayrıca, GCP puanlarınızdan herhangi birinin, artıklarına bakarak, hatalı olup olmadıklarını görebilirsiniz. Tüm GCP puanlarınızı ekledikten ve çıktının hoşunuza gittiğini kontrol ettikten sonra, orijinal vektör dosyasını georeferencing için kullanmak üzere GCP dosyasını Georeferencer'dan dışa aktarabilirsiniz.

  4. GCP dosyasının aşağıdaki biçimde olması gerekiyor. İstediğiniz kadar GCP noktası ekleyebilirsiniz, her biri bir -gcp ile devam eder ve bir boşlukla ayrılır. Bunu 800+ GCP puanıyla yaptım ve harika çalıştı.

    -gcp <ungeoref_x1> <ungeoref_y1> <georef_x1> <georef_y1> -gcp <ungeoref_x2> <ungeoref_y2> <georef_x2> <georef_y2>
  1. GCP puanlarını doğru formata dönüştürmenin çeşitli yolları vardır. Bunları Excel'e bir csv dosyası olarak içe aktardım ve her nokta için doğru formatın çıktısını alacak bir sütun oluşturdum. Sonra bu sütunu TextEdit'e yapıştırdım ve satırın sonunu boşluklarla değiştirdim.

  2. Georeference yapmak istediğiniz vektör dosyası, çalışma alanınızla aynı SRS olması gereken son georeferenced dosya için istediğiniz aynı SRS kullanılarak çalışma alanınıza alınmalıdır. İlk başta farklı bir SRS kullandıysa, olması gereken yerden uzun bir yol olabilir, ancak dönüşüm onu ​​doğru yere taşıyacaktır.

  3. "İşleme Araç Kutusu: GDAL: Vektör dönüşüm: Format dönüştürme" ile ogr2ogr'a erişin. Bu, georeference yapmak istediğiniz vektör dosyasını ve çıkış dosyanızı seçmenizi sağlar. "Ek oluşturma seçenekleri" alanına, hangi dönüşüm türünü istediğinizi belirten bir komut ve ardından tüm GCP puanlarınızın bulunduğu satırı ekleyin.

  4. Farklı dönüşüm türleri için komutlar şunları içerir:

    • Doğrusal için "-order 1"
    • ikinci dereceden polinom için "-order 2"
    • üçüncü dereceden polinom için "-order 3"
    • İnce Plakalı Spline için "-tps".
  5. Örneğin, "Ek oluşturma seçenekleri" alanına eklenen kod şöyle görünebilir:

-order 2 -gcp <ungeoref_x1> <ungeoref_y1> <georef_x1> <georef_y1> -gcp <ungeoref_x2> <ungeoref_y2> <georef_x2> <georef_y2>
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.