Пакетная перерегистрация растров

MapInfo, MapBasic
OlegSLB
Интересующийся
Сообщения: 28
Зарегистрирован: 20 сен 2014, 11:05
Репутация: 5

Пакетная перерегистрация растров

Сообщение OlegSLB » 20 сен 2014, 11:11

Добрый день!
Помогите решить задачу средствами Мапинфо:
Есть множество растров, зарегистрированных в проекции гаусса-крюгера. Необходимо во всех них поменять проекцию на СК-63. Делается элементарно с одиночным растром - таблица-->регистриция растра-->смена проекции. Как автоматизировать этот процесс, написать макрос на мап-бейсике, чтоб можно было эту операцию проделать со всеми открытыми таблицами разом?
Последний раз редактировалось OlegSLB 23 сен 2014, 11:30, всего редактировалось 1 раз.

Аватара пользователя
nadiopt
Гуру
Сообщения: 4744
Зарегистрирован: 29 янв 2009, 13:27
Репутация: 495
Ваше звание: хрюкало
Откуда: Санкт-Петербург
Контактная информация:

Re: Пакетная перерегистрация растров

Сообщение nadiopt » 20 сен 2014, 13:26

именно мапой надо? имхо отлично годится gdal...
ин гроссен фамилен нихт клювен клац клац

OlegSLB
Интересующийся
Сообщения: 28
Зарегистрирован: 20 сен 2014, 11:05
Репутация: 5

Re: Пакетная перерегистрация растров

Сообщение OlegSLB » 20 сен 2014, 13:28

что такое gdal?

Аватара пользователя
nadiopt
Гуру
Сообщения: 4744
Зарегистрирован: 29 янв 2009, 13:27
Репутация: 495
Ваше звание: хрюкало
Откуда: Санкт-Петербург
Контактная информация:

Re: Пакетная перерегистрация растров

Сообщение nadiopt » 20 сен 2014, 13:29

ну вот например
viewtopic.php?f=30&t=17170
ин гроссен фамилен нихт клювен клац клац

OlegSLB
Интересующийся
Сообщения: 28
Зарегистрирован: 20 сен 2014, 11:05
Репутация: 5

Re: Пакетная перерегистрация растров

Сообщение OlegSLB » 20 сен 2014, 14:17

слишком заморочено. Да и не удобно, надо будет из формата в формат переводить. И мне не нужно как таковое перепроецирование, нужен просто пересчёт точек привязки между родственными системами координат самым простым и быстрым способом, без усложнения. Проекция там одна и та же. А gdal - это как из пушки по воробьям палить. Нужно что-то совсем простое, простейшая автоматизация рутинного процесса, по типу макросов в экселе. Чтоб просто записать последовательность действий в мапинфо средствами мап-бейсик и запустить её в цикл, для всех открытых растровых таблиц. Я сначала думал, что просто открыв окно мап-бейсик в мапинфо, можно будет увидеть команды, а дальше дело техники. Но в окне мап-бейсик ничего не отображается, когда делаешь регистрацию растра...

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

Re: Пакетная перерегистрация растров

Сообщение trir » 20 сен 2014, 15:17

Вы сильно ошибаетесь!

Аватара пользователя
Игорь Лебедь
Завсегдатай
Сообщения: 452
Зарегистрирован: 24 апр 2010, 19:47
Репутация: 101
Откуда: Город в клёнах и акациях
Контактная информация:

Re: Пакетная перерегистрация растров

Сообщение Игорь Лебедь » 20 сен 2014, 20:15

В ArcToolBox есть инструмент Define Projection, он Вам нужен, как я понимаю, чтобы запустить пакетно, надо правой кнопкой нажать и выбрать Batch. Если же надо именно перепроецировать, а не переопределить, то это инструмент ProjectRaster.
tab в tfw если что можно перевести утилитой gtt.exe (и обратно), такие вопросы здесь на форуме часто освещены, да и gdal'ом можно.
То есть метод каковой:
1. Конвертируете tab to tfw gtt'ой (для 100% уверенности, хотя arcmap в последних версиях вроде бы понимал tab-привязку.
2. Назначаете нужную проекцию (define projection).
3. Перемещаете старые табы в дальнюю папку, чтоб мапинфа их не увидела, и опять gtt-ой либо geotiff to tab (делает пакетно), либо tfw to tab.

Boris
Гуру
Сообщения: 4205
Зарегистрирован: 10 апр 2006, 22:34
Репутация: 433
Откуда: Париж

Re: Пакетная перерегистрация растров

Сообщение Boris » 21 сен 2014, 02:30

а ведь ответ уже был... :
"Перепроецирование растра на основе файла проекций mapinfo"
и еще вот здесь
"Мелкие полезности из командной строки" ссылка на файл mi_VBS.rar
производит пересчет точек привязки растровой таблицы MapInfo в указанную систему координат и
выводит новую таблицу в файл или поток StdOut.
параметры:
1. tabPath - путь к файлу таблицы Mapinfo (TAB - file)
2. coordsysStr - строка новой проекции в двойных кавычках. Двойные кавычки там, где синтаксис
MapInfo/MapBasic требует использования двойных кавычек("), следует заменить ординарными ('),
Это ограничение командной строки VBScript, которое уничтожает все двойные кавычки :("
3. outTxt - путь к выходному файлу. ПО умолчанию - поток StdOut
4. OverWriteFile - перезаписывать существующий файл [Yes] или дополнять его [No]. По умолчанию - [No] (Дополнять)
для своей работы программа использует загруженную копию MapInfo

синтаксис команды:
mi_tabRasterReproject.vbs tabPath "coordsysStr" [OutFile] [OverWriteFile]

Обрабатываемый файл таблицы будет открыт в действующей копии Mapinfo и
информация о таблице будет считана стандартной функцией TableInfo().
Файл открывается с уникальным именем и закрывается после обработки.
Если в программе MapInfo будет уже открыт этот же файл, то произойдет ошибка,
и файл не будет обработан.
небольшое дополнение:

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

выполняется построчный пересчет строк привязки растра из исходной СК (она считывается из файла TAB) в новую, указанную в параметре. Изменяются ТОЛЬКО цифры, отвечающие за позиционирование растра "на земле". Ну и естественно изеняется строка СК для растра. Пересчет точек, как геообъектов, выполняется только средствами загруженной копии Mapinfo. Собственно в основном она для этого и нужна.

OlegSLB
Интересующийся
Сообщения: 28
Зарегистрирован: 20 сен 2014, 11:05
Репутация: 5

Re: Пакетная перерегистрация растров

Сообщение OlegSLB » 21 сен 2014, 08:24

to Boris:
По сути программка делает то, что нужно. Но я что-то не понял, как с её помощью пакетно пересчитать все растры, если каждый раз надо ручками вбивать путь к таблице? О.о Это ж получается ещё более неудобно, чем просто через мапинфо перерегистрировать...

OlegSLB
Интересующийся
Сообщения: 28
Зарегистрирован: 20 сен 2014, 11:05
Репутация: 5

Re: Пакетная перерегистрация растров

Сообщение OlegSLB » 21 сен 2014, 08:42

Неужели никто не написал до сих пор утилиту на мап-бейсике? Я весь инет перерыл. Ведь задача-то не из сложных. Для разбирающегося человека час работы. Можно конечно для этого установить арк-мап (ага, чтоб просто пересчитать точки привязки, устанавливать огромный гис-пакет), можно морочиться с командной строкой, с переводом из формата в формат... Но это же всё дико неудобно! Зачем было писать утилиту на vbs, используя при этом мапинфо, если логичнее и проще использовать предназначенный для этого мап-бейсик?

OlegSLB
Интересующийся
Сообщения: 28
Зарегистрирован: 20 сен 2014, 11:05
Репутация: 5

Re: Пакетная перерегистрация растров

Сообщение OlegSLB » 21 сен 2014, 08:51

и ещё.. я видимо что-то не то делаю. Эта программка выдаёт мне ошибку, что TAB File not found... хотя путь написан правильно. Видимо я туповат для такого способа. Кстати, утилита transcoor делает то, что нужно, но платная :(
В общем, утилита должна работать так: указываем папку с привязанными растрами, указываем требуемую СК из файла prj, утилита перебирает все файлы, находящиеся в папке, пересчитывает координаты привязки, прописывает новую строчку системы координат. Вот и всё. Я думаю тут программка будет из десятка строчек на мап-бейсике.

Ariki
Гуру
Сообщения: 731
Зарегистрирован: 12 янв 2011, 22:40
Репутация: 304
Ваше звание:

Re: Пакетная перерегистрация растров

Сообщение Ariki » 21 сен 2014, 12:47

Для пакетной обработки всех файлов из каталога в командной строке Windows есть команда for. Синтаксис выглядит страшновато, но разобраться можно.
http://microsin.net/adminstuff/windows/ ... files.html
Я бы на вашем месте не надеялся, что кто-то предложит решение "в одну кнопку". Люди, как правило, создают инструменты исходя из собственных задач. Большинству тех, кто занимается обработкой данных, проще работать с командной строкой. Это реально удобнее, даже под Windows, -- в том числе благодаря возможности пакетной обработки. Вам предложили несколько решений. Если какое-то из них не сработало -- попытайтесь разобраться в причинах или попробуйте другое.
Почему MapInfo проще использовать как COM-сервер из сторонних языков, а не писать на MapBasic? А вы сами попробуйте. Думаю, не сильно ошибусь, если отвечу, что этот язык несколько ущербен по дизайну, и многие вещи, которые делаются элементарно в языках общего назначения, в MapBasic вообще непонятно как сделать. К тому же его нужно компилировать. Я, например, пишу скрипты для MapInfo на Python, пусть это выглядит извращением.
Как написали выше, вашу задачу можно легко решить с помощью gdal_translate вообще без всякого программирования, одной строчкой в консоли. Попробуйте. Умение применять утилиты GDAL решит все ваши проблемы с растрами навсегда и вдобавок поможет оптимизировать растры, чтобы ускорить их открытие и сэкономить дисковое пространство. Единственное - GDAL не сгенерирует вам TAB-файлы привязки, но MapInfo сам создаст их при открытии GeoTiff, либо воспользуйтесь GTT.

OlegSLB
Интересующийся
Сообщения: 28
Зарегистрирован: 20 сен 2014, 11:05
Репутация: 5

Re: Пакетная перерегистрация растров

Сообщение OlegSLB » 21 сен 2014, 14:51

хм.. может для вас gdal и командная строка выглядят как привычные и простые инструменты, но для меня это просто тёмный лес. Я даже не знаю, с какой стороны к ним подступиться, всё на что меня хватило, это запустить кое-как эту программу из командной строки, да и то как правильно прописать все параметры я так и не понял. А тратить недели только на ознакомление с ними я не имею возможности. GDAL я так понимаю, это вообще не настольная гис с графическим интерфейсом, а какой-то набор библиотек, который ещё надо как-то заставить работать, знать консольные команды и пр. Я пытался упростить работу, а не усложнить её. Это как если бы я спрашивал "На каком автобусе мне доехать от пункта а до пункта б", а в ответ мне написали - "элементарно, собери своими руками вертолёт, научись им управлять, заправь его топливом, получи разрешение на полёты, освой навыки штурмана, проложи курс, а потом всё просто - за 5 минут долетишь"

Boris
Гуру
Сообщения: 4205
Зарегистрирован: 10 апр 2006, 22:34
Репутация: 433
Откуда: Париж

Re: Пакетная перерегистрация растров

Сообщение Boris » 22 сен 2014, 01:55

OlegSLB писал(а):to Boris:
По сути программка делает то, что нужно. Но я что-то не понял, как с её помощью пакетно пересчитать все растры, если каждый раз надо ручками вбивать путь к таблице? О.о Это ж получается ещё более неудобно, чем просто через мапинфо перерегистрировать...
ужос... напоминает неприличный анекдот про девушку в Запорожце. Это кто же в вас такие страшные мысли загрузил "руками набирать"... ?
В целом странная постановка вопроса - "дайте это!". Видно ваша пакетная обработка в 10 растров укладывается. Для все остальных "пакет" начинается от 200. А когда файлов больше 1000, то вся эта мапинфо падает и нервно дрыгается. Особенно последние версии - шибко умные и интуитивно понятные, кои файл сразу в память запихнуть норовят не зависимо от того надо его на экран выводить или нет.
Писать "пакет" на мапбайсике ... . Что тут сказать. Я без мата не могу, а с матом правила форума не позволяют.
Нет пакетной обработки без команды FOR и командной строки. Все остальное извращение. Ну есть конечно какие то особые извращения в виде "берем GUI" и создаем в нем список файлов, а потом на них натравливаем перебор с вызовом программы а-ля командная строка. Но это еще поискать надо. Потому для тех у кого пакет и перебор, командная строка - это очевидное "и перебор и пакет в одном флаконе", а для всех остальных должен найтись добрый дядя, который напишет GUI а-ля командная строка и нужный вам перебор. И что с ним будет, когда он узнает, что этот GUI уже включен в 98% общедоступных ОС и называется он "командная строка"?
То есть в мире ГИС такой хромой велосипед о трех с половиной колесах есть - это тулбоксы в ArcGIS, где перебор к очевидным командам прикручен в виде дополнительных списков-опций. НО их же надо тогда все помнить или опять придется многотомную документацию читать...

Аватара пользователя
ginpetr
Завсегдатай
Сообщения: 376
Зарегистрирован: 21 июн 2011, 12:07
Репутация: 140
Откуда: Орск
Контактная информация:

Re: Пакетная перерегистрация растров

Сообщение ginpetr » 22 сен 2014, 08:11

OlegSLB писал(а):хм.. может для вас gdal и командная строка выглядят как привычные и простые инструменты, но для меня это просто тёмный лес. Я даже не знаю, с какой стороны к ним подступиться, всё на что меня хватило, это запустить кое-как эту программу из командной строки, да и то как правильно прописать все параметры я так и не понял. А тратить недели только на ознакомление с ними я не имею возможности. GDAL я так понимаю, это вообще не настольная гис с графическим интерфейсом, а какой-то набор библиотек, который ещё надо как-то заставить работать, знать консольные команды и пр. Я пытался упростить работу, а не усложнить её. Это как если бы я спрашивал "На каком автобусе мне доехать от пункта а до пункта б", а в ответ мне написали - "элементарно, собери своими руками вертолёт, научись им управлять, заправь его топливом, получи разрешение на полёты, освой навыки штурмана, проложи курс, а потом всё просто - за 5 минут долетишь"
"Лучше день потерять - потом за пять минут долететь" (м/ф "Крылья, ноги и хвосты") :wink:
Если уж совсем лень изучать, у меня в Ch_projection появилась возможность изменения системы координат для растров. Мной опция почти не востребована, поэтому на ошибки не объезжена. Пробуйте и отпишитесь об успехе/неудаче.
Нужно выбрать в списке таблиц загруженные в Мапинфо растры, в меню таблицы выбрать Изменить проекции выбранных таблиц. Таблицы переписываются, так что экспериментируйте с копиями.
В меню Таблицы появится также пункт Проекции выбранных таблиц.
Поддерживается перевод План-схема --> Проекция и Проекция --> Проекция
Используйте на свой страх и риск.
Есть и проверенный инструмент
Вложения
Ch_projection.zip
Изменение проекции
(2.14 КБ) 428 скачиваний
Последний раз редактировалось ginpetr 22 сен 2014, 11:27, всего редактировалось 1 раз.

Ответить

Вернуться в «MapInfo»

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

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