QGIS를 사용하여 제어점이있는 지리 참조 벡터 레이어?


29

지리 참조되어야하는 지리 참조되지 않은 벡터 레이어가 있습니다. 래스터 레이어를 사용하면 작업이 쉽고 간단하지만 벡터 레이어로 무엇을해야할지 모르겠습니다. 알려진 좌표를 가진 몇 가지 제어점이 있으며 변환에 대한 기초를 제공해야합니다. 따라서 id-s가 1, 2, 3 인 점의 좌표는 x1, y1이어야합니다. x2, y2; x3, y3. 간단한 이동 외에도 회전 및 배율 변환이있을 수 있습니다.

어떤 아이디어?


qgsAffine 플러그인을 사용해 보셨습니까? 비슷한 질문이 있습니다 : gis.stackexchange.com/questions/22691/how-to-georeference-a-dxf
Rayner

Affine 플러그인이 변환을 수행 할 수도 있지만이를 사용하려면 변환 매개 변수를 알아야합니다. 세 좌표에 대한 벡터 좌표와 해당 실제 좌표를 게시 할 수 있습니까? N.
nhopton

gdal_rasterize를 사용하여 shapefile을 tiff로 변환하고 tiff를 지리 참조한 다음 월드 파일에서 매개 변수를 추출 할 수 있습니까?
klewis

답변:


10

벡터 레이어를 지리 참조하려면 qgsAffine 플러그인을 사용해보십시오.

메뉴에서 qgsaffine어디에서 찾을 수 있습니까?에 대한 자세한 정보가 있습니까?


3
답변 감사합니다. 그런 다음 qgsAffine을 사용해야하고 transofrmation 매개 변수를 수동으로 파악해야합니다. 그 과정을 자동화 할 수있는 방법이 있기를 바랐습니다. 아마도 파이썬 코드를
작성해 보도록하겠습니다.

1
생각해 보면 GRASS v.transform (Sextante 툴킷에 있음)이 qgsAffine 플러그인보다 사용하기 쉽다는 것을 알 수 있습니다. N.
nhopton

1
그것의 모양으로 v.transform은 당신을 위해 합계를 할 것입니다, grass.osgeo.org/gdp/html_grass63/v.transform.html
nhopton

8

제어점이 있다는 사실을 감안할 때 Affine 변환을 사용하여 벡터 데이터를 이동할 수 있어야합니다. 이 레시피를 살펴보십시오 . 이 과정은 두 부분으로 이루어집니다.

  1. 제어점을 사용하여 필요한 아핀 함수의 계수를 정의하십시오
  2. 계수를 가져 와서 postgis의 ST_Affine ()에 적용하십시오.

제어점을 CSV 파일 (old_x, old_y, new_x, new_y)에 넣으면 링크에서 R 명령을 잘라 붙여 넣어 계수 부분을 해결할 수 있습니다.


7

QGIS 용 Vector Bender 플러그인을 권장합니다. 나는 그것을 시도하고 잘 작동하고 사용자 친화적입니다. 정의한 점 쌍의 양에 따라 다음 중 하나를 수행 할 수 있습니다.

  • 번역 : 시작점에서 끝점으로의 번역 (1 쌍)
  • 균일 : 변환, 스케일링 및 회전 (2 쌍)
  • 굽힘 : 추가 변형 (3 쌍 이상)

짧은 비디오를 여기에서 찾으면 플러그인을 설치 한 후 Vector Bender 도움말을 읽으십시오.


Vector bender 플러그인은 직관적이고 빠르게 작동 한다는 데 동의합니다 . 그러나 벡터 를 미러링 / 플립 할 수 없었습니다 . 이 작업에는 Affine 변환 플러그인 (QGIS v2.18)을 사용합니다.
jurajb


2

방금 그 일을해야하고 결국이 일을했습니다.

  1. shapefile을 래스터 화
  2. Georeferencer 플러그인을 사용하여 래스터 지리 참조
  3. GCP를 gcps.points파일 로 저장
  4. 이 파일을 사용하여 아핀 변환 계산
  5. qgsAffine을 사용하여 아핀 변환을 쉐이프 파일에 적용

다음 스크립트는 저장된 GCP를 사용하여 아핀 변환 행렬을 계산합니다.

# 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의 답변에 대한 의견에 이어 Sextante 도구 상자에서 실행할 수있는 GRASS v.transform을 사용하여 변환 매개 변수를 계산하고 벡터 레이어에 적용하여 아핀 변환을 수행 할 수 있습니다. 여기에 표시된 형식으로 제어점이 포함 된 텍스트 파일이 필요 합니다 .

사용하기 매우 쉽고 잘 작동합니다.


어쩌면 나는 나이가 들었지만 Arcview 3.0에서 ShapeWarp 사용자 애드온을 기억하는지 궁금합니다. 사용하기 쉬웠습니다. 나는 항상 다른 도구 (v.transform / affine)가 훨씬 더 번거 롭다는 것을 알았습니다. QGIS에서 ShapeWarp의 편의성을 재현하려고 시도하지 않았습니까?
Sharad

1

여기에 제공된 답변 중 일부는 더 이상 QGIS 3에 대한 옵션이 아니거나 지리 참조되는 벡터 파일의 선형 변환 만 허용합니다. 이것은 OP의 질문에 대답 할 수 있지만이 게시물을 보는 다른 사람들은 지리 참조 벡터 파일에 대한 다른 변환 옵션을 원할 수 있습니다.

지리 참조 벡터 파일에 대한 일부 솔루션 관련 문제 :

  • qgsAffine 플러그인은 선형 변환 만 허용합니다. 즉, 벡터 파일의 크기를 조정, 회전 및 이동할 수 있지만 벡터 파일을 구부리거나 뒤틀 수는 없습니다. 래스터 파일 용 지오 레퍼러는 더 많은 옵션을 제공하며 2 차 다항식 및 얇은 플레이트 스플라인을 포함한 다양한 변형을 허용합니다. 또한 qgsAffine 플러그인이 QGIS 3에서 여전히 사용 가능한 것으로 보이지 않습니다.

  • GRASS 모듈 v.transform은 qgsAffine 플러그인과 유사하며 선형 변환 만 허용합니다.

  • Vector Bender 플러그인은 좋은 옵션 인 것처럼 보이지만 QGIS 3으로 완전히 포팅되지 않았으므로 현재 옵션이 아닙니다. 더 이상 유지 관리되지 않는 것 같습니다.

HeikkiVesanto의 게시물에서 제안한 것처럼 ogr2ogr을 사용하는 것이 좋습니다. GCP (Ground Control Points)를 사용하고 원하는 변환 유형을 지정할 수 있습니다. 이 작업을 수행하는 방법에 대한 지침을 찾을 수 없으므로 아래에 지침을 포함 시켰습니다.

  1. 하나의 점은 지리 참조되지 않은 벡터 파일의 원래 위치이고 다른 점은 지리 참조 된 작업 공간의 원하는 위치 인 GCP 쌍 세트를 생성하십시오.

  2. GCP를 생성하는 다양한 방법이 있습니다. QGIS에서 Georeferencer GDAL 플러그인을 사용했습니다. 플러그인 관리자를 사용하여 설치 한 후 래스터 드롭 다운 메뉴에서 사용할 수 있습니다. 래스터 파일에서만 작동하므로 먼저 벡터 파일을 래스터 파일로 변환해야합니다. "Processing Toolbox : GDAL : 벡터 변환 : 래스터 화 (벡터에서 래스터로)"를 사용하면 가능합니다. 여전히 벡터 파일의 기능을 볼 수있는 해상도를 숫자로 설정하십시오.

  3. Georeferencer에는 멋진 GCP 포인트를 추가 할 수있는 멋진 인터페이스가 있습니다. 다른 변형을 테스트하고 가장 적합한 변형을 확인할 수도 있습니다. 그리고 잔차를 보면 GCP 포인트 중 오류가 있는지 확인할 수 있습니다. 모든 GCP 포인트를 추가하고 출력이 마음에 드는지 확인한 후 Georeferencer에서 GCP 파일을 내 보내서 원래 벡터 파일을 지리 참조하는 데 사용할 수 있습니다.

  4. GCP 파일은 다음 형식으로 변경해야합니다. 원하는만큼 GCP 포인트를 추가 할 수 있습니다. 각 GCP 포인트는 -gcp로 시작하고 공백으로 구분됩니다. 800 + GCP 포인트로 이것을 실행했으며 훌륭하게 작동했습니다.

    -gcp <ungeoref_x1> <ungeoref_y1> <georef_x1> <georef_y1> -gcp <ungeoref_x2> <ungeoref_y2> <georef_x2> <georef_y2>
  1. GCP 포인트를 올바른 형식으로 변경할 수있는 다양한 방법이 있습니다. CSV 파일로 Excel로 가져와 각 포인트에 맞는 형식을 출력하는 열을 만들었습니다. 그런 다음 해당 열을 TextEdit에 붙여 넣고 줄 끝을 공백으로 바꿨습니다.

  2. 지리 참조하려는 벡터 파일은 최종 지리 참조 된 파일에 대해 동일한 SRS를 사용하여 작업 영역으로 가져와야합니다. 작업 영역과 동일한 SRS 여야합니다. 원래 다른 SRS를 사용한 경우 원래 위치에서 멀어 질 수 있지만 변환을 통해 올바른 위치로 이동합니다.

  3. "Processing Toolbox : GDAL : Vector conversion : Convert format"을 통해 ogr2ogr에 액세스하십시오. 이를 통해 지리 참조하려는 벡터 파일과 출력 파일을 선택할 수 있습니다. "추가 생성 옵션"필드에서 원하는 변환 유형을 지정하는 명령을 추가 한 다음 모든 GCP 포인트가있는 선을 추가하십시오.

  4. 다른 변환 유형에 대한 명령은 다음과 같습니다.

    • 선형의 경우 "순서 1"
    • 2 차 다항식의 "차수 2"
    • 3 차 다항식의 "-차수 3"
    • 박판 스플라인의 경우 "-tps".
  5. 예를 들어 "추가 생성 옵션"필드에 추가 된 코드는 다음과 같습니다.

-order 2 -gcp <ungeoref_x1> <ungeoref_y1> <georef_x1> <georef_y1> -gcp <ungeoref_x2> <ungeoref_y2> <georef_x2> <georef_y2>
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.