GDAL 라이브러리를 사용하고 있습니다. 현재, 왼쪽 상단 점과 오른쪽 상단 점을 가져 와서 원본 이미지를 칩에 넣을 수 있습니다. 제가 지금하고 싶은 것은 두 개의 WKT 포인트를 가져 와서 같은 것을하기 위해 X, Y 좌표로 변환하는 것입니다. 내가 GeoTransform을 알고 있고 그것을 사용하고있는 좌표계 (WGS84)가 있다면 이것을 수행 할 수 있는지 궁금합니다.GeoTiff가있는 경우 GeoTransform을 사용하여 위도/경도를 X, Y로 변환 할 수 있습니까?
답변
일부 샘플 위도/경도를 계산하기 위해 이미지에 대해 아핀 변환을 사용했습니다. 이미지가 North Facing 인 경우 geoTransform [2] 및 geTransform [4]가 위도/경도를 계산할 때 제로화되어야합니다.
x = (int)Math.Abs(Math.Round((Latitude - geotransform[0])/geotransform[1]));
y = (int)Math.Abs(Math.Round((Longitude - geotransform[3])/geotransform[5]));
당신이 그것을 무력하고 싶었다면, 다음을 할 수있는 (내가 이런 짓을하며 일을하지만 이것은 단지 의사입니다) :
//Get the Pixel for the length and width, this portion is for the full image
pixelXSize = AbsoluteValue((latitudeAt(Zero)-(latitudeAt(Length)-1))/imageLength);
pixelYSize = AbsoluteValue((longitudeAt(Zero)-(LongitudeAt(Width)-1))/imageWidth);
//Calculate the x,y conversion for the points you want to calculate
x = AbsoluteValue((latitudeToConvert-latitudeAt(Zero))/pixelXSize);
y = AbsoluteValue((longitudeToConvert-longitudteAt(Zero))/pixelYSize);
이 답변 한으로 해제 할 수있다 또는 두 픽셀. geotransform을 사용하는 경우 North Facing 변수가 반환되는 답변을 엉망으로 만들 수 있습니다. 지금까지는 북쪽을 향한 이미지 만 테스트했습니다.
여기 내 질문은 북쪽을 향하지 않는 이미지를 다루는 방법 일 것이라고 생각합니다. – avtoader
나는 이것도 전에 만났고 여기서는 좌표 변환을 수행 할 수있는 좋은 방법이 있습니다. GDAL documentation에서
참고 GDALDataset :: GetProjectionRef() 아핀 지리 참조하여 암시 지리 좌표 GDALDataset :: GetGeoTransform()에 의해 리턴 변환 기술에 의해 반환
좌표계.
OGRCoordinateTransformation과 함께 사용하면 변환 작업을 수행 할 수 있습니다.
는 기본적으로 코드는 다음과 같이 표시됩니다 당신은 위도/경도 및 픽셀 좌표 사이의 변환을 수있는 방법// Load up some dataset.
dataset = (GDALDataset *) GDALOpen(mapfile, GA_ReadOnly);
// Define Geographic coordinate system - set it to WGS84.
OGRSpatialReference *poSRS_Geog = new OGRSpatialReference();
poSRS_Geog->importFromEPSG(4326); // WGS84
// Define Projected coordinate system - set to the GeoTransform.
const char *sProj = dataset->GetProjectionRef();
OGRSpatialReference *poSRS_Proj = new OGRSpatialReference(sProj);
// Set up the coordinate transform (geographic-to-projected).
OGRCoordinateTransformation *poCT_Geog2Proj;
poCT_Geog2Proj = OGRCreateCoordinateTransformation(poSRS_Geog, poSRS_Proj);
// Now everything is set up and we set transforming coordinates!
// Pass Lon/Lat coordinates to the Transform function:
double x = lon;
double y = lat;
poCT_Geog2Proj->Transform(1, &x, &y);
// Now x and y variables will contain the X/Y pixel coordinates.
. 배열을 Transform()
과 함께 사용하고 여러 좌표를 함께 변환 할 수 있습니다. 첫 번째 인수는 변환 할 좌표 쌍의 수이고 두 번째 및 세 번째 인수는 x 및 y에 대한 포인터입니다. 나는 여기서 한쌍을 변형시킨다.
// Set up the coordinate transform (projected-to-geographic).
OGRCoordinateTransformation *poCT_Proj2Geog;
poCT_Proj2Geog = OGRCreateCoordinateTransformation(poSRS_Proj, poSRS_Geog);
을 나는이 방법을 사용합니다 : 4326
추가 정보해야 롱/위도를 들어
을 : 그것은 동등하게 쉽게
참고 역변환을 설정하는 I 현재 GeoTransform을 사용하여 X, Y를 위도/경도로 변환 할 수 있습니다. – avtoader