Привязать tiff по 4 точкам?

Serpuh
Новоприбывший
Сообщения: 11
Зарегистрирован: 27 авг 2017, 14:46
Репутация: 0
Откуда: Москва

Привязать tiff по 4 точкам?

Сообщение Serpuh » 28 авг 2017, 12:54

Сам в геодезии новичок, не пинайте сильно. Имеется ортофото tiff, известны координаты углов картинки, нужно получить geoTiff. Код понятно неполный, что еще нужно добавить? Поиском примерчик не ищется.

Код: Выделить всё

string  pszFilename("Scene_dense_mesh_texture_orthomap.tif");
GDALDataset  *poDataset;
GDALAllRegister();

poDataset = (GDALDataset *)GDALOpen(pszFilename.c_str(), GA_Update);

double BottomLeftX = 590000.000;
double BottomLeftY = 4914000.000;
double TopLeftX = 590000.000;
double TopLeftY = 4928000.000;

double BottomRightX = 609000.000;
double BottomRightY = 4914000.000;
double TopRightX = 609000.000;
double TopRightY = 4928000.000;

double PicWidth = 1, PicHeight = 1;
double MapWidth = abs(TopRightX - BottomLeftX);
double MapHeight = abs(TopRightY - BottomLeftY);
double WidthResolution = MapWidth / PicWidth;
double HeightResolution = (-1) * MapHeight / PicHeight;

double adfGeoTransform[6] = { TopLeftX, WidthResolution, 0, TopLeftY, 0, HeightResolution };
GDALSetGeoTransform(poDataset, adfGeoTransform);
И еще вопрос, указание большого количества GCP какой имеет смысл? Высота данной точки или более точное позиционирование карты?

Игорь Белов
Гуру
Сообщения: 1631
Зарегистрирован: 04 янв 2011, 22:00
Статьи: 12
Проекты: 1
Репутация: 1013
Откуда: Казань

Re: Привязать tiff по 4 точкам?

Сообщение Игорь Белов » 28 авг 2017, 15:45

  • Ортофото в формате tiff и при этом не GeoTIFF? Странно… Проверьте утилитой gdalinfo.
  • Если это ортофото, и координаты углов известны (и Вы ими довольны), GCP не нужны. Совсем.
  • Код странен в том месте, где размеры растра в пикселях PicWidth, PicHeight приравниваются единицам.
А так задача превращения «чистого» TIFF в GeoTIFF решается утилитой GDAL gdal_edit:

Код: Выделить всё

gdal_edit.py -a_srs EPSG:32637 -a_ullr 590000 4928000 609000 4914000 -a_nodata 0 orthophoto.tiff
Вместо EPSG:32637 подставляете свою систему координат. Определение пустых значений nodata тоже можно изменить или совсем опустить.

Serpuh
Новоприбывший
Сообщения: 11
Зарегистрирован: 27 авг 2017, 14:46
Репутация: 0
Откуда: Москва

Re: Привязать tiff по 4 точкам?

Сообщение Serpuh » 29 авг 2017, 13:55

Игорь Белов писал(а):
28 авг 2017, 15:45
Ортофото в формате tiff и при этом не GeoTIFF? Странно… Проверьте утилитой gdalinfo.
Это ортофото получено из 3D модели местности, так называемое Structure From Motion из фотографий, на 1-ой картинке модель, на второй ортофото из модели.
http://s019.radikal.ru/i608/1706/78/94068a88216c.jpg
http://s019.radikal.ru/i615/1708/ab/40278c00dec8.jpg
Яндекс-карты https://yandex.ru/maps/?ll=37.066042%2C ... =sat%2Cskl
Игорь Белов писал(а):
28 авг 2017, 15:45
Код странен в том месте, где размеры растра в пикселях PicWidth, PicHeight приравниваются единицам.
Это я взял пример из соседней темы, там скорее не PicWidth, а PixelWidth, сколько пикселей брать за 1.

А код вроде такого получается, единственно для dstDataset надо указать SetProjectionв виде строки, просто "WGS84" она не хочет принимать, ругается Only OGC WKT Projections supported for writing to GeoTIFF. Не подскажете что нужно в строку "WGS84" дописать?

Код: Выделить всё

string  pszFilename("Scene_dense_mesh_texture_orthomap.tif");
GDALDataset  *poSrcDS;
GDALAllRegister();
poSrcDS = (GDALDataset *)GDALOpen(pszFilename.c_str(), GA_ReadOnly);

const char *pszFormat = "GTiff";
GDALDriver *poDriver;
GDALDataset *dstDataset;
GDALAllRegister();
poDriver = GetGDALDriverManager()->GetDriverByName(pszFormat);

dstDataset = poDriver->CreateCopy("Scene_dense_mesh_texture_orthomap_gdal.tif", poSrcDS, false, NULL, NULL, NULL);
GDALSetGeoTransform(dstDataset, adfGeoTransform);

trir
Гуру
Сообщения: 3753
Зарегистрирован: 09 апр 2010, 19:30
Статьи: 1
Репутация: 633
Ваше звание: просто мимо прохожу
Откуда: Ё-бург

Re: Привязать tiff по 4 точкам?

Сообщение trir » 29 авг 2017, 14:09

Не подскажете что нужно в строку "WGS84" дописать?
очевидно, что WKT

Игорь Белов
Гуру
Сообщения: 1631
Зарегистрирован: 04 янв 2011, 22:00
Статьи: 12
Проекты: 1
Репутация: 1013
Откуда: Казань

Re: Привязать tiff по 4 точкам?

Сообщение Игорь Белов » 29 авг 2017, 14:54

Координаты в исходных кодах не из географической SRS.

Serpuh
Новоприбывший
Сообщения: 11
Зарегистрирован: 27 авг 2017, 14:46
Репутация: 0
Откуда: Москва

Re: Привязать tiff по 4 точкам?

Сообщение Serpuh » 29 авг 2017, 15:12

Игорь Белов писал(а):
29 авг 2017, 14:54
Координаты в исходных кодах не из географической SRS.
В примере я произвольные координаты взял.

Вот мои координаты извлеченные из EXIF снимка
altitude, longitude, altitude
55.3757817 36.7575927 279.977

конвертированные в UTM
357913.06101513183 6138897.8485694192 279.977

конвертированные в ECEF
2910190.4983356106 2173743.0705133779 5225496.7346124556

Не подскажете в случае WGS84 в каком формате надо передавать?

gamm
Гуру
Сообщения: 2733
Зарегистрирован: 15 окт 2010, 08:33
Репутация: 604
Ваше звание: программист
Откуда: Казань

Re: Привязать tiff по 4 точкам?

Сообщение gamm » 29 авг 2017, 16:11

Serpuh писал(а):
29 авг 2017, 15:12
Вот мои координаты извлеченные из EXIF снимка
координаты чего?
Не подскажете в случае WGS84 в каком формате надо передавать?
ни в каком, поскольку вам это не нужно (хотя и допустимо, если снимок очень маленький). Если вы хотите получить геотиф, вам нужно узнать координаты углов, пересчитать их в проекцию, и занести эти 4 точки способом, который вам указали. Координат одной точки (непонятно какой) мало, нужна ориентация снимка относительно Земли, чтобы получить координаты углов.

Serpuh
Новоприбывший
Сообщения: 11
Зарегистрирован: 27 авг 2017, 14:46
Репутация: 0
Откуда: Москва

Re: Привязать tiff по 4 точкам?

Сообщение Serpuh » 29 авг 2017, 16:27

gamm писал(а):
29 авг 2017, 16:11

координаты чего?
Это я привел координату одного угла в разных доступных мне форматах, остальные углы тоже есть и ортофото соориентированно относительно Земли.
В случае WGS84 координаты углов в UTM формате надо передавать?

Игорь Белов
Гуру
Сообщения: 1631
Зарегистрирован: 04 янв 2011, 22:00
Статьи: 12
Проекты: 1
Репутация: 1013
Откуда: Казань

Re: Привязать tiff по 4 точкам?

Сообщение Игорь Белов » 29 авг 2017, 16:58

Зачем нужны координаты в разных системах? Это бесполезная куча мусора. GeoTIFF хранит привязку в своей родной, единственной, той, в которой соседние пикселы в строке отличаются на (разрешение-по-X, 0), а соседние пикселы в колонке на (0, разрешение-по-Y).
Последний раз редактировалось Игорь Белов 29 авг 2017, 16:59, всего редактировалось 1 раз.

gamm
Гуру
Сообщения: 2733
Зарегистрирован: 15 окт 2010, 08:33
Репутация: 604
Ваше звание: программист
Откуда: Казань

Re: Привязать tiff по 4 точкам?

Сообщение gamm » 29 авг 2017, 16:58

Serpuh писал(а):
29 авг 2017, 16:27
В случае WGS84 координаты углов в UTM формате надо передавать?
WGS84 (градусы) и UTM (поперечный Меркатор) - это разные проекции. Вам нужен UTM с правильной зоной. Почитайте про проекции, остальное вам уже подсказали.

gamm
Гуру
Сообщения: 2733
Зарегистрирован: 15 окт 2010, 08:33
Репутация: 604
Ваше звание: программист
Откуда: Казань

Re: Привязать tiff по 4 точкам?

Сообщение gamm » 29 авг 2017, 17:03

Игорь Белов писал(а):
29 авг 2017, 16:58
Зачем нужны координаты в разных системах? GeoTIFF хранит привязку в своей родной, единственной, той, в которой соседние пикселы в строке отличаются на (разрешение-по-X, 0), а соседние пикселы в колонке на (0, разрешение-по-Y).
насколько я помню, там еще аффинка сидит

Код: Выделить всё

The affine transform consists of six coefficients returned by GDALDataset::GetGeoTransform() which map pixel/line coordinates into georeferenced space using the following relationship:

    Xgeo = GT(0) + Xpixel*GT(1) + Yline*GT(2)
    Ygeo = GT(3) + Xpixel*GT(4) + Yline*GT(5)

Serpuh
Новоприбывший
Сообщения: 11
Зарегистрирован: 27 авг 2017, 14:46
Репутация: 0
Откуда: Москва

Re: Привязать tiff по 4 точкам?

Сообщение Serpuh » 29 авг 2017, 17:22

gamm писал(а):
29 авг 2017, 16:58
WGS84 (градусы) и UTM (поперечный Меркатор) - это разные проекции. Вам нужен UTM с правильной зоной. Почитайте про проекции, остальное вам уже подсказали.
Хм, не совсем понятно, вот информация через gdalinfo из рабочего GeoTiff, GEOGCS указано как WGS 84, а Origin и координаты углов передаются в UTM.

Size is 6500, 6523
Coordinate System is:
PROJCS["WGS 84 / UTM zone 37N",
GEOGCS["WGS 84",
DATUM["WGS_1984",
SPHEROID["WGS 84",6378137,298.257223563,
AUTHORITY["EPSG","7030"]],
AUTHORITY["EPSG","6326"]],
PRIMEM["Greenwich",0],
UNIT["degree",0.0174532925199433],
AUTHORITY["EPSG","4326"]],
PROJECTION["Transverse_Mercator"],
PARAMETER["latitude_of_origin",0],
PARAMETER["central_meridian",39],
PARAMETER["scale_factor",0.9996],
PARAMETER["false_easting",500000],
PARAMETER["false_northing",0],
UNIT["metre",1,
AUTHORITY["EPSG","9001"]],
AUTHORITY["EPSG","32637"]]
Origin = (369309.708602999980000,6127338.125730000400000)
Pixel Size = (0.049995387076929,-0.049999523225577)
Metadata:
AREA_OR_POINT=Area
Image Structure Metadata:
COMPRESSION=DEFLATE
INTERLEAVE=PIXEL
Corner Coordinates:
Upper Left ( 369309.709, 6127338.126) ( 36d56'33.73"E, 55d16'30.50"N)
Lower Left ( 369309.709, 6127011.979) ( 36d56'34.28"E, 55d16'19.96"N)
Upper Right ( 369634.679, 6127338.126) ( 36d56'52.14"E, 55d16'30.81"N)
Lower Right ( 369634.679, 6127011.979) ( 36d56'52.68"E, 55d16'20.27"N)
Center ( 369472.194, 6127175.052) ( 36d56'43.21"E, 55d16'25.38"N)

Игорь Белов
Гуру
Сообщения: 1631
Зарегистрирован: 04 янв 2011, 22:00
Статьи: 12
Проекты: 1
Репутация: 1013
Откуда: Казань

Re: Привязать tiff по 4 точкам?

Сообщение Игорь Белов » 29 авг 2017, 17:42

Ну и что же тут непонятного? Русским по белому написано:
"WGS 84 / UTM zone 37N"
т. е. та самая EPSG:32637. И координаты BBox:
Upper Left ( 369309.709, 6127338.126)
Lower Right ( 369634.679, 6127011.979)

Serpuh
Новоприбывший
Сообщения: 11
Зарегистрирован: 27 авг 2017, 14:46
Репутация: 0
Откуда: Москва

Re: Привязать tiff по 4 точкам?

Сообщение Serpuh » 29 авг 2017, 18:01

Игорь Белов писал(а):
29 авг 2017, 17:42
Ну и что же тут непонятного? Русским по белому написано:
Товарищ gamm 3 постами выше написал WGS84 (градусы) и UTM (поперечный Меркатор) - это разные проекции. Т.е. получается указываешь GEOGCS как WGS 84, а координаты передаешь в UTM. Это и не понятно.

Игорь Белов
Гуру
Сообщения: 1631
Зарегистрирован: 04 янв 2011, 22:00
Статьи: 12
Проекты: 1
Репутация: 1013
Откуда: Казань

Re: Привязать tiff по 4 точкам?

Сообщение Игорь Белов » 29 авг 2017, 18:10

Всё определение говорит, что это UTM. И название тоже: "WGS 84 / UTM zone 37N" означает
"датум WGS 84 / проекция UTM zone 37N"
А географическая система координат WGS 84 здесь ни при чём.

Ответить

Вернуться в «GDAL/OGR»

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 1 гость