Lớp vectơ địa lý với các điểm kiểm soát bằng cách sử dụng QGIS?


29

Tôi có một lớp vectơ không tham chiếu địa lý mà tôi cần được tham chiếu địa lý. Với các lớp raster, nhiệm vụ rất dễ dàng và đơn giản, nhưng tôi không biết tôi nên làm gì với lớp vector của mình. Tôi có một vài điểm kiểm soát với tọa độ đã biết sẽ cung cấp một số cơ sở để chuyển đổi. Vì vậy, giả sử tôi biết các điểm có id-s là 1, 2 và 3 nên có tọa độ là x1, y1; x2, y2; x3, y3. Có thể có một số chuyển đổi xoay và quy mô ngoài việc chuyển đổi đơn giản.

Có ý kiến ​​gì không?


Bạn đã thử plugin qssAffine chưa? Câu hỏi tương tự ở đây: gis.stackexchange.com/questions/22691/how-to-georeference-a-dxf
Rayner

Trình cắm Affine có thể sẽ thực hiện chuyển đổi, nhưng bạn sẽ cần biết các tham số chuyển đổi để sử dụng nó. Bạn có thể đăng tọa độ vectơ và tọa độ thế giới thực tương ứng cho ba điểm của bạn không? N.
nhopton

Bạn có thể chuyển đổi shapefile thành một tiff bằng gdal_rasterize, georeference the tiff, sau đó trích xuất các tham số từ tệp thế giới không?
klewis

Câu trả lời:


10

Để định vị địa lý một lớp vectơ, hãy thử plugin qssAffine.

Có nhiều thông tin hơn ở đâu để tìm qssaffine trong menu?


3
Cảm ơn bạn đã trả lời. Tôi đoán rằng tôi phải sử dụng qssAffine sau đó và tìm ra các tham số transofrmation bằng tay. Tôi chỉ hy vọng rằng có một số cách để tự động hóa quá trình đó. Có lẽ tôi sẽ thử viết một số mã Python để làm điều đó
AHaav

1
Nghĩ về nó, bạn có thể thấy rằng GRASS v.transform (nó có trong bộ công cụ Sextante) sử dụng thân thiện hơn so với trình cắm thêm qssAffine. N.
nhopton

1
Nhìn qua, v.transform cũng sẽ tính tổng cho bạn, xem grass.osgeo.org/gdp/html_grass63/v.transform.html
nhopton

8

Với thực tế là bạn có một số điểm kiểm soát, bạn sẽ có thể sử dụng phép biến đổi Affine để thay đổi dữ liệu vectơ của mình. Có một cái nhìn vào công thức này . Quá trình này là một quá trình gồm hai phần:

  1. Sử dụng các điểm kiểm soát của bạn để xác định các hệ số của hàm affine cần thiết
  2. lấy các hệ số và áp dụng chúng cho ST_Affine () trong postgis.

Nếu bạn đặt các điểm kiểm soát của mình vào tệp CSV (old_x, old_y, new_x, new_y), bạn có thể cắt các lệnh R từ liên kết để giải quyết phần hệ số.


7

Tôi khuyên dùng plugin Vector Bender cho QGIS. Tôi đã thử nó và nó hoạt động tốt và thân thiện với người dùng. Tùy thuộc vào số lượng cặp điểm bạn xác định, bạn có thể thực hiện:

  • bản dịch: dịch từ điểm bắt đầu đến điểm kết thúc (1 cặp)
  • thống nhất: dịch, chia tỷ lệ và xoay (2 cặp)
  • uốn: biến dạng bổ sung (3 cặp trở lên)

Bạn tìm thấy một đoạn video ngắn ở đây và tôi khuyên bạn nên đọc trợ giúp Vector Bender sau khi bạn cài đặt plugin.


Tôi đồng ý, plugin Vector bender trực quan và nhanh chóng để làm việc. Tuy nhiên, tôi không thể xoay xở để phản chiếu / lật vectơ. Đối với thao tác này, tôi sử dụng plugin chuyển đổi Affine (QGIS v2.18).
Jurajb


2

Tôi chỉ phải làm điều đó, và cuối cùng đã làm điều này:

  1. Rasterize shapefile
  2. Georeference trình raster sử dụng plugin Georeferencer
  3. Lưu GCP dưới dạng gcps.points tệp
  4. Tính toán chuyển đổi affine bằng tệp này
  5. Áp dụng phép biến đổi affine cho shapefile bằng cách sử dụng qssAffine

Kịch bản sau đây tính toán ma trận biến đổi affine bằng các GCP đã lưu:

# 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

Theo dõi nhận xét của tôi về câu trả lời của Rayner, GRASS v.transform, có thể được chạy từ hộp công cụ Sextante, có thể được sử dụng để tính toán các tham số biến đổi và áp dụng chúng cho lớp vectơ để thực hiện chuyển đổi affine. Một tệp văn bản chứa các điểm kiểm soát là bắt buộc, theo định dạng hiển thị ở đây .

Nó rất dễ sử dụng và hoạt động tốt.


Có lẽ tôi đang già đi, nhưng chỉ tự hỏi liệu mọi người có nhớ addon người dùng ShapeWarp trong Arcview 3.0 không. Nó rất dễ sử dụng. Tôi đã luôn luôn tìm thấy những công cụ khác (v.transform / affine) cồng kềnh hơn nhiều. Có ai đó đã cố gắng tạo lại sự dễ dàng của ShapeWarp trên QGIS không?
Sharad

1

Một số câu trả lời được cung cấp ở đây không còn là tùy chọn cho QGIS 3 và / hoặc chỉ cho phép các phép biến đổi tuyến tính của tệp vectơ được tham chiếu địa lý. Điều này có thể trả lời câu hỏi của OP, nhưng những người khác xem bài đăng này có thể muốn các tùy chọn chuyển đổi khác cho các tệp vectơ hội nghị địa lý.

Các vấn đề với một số giải pháp cho các tệp vectơ hội nghị địa lý:

  • Plugin qssAffine chỉ cho phép chuyển đổi tuyến tính. Điều này có nghĩa là nó có thể chia tỷ lệ, xoay và di chuyển tệp vectơ, nhưng nó không thể uốn cong hoặc làm cong tệp vectơ. Georeferencer cho các tệp raster cung cấp nhiều tùy chọn hơn và cho phép thực hiện nhiều biến đổi khác nhau, bao gồm đa thức bậc hai và spline tấm mỏng. Ngoài ra, có vẻ như plugin qssAffine vẫn không khả dụng trong QGIS 3.

  • Mô-đun GRASS v.transform tương tự như plugin qssAffine và chỉ cho phép chuyển đổi tuyến tính.

  • Plugin Vector Bender có vẻ như là một tùy chọn tốt, nhưng nó chưa được chuyển hoàn toàn sang QGIS 3, vì vậy hiện tại không phải là một tùy chọn. Nó không giống như nó đang được duy trì nữa.

Sử dụng ogr2ogr, như được đề xuất trong bài đăng của HeikkiVesanto, là một lựa chọn tốt. Nó cho phép một người sử dụng GCP (Điểm kiểm soát mặt đất) và chỉ định loại chuyển đổi bạn muốn. Tôi không thể tìm thấy hướng dẫn ở bất cứ đâu về cách thực hiện việc này, vì vậy tôi đã bao gồm một số hướng dẫn bên dưới:

  1. Tạo một tập hợp các cặp GCP, với một điểm là vị trí ban đầu trong tệp vectơ không tham chiếu và điểm khác là vị trí mong muốn trong không gian làm việc được tham chiếu địa lý của bạn.

  2. Có nhiều cách khác nhau để tạo GCP. Tôi đã sử dụng plugin Georeferencer GDAL trong QGIS. Điều này có sẵn trong menu thả xuống Raster, sau khi được cài đặt bằng trình quản lý Plugin. Nó chỉ hoạt động trên các tệp raster, vì vậy trước tiên bạn phải chuyển đổi tệp vectơ thành tệp raster. Điều này có thể với "Hộp công cụ xử lý: GDAL: Chuyển đổi vectơ: Rasterize (vectơ thành raster)". Đặt độ phân giải thành số vẫn cho phép bạn xem các tính năng của tệp vectơ.

  3. Georeferencer có giao diện đẹp, cho phép bạn thêm nhiều điểm GCP. Bạn cũng có thể thử nghiệm các biến đổi khác nhau và xem cái nào hoạt động tốt nhất. Và bạn có thể xem liệu có bất kỳ điểm GCP nào của bạn có khả năng bị lỗi hay không, bằng cách xem phần dư của chúng. Khi bạn đã thêm tất cả các điểm GCP của mình và kiểm tra xem bạn có thích đầu ra không, bạn có thể xuất tệp GCP từ Georeferencer để sử dụng cho hội thảo địa lý tệp vectơ gốc.

  4. Tệp GCP cần được thay đổi theo định dạng sau. Bạn có thể thêm bao nhiêu điểm GCP tùy thích, mỗi điểm được tiến hành bằng -gcp và cách nhau bởi khoảng trắng. Tôi đã chạy nó với hơn 800 điểm GCP và nó hoạt động rất tốt.

    -gcp <ungeoref_x1> <ungeoref_y1> <georef_x1> <georef_y1> -gcp <ungeoref_x2> <ungeoref_y2> <georef_x2> <georef_y2>
  1. Có nhiều cách mà người ta có thể thay đổi các điểm GCP thành định dạng phù hợp. Tôi đã nhập chúng vào Excel dưới dạng tệp csv và tạo một cột để xuất định dạng đúng cho từng điểm. Sau đó, tôi dán cột đó vào TextEdit và thay thế dòng kết thúc bằng dấu cách.

  2. Tệp vectơ mà bạn muốn tham chiếu địa lý nên được nhập vào không gian làm việc của bạn bằng cách sử dụng cùng SRS mà bạn muốn cho tệp tham chiếu địa lý cuối cùng, phải là SRS giống như không gian làm việc của bạn. Nó có thể là một chặng đường dài từ nơi cần đến, nếu ban đầu nó sử dụng một SRS khác, nhưng phép biến đổi sẽ di chuyển nó đến đúng vị trí.

  3. Truy cập ogr2ogr thông qua "Hộp công cụ xử lý: GDAL: Chuyển đổi vectơ: Chuyển đổi định dạng". Điều này cho phép bạn chọn tệp vectơ bạn muốn tham chiếu địa lý và tệp đầu ra của bạn. Trong trường "Tùy chọn tạo bổ sung", thêm lệnh chỉ định loại chuyển đổi bạn muốn và sau đó là dòng có tất cả các điểm GCP của bạn.

  4. Các lệnh cho các loại chuyển đổi khác nhau bao gồm:

    • "-order 1" cho tuyến tính
    • "-order 2" cho đa thức bậc hai
    • "-order 3" cho đa thức bậc ba
    • "-tps" cho Spline Tấm mỏng.
  5. Ví dụ: mã được thêm vào trường "Tùy chọn tạo bổ sung" có thể trông như sau:

-order 2 -gcp <ungeoref_x1> <ungeoref_y1> <georef_x1> <georef_y1> -gcp <ungeoref_x2> <ungeoref_y2> <georef_x2> <georef_y2>
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.