지리 참조되어야하는 지리 참조되지 않은 벡터 레이어가 있습니다. 래스터 레이어를 사용하면 작업이 쉽고 간단하지만 벡터 레이어로 무엇을해야할지 모르겠습니다. 알려진 좌표를 가진 몇 가지 제어점이 있으며 변환에 대한 기초를 제공해야합니다. 따라서 id-s가 1, 2, 3 인 점의 좌표는 x1, y1이어야합니다. x2, y2; x3, y3. 간단한 이동 외에도 회전 및 배율 변환이있을 수 있습니다.
어떤 아이디어?
지리 참조되어야하는 지리 참조되지 않은 벡터 레이어가 있습니다. 래스터 레이어를 사용하면 작업이 쉽고 간단하지만 벡터 레이어로 무엇을해야할지 모르겠습니다. 알려진 좌표를 가진 몇 가지 제어점이 있으며 변환에 대한 기초를 제공해야합니다. 따라서 id-s가 1, 2, 3 인 점의 좌표는 x1, y1이어야합니다. x2, y2; x3, y3. 간단한 이동 외에도 회전 및 배율 변환이있을 수 있습니다.
어떤 아이디어?
답변:
벡터 레이어를 지리 참조하려면 qgsAffine 플러그인을 사용해보십시오.
메뉴에서 qgsaffine 을 어디에서 찾을 수 있습니까?에 대한 자세한 정보가 있습니까?
QGIS 용 Vector Bender 플러그인을 권장합니다. 나는 그것을 시도하고 잘 작동하고 사용자 친화적입니다. 정의한 점 쌍의 양에 따라 다음 중 하나를 수행 할 수 있습니다.
짧은 비디오를 여기에서 찾으면 플러그인을 설치 한 후 Vector Bender 도움말을 읽으십시오.
GDAL 1.10이 출시되면서 이제 가능합니다.
ogr2ogr에서 기본 변환을 수행하고 -gcp 태그에 제어점을 제공하여 수행됩니다. http://www.gdal.org/ogr2ogr.html
가이드는 http://gisforthought.com/georeferencing-vector-data-using-qgis-and-ogr2ogr/ 를 참조하십시오.
방금 그 일을해야하고 결국이 일을했습니다.
gcps.points
파일 로 저장다음 스크립트는 저장된 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
보기 내 대답 에 두 개의 다각형 함께 스냅을 하고 무료 openjump에게 시험을 제공합니다.
나는 아핀 변환이 qgis 아핀 플러그인보다 훨씬 사용자 친화적이라고 생각합니다.
Rayner의 답변에 대한 의견에 이어 Sextante 도구 상자에서 실행할 수있는 GRASS v.transform을 사용하여 변환 매개 변수를 계산하고 벡터 레이어에 적용하여 아핀 변환을 수행 할 수 있습니다. 여기에 표시된 형식으로 제어점이 포함 된 텍스트 파일이 필요 합니다 .
사용하기 매우 쉽고 잘 작동합니다.
여기에 제공된 답변 중 일부는 더 이상 QGIS 3에 대한 옵션이 아니거나 지리 참조되는 벡터 파일의 선형 변환 만 허용합니다. 이것은 OP의 질문에 대답 할 수 있지만이 게시물을 보는 다른 사람들은 지리 참조 벡터 파일에 대한 다른 변환 옵션을 원할 수 있습니다.
지리 참조 벡터 파일에 대한 일부 솔루션 관련 문제 :
qgsAffine 플러그인은 선형 변환 만 허용합니다. 즉, 벡터 파일의 크기를 조정, 회전 및 이동할 수 있지만 벡터 파일을 구부리거나 뒤틀 수는 없습니다. 래스터 파일 용 지오 레퍼러는 더 많은 옵션을 제공하며 2 차 다항식 및 얇은 플레이트 스플라인을 포함한 다양한 변형을 허용합니다. 또한 qgsAffine 플러그인이 QGIS 3에서 여전히 사용 가능한 것으로 보이지 않습니다.
GRASS 모듈 v.transform은 qgsAffine 플러그인과 유사하며 선형 변환 만 허용합니다.
Vector Bender 플러그인은 좋은 옵션 인 것처럼 보이지만 QGIS 3으로 완전히 포팅되지 않았으므로 현재 옵션이 아닙니다. 더 이상 유지 관리되지 않는 것 같습니다.
HeikkiVesanto의 게시물에서 제안한 것처럼 ogr2ogr을 사용하는 것이 좋습니다. GCP (Ground Control Points)를 사용하고 원하는 변환 유형을 지정할 수 있습니다. 이 작업을 수행하는 방법에 대한 지침을 찾을 수 없으므로 아래에 지침을 포함 시켰습니다.
하나의 점은 지리 참조되지 않은 벡터 파일의 원래 위치이고 다른 점은 지리 참조 된 작업 공간의 원하는 위치 인 GCP 쌍 세트를 생성하십시오.
GCP를 생성하는 다양한 방법이 있습니다. QGIS에서 Georeferencer GDAL 플러그인을 사용했습니다. 플러그인 관리자를 사용하여 설치 한 후 래스터 드롭 다운 메뉴에서 사용할 수 있습니다. 래스터 파일에서만 작동하므로 먼저 벡터 파일을 래스터 파일로 변환해야합니다. "Processing Toolbox : GDAL : 벡터 변환 : 래스터 화 (벡터에서 래스터로)"를 사용하면 가능합니다. 여전히 벡터 파일의 기능을 볼 수있는 해상도를 숫자로 설정하십시오.
Georeferencer에는 멋진 GCP 포인트를 추가 할 수있는 멋진 인터페이스가 있습니다. 다른 변형을 테스트하고 가장 적합한 변형을 확인할 수도 있습니다. 그리고 잔차를 보면 GCP 포인트 중 오류가 있는지 확인할 수 있습니다. 모든 GCP 포인트를 추가하고 출력이 마음에 드는지 확인한 후 Georeferencer에서 GCP 파일을 내 보내서 원래 벡터 파일을 지리 참조하는 데 사용할 수 있습니다.
GCP 파일은 다음 형식으로 변경해야합니다. 원하는만큼 GCP 포인트를 추가 할 수 있습니다. 각 GCP 포인트는 -gcp로 시작하고 공백으로 구분됩니다. 800 + GCP 포인트로 이것을 실행했으며 훌륭하게 작동했습니다.
-gcp <ungeoref_x1> <ungeoref_y1> <georef_x1> <georef_y1> -gcp <ungeoref_x2> <ungeoref_y2> <georef_x2> <georef_y2>
GCP 포인트를 올바른 형식으로 변경할 수있는 다양한 방법이 있습니다. CSV 파일로 Excel로 가져와 각 포인트에 맞는 형식을 출력하는 열을 만들었습니다. 그런 다음 해당 열을 TextEdit에 붙여 넣고 줄 끝을 공백으로 바꿨습니다.
지리 참조하려는 벡터 파일은 최종 지리 참조 된 파일에 대해 동일한 SRS를 사용하여 작업 영역으로 가져와야합니다. 작업 영역과 동일한 SRS 여야합니다. 원래 다른 SRS를 사용한 경우 원래 위치에서 멀어 질 수 있지만 변환을 통해 올바른 위치로 이동합니다.
"Processing Toolbox : GDAL : Vector conversion : Convert format"을 통해 ogr2ogr에 액세스하십시오. 이를 통해 지리 참조하려는 벡터 파일과 출력 파일을 선택할 수 있습니다. "추가 생성 옵션"필드에서 원하는 변환 유형을 지정하는 명령을 추가 한 다음 모든 GCP 포인트가있는 선을 추가하십시오.
다른 변환 유형에 대한 명령은 다음과 같습니다.
예를 들어 "추가 생성 옵션"필드에 추가 된 코드는 다음과 같습니다.
-order 2 -gcp <ungeoref_x1> <ungeoref_y1> <georef_x1> <georef_y1> -gcp <ungeoref_x2> <ungeoref_y2> <georef_x2> <georef_y2>