Перепроецирование растра на основе файла проекций mapinfo
-
- Участник
- Сообщения: 52
- Зарегистрирован: 12 май 2010, 23:22
- Репутация: 0
Перепроецирование растра на основе файла проекций mapinfo
Имеется растр (.tif) и .tab файл, и конечно файл проекций .prj. Я хочу:
- перепроецировать растр из исходной системы координат в меркатор;
- записать параметры cs2cs, чтобы я мог пересчитывать координаты вершин из одной системы в другую.
Короче, вопрос наверно превращается в "Можно ли записать параметры из файла .prj в cs2cs?"
Мне не понятно, когда я открываю .tab файл, в какой системе оказывается изображение на экране, в той, которая указана в .tab файле?
- перепроецировать растр из исходной системы координат в меркатор;
- записать параметры cs2cs, чтобы я мог пересчитывать координаты вершин из одной системы в другую.
Короче, вопрос наверно превращается в "Можно ли записать параметры из файла .prj в cs2cs?"
Мне не понятно, когда я открываю .tab файл, в какой системе оказывается изображение на экране, в той, которая указана в .tab файле?
-
- Гуру
- Сообщения: 3058
- Зарегистрирован: 19 май 2010, 19:44
- Репутация: 189
Re: Перепроецирование растра на основе файла проекций mapinf
Типичный образец записи tab для растрового файла (созданного на основе world-файла):
!table
!version 300
!charset WindowsCyrillic
Definition Table
File "x-26-21-x.png"
Type "RASTER"
(1551876.3834994766,6679737.363402077) (0,0) Label "Точка 1",
(1565754.9201250768,6680430.2302888567) (6558,0) Label "Точка 2",
(1552343.7886698199,6670374.9593106396) (0,4424) Label "Точка 3"
CoordSys Earth Projection 8, 1001, "m", хххххх, ууууууу, 1, aaaaaaa, 0
Units "m"
RasterStyle 4 1
RasterStyle 7 16777215
, где x,y,a - ваши значения для проекции Гаусса-Крюгера...
согласно этим параметрам изображение отображается на экране....
!table
!version 300
!charset WindowsCyrillic
Definition Table
File "x-26-21-x.png"
Type "RASTER"
(1551876.3834994766,6679737.363402077) (0,0) Label "Точка 1",
(1565754.9201250768,6680430.2302888567) (6558,0) Label "Точка 2",
(1552343.7886698199,6670374.9593106396) (0,4424) Label "Точка 3"
CoordSys Earth Projection 8, 1001, "m", хххххх, ууууууу, 1, aaaaaaa, 0
Units "m"
RasterStyle 4 1
RasterStyle 7 16777215
, где x,y,a - ваши значения для проекции Гаусса-Крюгера...
согласно этим параметрам изображение отображается на экране....
-
- Гуру
- Сообщения: 4231
- Зарегистрирован: 10 апр 2006, 22:34
- Репутация: -344969098
- Откуда: Париж
Re: Перепроецирование растра на основе файла проекций mapinf
На часть "..." вам ответили, так что на оставшееся. Растр открывается:special K писал(а):...
Мне не понятно, когда я открываю .tab файл, в какой системе оказывается изображение на экране, в той, которая указана в .tab файле?
а) в системе координат окна, если оно уже было открыто ДО открытия присоединяемого растра, и в свойствах окна стоит "перепроецировать растр в СК окна".
б) в СК растра, если раст - первый слой нового окна (см. п. в как один из вариантов).
в) если НЕ стоит "перепроецировать растр в СК окна", имеется растр, который занимает большую площадь в текущем окне, чем остальные растры, даже если он скрыт из-за автомасштаба, - тогда автоматически будет выполнена трансформация содержимого окна так, что бы границы окна были параллельны границам растра. В свойствах окна такая СК будет иметь то же название, что СК, установленная в растре, но ОНА ею НЕ будет.
-
- Гуру
- Сообщения: 4231
- Зарегистрирован: 10 апр 2006, 22:34
- Репутация: -344969098
- Откуда: Париж
Re: Перепроецирование растра на основе файла проекций mapinf
Небольшое дополнение:
а) GDAL понимает точки привязки и координатную систему растра формата TAB, хотя тут http://www.gdal.org/frmt_gtiff.html указано, что
Тем не менее, gdalinfo берет СК из TAB файла, причем читает ее именно как она задана в MapInfo, поскольку вставляет строку
б) Это приводит к тому, что при перепроецировании с помощью
исходную СК задавать не надо. С такими параметрами создается и TFW-файл, и теги GeoTIFF. Результат listgeo 2_g.tif ради экономии места приводить не буду, но он прописан именно как UTM37N. Прописанное понято MapInfo, т.к. она не задает вопросов о СК при открытии. Разница в растрах, открытых в одном окне в MapInfo, составила менее 0,5 метра.
в) для получения строки параметров cs2cs, проще всего перевести TAB файл, созданный в проекции растра, в SHP файл, в конечной проекции, с помощью ogr2ogr - тогда выходной PRJ файл с параметрами выходной СК будет создан автоматически. Или скопировать блок PROJCS из вывода программы gdalinfo в текстовый файл.
---
г) Global Mapper понимает TAB, а при выводе в TIF и создает его.
а) GDAL понимает точки привязки и координатную систему растра формата TAB, хотя тут http://www.gdal.org/frmt_gtiff.html указано, что
- что систему координат (СК) из TAB файла, он не использует.If no georeferencing information is available in the TIFF file itself, GDAL will also check for, and use an ESRI world file with the extention .tfw, .tifw/.tiffw or .wld, as well as a MapInfo .tab file (only control points used, Coordsys ignored).
Тем не менее, gdalinfo берет СК из TAB файла, причем читает ее именно как она задана в MapInfo, поскольку вставляет строку
что соответствует только MapInfo (см. http://gis-lab.info/qa/datum-transform-sets.html)Coordinate System is:
PROJCS["unnamed",
GEOGCS["unnamed",
DATUM["Pulkovo_1942",
SPHEROID["Krassovsky",6378245,298.3],
TOWGS84[24,-123,-94,0.02,-0.25,-0.13,1.1]],
PRIMEM["Greenwich",0],
UNIT["degree",0.0174532925199433]],
PROJECTION["Transverse_Mercator"],
б) Это приводит к тому, что при перепроецировании с помощью
Код: Выделить всё
gdalwarp -co TFW=YES -co COMPRESS=LZW -overwrite -r near -t_srs EPSG:32637 2.tif 2_g.tif
в) для получения строки параметров cs2cs, проще всего перевести TAB файл, созданный в проекции растра, в SHP файл, в конечной проекции, с помощью ogr2ogr - тогда выходной PRJ файл с параметрами выходной СК будет создан автоматически. Или скопировать блок PROJCS из вывода программы gdalinfo в текстовый файл.

---
г) Global Mapper понимает TAB, а при выводе в TIF и создает его.
- Institor
- Активный участник
- Сообщения: 243
- Зарегистрирован: 22 апр 2011, 08:10
- Репутация: 27
- Откуда: Хабаровск
Re: Перепроецирование растра на основе файла проекций mapinf
Подниму тему.
Имеется много (несколько тысяч) растровых планшетов. Система координат местная - задана аффинным преобразованием СК-42. Параметры известны, в mapinfo все открывается и работает.
В файле привязки строчка примерно такая:
В общем, задано аффинное преобразование (+границы карты - последние 4 числа).
Нужно перевести эти координаты во что-то более общепринятое, например, ту же СК-42 (отменить аффинное).
Вручную в mapinfo в диалоге "таблица-растр-привязка" это делается, но файлов несколько тысяч...
GDAL такое не понимает, как видно (на выходе gdalinfo Coordinate System is ' ' - пустая строка).
Как бы это средствами mapinfo сделать? Может, кто-то знает?
Имеется много (несколько тысяч) растровых планшетов. Система координат местная - задана аффинным преобразованием СК-42. Параметры известны, в mapinfo все открывается и работает.
В файле привязки строчка примерно такая:
Код: Выделить всё
CoordSys Earth Projection 3008, 9999, 3, 23.92, -141.27, -80.9, 0, -0.35, -0.82, -0.12, 0, 7, 135, 0, 1, 23500000, 0, 7, 1.00000xxxxxx, -0.00000xxxxxxxx, -2350xxxx.xxxxxxx, 0.00000xxxxxxx, 1.00000xxxxxxx, -53xxxxx.xxxxxxx, -50000, -50000, 150000, 150000
Нужно перевести эти координаты во что-то более общепринятое, например, ту же СК-42 (отменить аффинное).
Вручную в mapinfo в диалоге "таблица-растр-привязка" это делается, но файлов несколько тысяч...
GDAL такое не понимает, как видно (на выходе gdalinfo Coordinate System is ' ' - пустая строка).
Как бы это средствами mapinfo сделать? Может, кто-то знает?
-
- Гуру
- Сообщения: 3058
- Зарегистрирован: 19 май 2010, 19:44
- Репутация: 189
Re: Перепроецирование растра на основе файла проекций mapinf
Посмотрите http://mapbasic.ru/transcoor, он платный, но стоимость не велика,
и, естественно, эта строка с координатами должна быть заложена в prj программы...
и, естественно, эта строка с координатами должна быть заложена в prj программы...
-
- Гуру
- Сообщения: 4231
- Зарегистрирован: 10 апр 2006, 22:34
- Репутация: -344969098
- Откуда: Париж
Re: Перепроецирование растра на основе файла проекций mapinf
я знаю самый тупой вариант - пересчитать 4 (или сколько их там) точек, что прописаны в качестве координат в TAB файле. Ведь привязка держится только на этих точках и строке координатной системы, а - файл текстовый. В общем вот программа:
Для Windows, запускать из командной строки. В программе есть справка о параметрах.- Institor
- Активный участник
- Сообщения: 243
- Зарегистрирован: 22 апр 2011, 08:10
- Репутация: 27
- Откуда: Хабаровск
Re: Перепроецирование растра на основе файла проекций mapinf
Ничего себе "тупой" вариант! Спасибо, попробую.
Ну это, похоже, можно и в mapbasic написать - там есть функция извлечения координат точек привязки.
Неужели вышеупомянутый transcoor так и работает, перебирая в цикле точки и пересчитывая? Это печально...
Не теряю надежды найти все-таки магическую команду mapbasic'a для переписывания tab.
Есть, например, RegisterTable, но это не совсем то.
upd: протестировал transcoor (демо-версия) - не работает. Похоже, есть ограничение на длину строки проекции, ругается на пробел там, где должна быть скобка
Ну это, похоже, можно и в mapbasic написать - там есть функция извлечения координат точек привязки.
Неужели вышеупомянутый transcoor так и работает, перебирая в цикле точки и пересчитывая? Это печально...
Не теряю надежды найти все-таки магическую команду mapbasic'a для переписывания tab.
Есть, например, RegisterTable, но это не совсем то.
upd: протестировал transcoor (демо-версия) - не работает. Похоже, есть ограничение на длину строки проекции, ругается на пробел там, где должна быть скобка
и далееОшибка при выполнении программы !Встретилось [] там, где ожидается [)]
Жаль.Индекс массива выходит за заданные пределы
- dab
- Гуру
- Сообщения: 671
- Зарегистрирован: 16 дек 2011, 20:02
- Репутация: 170
- Ваше звание: Гуру
- Откуда: Москва
- Контактная информация:
Re: Перепроецирование растра на основе файла проекций mapinf
Если не затруднит, покажите(пришлите) Ваш tab файл.Institor писал(а):... upd: протестировал transcoor (демо-версия) - не работает. Похоже, есть ограничение на длину строки проекции, ругается на пробел там, где должна быть скобка
Кто сейчас на конференции
Сейчас этот форум просматривают: нет зарегистрированных пользователей и 1 гость