Сегодня столкнулся с тем, что привязывая карту в QLandkarteGT, получаю такую ошибку:
/usr/bin/gdal_translate -a_srs +proj=merc +a=6378245.0000 +b=6356863.0188 +towgs84=24,-123,-94,-0.02,0.25,0.13,1.1,0 +units=m +no_defs -gcp 108 182 inf inf -gcp 3310 189 inf inf -gcp 3308 3126 inf inf -gcp 93 3119 inf inf -gcp 1704 1657 inf inf /home/hatred/maps/1/src/K-53-26-view-raw.tiff /tmp/qt_temp.B12852
Input file size is 3402, 3428
0...10...20...30...40...50...60...70...80...90...100 - done.
/usr/bin/gdalwarp -order 1 -r cubic -dstnodata "255" /tmp/qt_temp.B12852 /tmp/qt_temp.u12852
ERROR 1: Attempt to create -2147483648x-2147483648 dataset is illegal,sizes must be larger than zero.
Creating output file that is -2147483648P x -2147483648L.
Неудачно!
Сначала было подумал, что поломано в SVN версии, однако, в релизной 1.2.4 ситуация точно такая же.
Сразу и сходу смутили параметры inf
в опции -gcp
. Так что решил поглядеть в коде, благо собираю из SVN и он у меня всегда под рукой.
Немного времени, расстановка логов, анализ привели к тому что обнаружилось двойное преобразование координат в функции
bool GPS_Math_Str_To_LongLat(const QString& str, float& lon, float& lat, const QString& srcproj, const QString& tarproj)
в файле GeoMath.cpp
Первое преобразование было в блоке кода:
if(GPS_Math_Str_To_Deg(str, lon, lat,true))
{
if(pjTar)
{
u = lon * DEG_TO_RAD;
v = lat * DEG_TO_RAD;
pj_transform(pjSrc,pjTar,1,0,&u,&v,0);
}
}
else
а второе преобразование в следующем блоке кода:
if(pjTar && pjSrc)
{
pj_transform(pjSrc,pjTar,1,0,&u,&v,0);
}
Беглый анализ привёл к мысли, что производился редизайн кода, оптимизация и убирание дублирующихся блоков кода, в результате просто недосмотрели одно место.
Сменил первый блок на такой:
if(GPS_Math_Str_To_Deg(str, lon, lat,true))
{
u = lon * DEG_TO_RAD;
v = lat * DEG_TO_RAD;
}
else
пересобрал и всё заработало отлично и замечательно.
UPD: а теперь всё то же самое, но в виде патча:
Index: src/GeoMath.cpp
===================================================================
--- src/GeoMath.cpp (revision 3010)
@@ -392,12 +392,8 @@
if(GPS_Math_Str_To_Deg(str, lon, lat,true))
{
- if(pjTar)
- {
- u = lon * DEG_TO_RAD;
- v = lat * DEG_TO_RAD;
- pj_transform(pjSrc,pjTar,1,0,&u,&v,0);
- }
+ u = lon * DEG_TO_RAD;
+ v = lat * DEG_TO_RAD;
}
else
{
PS автору письмо отправлено