Привязка в MApInfo

MapInfo, MapBasic
irbis
Новоприбывший
Сообщения: 6
Зарегистрирован: 04 дек 2007, 18:03
Репутация: 0

Привязка в MApInfo

Сообщение irbis » 04 дек 2007, 18:07

Добрый день уважаемые, если несложно, помогите разобраться с привязкой. Вроде что-то получилось, но дальше уперся , не знаю, как решить проблему.
Итак, есть план города в формате MapInfo, точнее - план-схема.Спроектирована в локальной системе координат.
Также есть карта региона в MInfo, в проекции Гаусса-Крюгера, 9 зона СК1942, привязанная и достаточно точная - проверял по трекам с GPS и Google Earth.
Делаю следующее:
1.Открываю одну из таблиц(Гидрографию) плана города, пересохраняюю в проекцию Гаусса, 9 зону.
Открываю ее после сохранения, нахожу точку - слияние рек, координаты точки внизу показываются 2932870,5м; 28756,789м.
Экспортирую кусок экрана из MapInfo в Google Earth, вижу что реки
с этими координатами мигрируют на побережье Западной Африки :)
2.Открываю таблицу гидрография региональной карты - нахожу эту же точку, ее координаты 9423596м; 6502451м.
3. После этого редактирую MapInfo.prj
Добавляю строку :
"My_GK зона 9 (Пулково 1942)\p28409", 8, 1001, 7, 51, 0, 1, 15990726м, 6473695м (подбирал смещения вручную).
4.Открываю таблицу города в формате плана- схемы, пересохраняю ее в новой системе координат.
5. Открываю сохраненную таблицу города - иду на точку, проверяю координаты - вижу 9423596м, 6502451м, т.е. по координатам попадаю в сравнении с привязанной региональной картой и привязанной пятисотметровкой с точностью до метра.

6.После этого открываю в одном слое региональную карту в СК42, и городскую, в моей СК, в другом слое. Добавляюю к региональной карте городскую - и вот тут засада, региональная карта остается на месте, городская улетает опять в Африку.Если подгрузить трек с GPS, происходит тоже самое- трек ложится там где надо, а гидрография уезжает.

Если правильно думаю , то происходит это из-за того, что введены различные системы отсчета для двух карт, и начало координат у них не совпадает.

Что можно сделать в этом случае ? В какие дебри дальше лезть :)?
Аффинное преобразование ?

...Посмотрел еще раз таблицу, переключил "показывать расположение курсора" на градусы" - координата в градусах стоит в Африке. Координаты, если смотреть в метрах, показываются там ,где надо, в квадрате O-39-52.
Мыслей по поводу больше нет...

KolesovDmitry
Гуру
Сообщения: 810
Зарегистрирован: 22 авг 2007, 14:58
Репутация: 123
Откуда: Казань

Сообщение KolesovDmitry » 04 дек 2007, 21:30

Не уверен, что правильно понял, с какими исходными материалами приходится работать. Я себе представил так: карта города -- план схема, условная система координат, но координаты "реальные", т.е. когда смотрите на план, находите на нем слияние рек и видите координаты (9423596; 6502451)...

Если это действительно так, то бороться с проблемой можно вот как:

1) При помощи программы "Универсальный транслятор" (см. "Программы/Каталог программ", если она у вас не загружается при старте MapInfo) конвертируете ваши слои из формата MapInfo в shp. В shp-файлах не хранится информация о проекции, поэтому таким образом вы позволяете MapInfo "забыть" о том, что она имела дело с план-схемой. (При конвертации MapInfo может создать дополнительный файл с расширением .prj, где хранятся данные о проекции слоя, поэтому все созданные .prj-файлы нужно будет удалить).

2) При помощии Универсального транслятора конвертируете полученные shp-файлы обратно в формат MapInfo (Но при этом не забудьте указать нужную проекцию -- Гауса-Крюгера, 9 зона).

После этой процедуры слои получат нужные координаты, Но потеряют форматирование (цвета, стили символов и т.п.), поэтому их придется настраивать заново. Если это слишком напряжно (слоев много, стили объектов разные в зависимости от атрибутов и т.п.), то можно попробовать афинное преобразование координат.

Афинное преобразование поможет и в случае, если у вас в условной системе координат координаты отличаются от реальных (координаты слияния рек не равны (9423596; 6502451), как хотелось бы). Для этого смотрите "Программы/Каталог программ", ищите там утилиту Register Vector Utilily (в версии MapInfo 7.8 есть точно, а в 6.0 вроде еще не было). Она позволяет произвести афинное преобразование по трем точкам, которые нужно указать мышью на карте (что тоже не просто -- ткнуть мышью в нужное место с нужной точностью).

alexandr cherepanov
Гуру
Сообщения: 534
Зарегистрирован: 30 ноя 2006, 13:31
Репутация: 116
Откуда: Moscow

Сообщение alexandr cherepanov » 04 дек 2007, 21:44

viewtopic.php?t=571
http://gis-lab.info/qa/shapewarp.html

если поищите может еще что найдете

irbis
Новоприбывший
Сообщения: 6
Зарегистрирован: 04 дек 2007, 18:03
Репутация: 0

Сообщение irbis » 04 дек 2007, 23:06

Спасибо за рекомендации,

2KolesovDmitry
План-схема с локальной системой. Она показывает точку с координатой 10621м,18386м, без градусов.
После пересохранения в ГК СК 42 9 зоны эта же точка получает координату 2932870,5м; 28756,789м., (и -0Гр 17' 3,506208"; 0Гр 9' 21,978948'' в градусах ). т.е., насколько я понимаю, план-схема получил кривую, но географическую привязку.
Потом я пересохраняюсь в своей проекции с поправками и точка получает верную координату в метрической системе(x9423596м, y6502451м.), но значение в градусной у нее остается тоже самое.

Универсальный транслятор - не сработал, когда загружаю таблицу после преобразований там только прямые линии и несколько точек.
Register Vector Utilily - пробовал до этого, пытался привязать на растовую 500 метровку, и на векторную региональную карту , но результат отрицательный - расхождения большие.

2alexandr cherepanov
Я это уже смотрел, но пока не готов еще одну ГИС осваивать :), пока и с MI вопросов хватает.

Есть программа MITTransformer, которая позволяет делать перемещение объектов, но в открытом доступе ее нет.


Еще мысль появилась:
В МapInfo есть инструмент "Сдвиг", который позволяет сдвинуть все объекты слоя на заданное расстояние и указать при этом направление
перемещения в градусах.
Как посчитать насколько необходимо сдвинуть объекты, если
начальная точка имеет координаты x2932870,5м; y28756,789м, а должна получить x9423596м, y6502451м.
Восток при этом 0Гр, Север 90Гр, Запад 180Гр, Юг 270.

Т.е. какое указать направление в градусах и расстояние ?
И сдвиг надо производить на сфере или на плоскости ?

irbis
Новоприбывший
Сообщения: 6
Зарегистрирован: 04 дек 2007, 18:03
Репутация: 0

Сообщение irbis » 05 дек 2007, 02:19

В принципе разобрался- сделал это через "Сдвиг" объектов каждого слоя на разницу между x-x1, и y-y1 , двигал все по плоскости. пока только полетел масштаб карты, при выгрузке окна в Google Earth моя река получается раза в 3 шире,чем в Гугле. вообщем буду дальше разбираться.
Но если кто-то знает более изящное решение, напишите , пож-та :)

KolesovDmitry
Гуру
Сообщения: 810
Зарегистрирован: 22 авг 2007, 14:58
Репутация: 123
Откуда: Казань

Сообщение KolesovDmitry » 05 дек 2007, 10:33

Теперь задачу понял. Хотя у вас вроде и так все вышло, скажу, как попробовал бы я.

Мне кажется, что в вашем случае (когда в план-схеме координаты "не настоящие") может помочь только преобразование координат (во всяком случае конвертация tab<-->shp точно не поможет).

Вы сделали сдвиг и, как я понял, все встало на свои места (направления рек и т.п.), но улетел масштаб. Это означает, что сдвига одного мало, нужно еще сжать/растянуть координаты вдоль осей).

Я бы сделал:

1) экспорт в MIF/MID формат (достаточно удобный текстовый формат)
2) прописал там предложение TRANSFORM (имеет следующую форму: TRANSFORM множительX, множительY, смещениеX, смещениеY)
3) в предложении COORDSYS у вас стоит план-схема (Nonearth), поэтому нужно будет указать правильные параметры для Гауса-Крюгера (их можно выдернуть из файла проекций mapinfo.prj)
4) обратный импорт из MIF

Если исходная карта такова, что поворот осей координат не требуется, то таких действий будет достаточно. Если же нужен будет поворот осей, то придется указывать параметры преобразования в предложении COORDSYS ("Affine Units unitname, A, B C, D, E, F ").

irbis
Новоприбывший
Сообщения: 6
Зарегистрирован: 04 дек 2007, 18:03
Репутация: 0

Сообщение irbis » 05 дек 2007, 23:56

Спасибо, Дмитрий
TRANSFORM 0, 0, x, y
решил проблему, не пришлось даже коэффициенты высчитывать для масштабирования.
Странно, что сдвиг сработал с искажениями , я считал, что он также добавляет разницу к координатам по осям.
Еще раз, спасибо :)

Conscript
Новоприбывший
Сообщения: 3
Зарегистрирован: 24 июн 2008, 22:38
Репутация: 0
Откуда: Москва

Сообщение Conscript » 24 июн 2008, 22:50

Привет, интересная тема.
Но MI 7.5 ругнулся на TRANSFORM (Syntax error: transform) после того как я сделал в блокноте дописку и импортировал.
Да и хелп не смог ничего найти по слову TRANSFORM.

Что делаю не то?
Спасибо.

KolesovDmitry
Гуру
Сообщения: 810
Зарегистрирован: 22 авг 2007, 14:58
Репутация: 123
Откуда: Казань

Сообщение KolesovDmitry » 25 июн 2008, 10:39

Conscript писал(а):...
Но MI 7.5 ругнулся на TRANSFORM (Syntax error: transform) после того как я сделал в блокноте дописку и импортировал.
...
Что делаю не то?
Мне кажестся, что дело здесь не в версии MI (я использовал transform и в MI 5.5, и в MI 7.8 - в обоих случаях работало). Интересно было бы посмотреть на вашу дописку (предложения transform) в файле с MIF. А заодно и опишите задачу - откуда и во что нужно провести трансформацию - не видя контекста трудно что-нибудь толковое сказать.

Conscript
Новоприбывший
Сообщения: 3
Зарегистрирован: 24 июн 2008, 22:38
Репутация: 0
Откуда: Москва

Сообщение Conscript » 27 июн 2008, 07:21

Здравствуйте, Дмитрий!

Проблему описал в прикрепленном файле.

В MI имеется понятие "координаты опорных точек"?

Олег
Вложения
TRANSFORM.rar
(107.79 КБ) 953 скачивания

KolesovDmitry
Гуру
Сообщения: 810
Зарегистрирован: 22 авг 2007, 14:58
Репутация: 123
Откуда: Казань

Сообщение KolesovDmitry » 30 июн 2008, 09:47

Conscript писал(а): Проблему описал в прикрепленном файле.
Здравствуйте, вы очень хорошо описали проблему - сразу стало понятно, над чем вы бьетесь. Давайте пройдемся по задаче:
Во-первых, как я понимаю, ошибка "Syntax error: transform" возникает из-за того, что вы всунули предложение TRANSFORM не в тот раздел. Согласно документации, заголовок MIF-файла должен выглядеть так:

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

VERSION n
NAME
[ no spaces allowed in the column name ]
Charset ”characterSetName”
[ DELIMITER ”<c>” ]
[ UNIQUE n,n.. ]
[ INDEX n,n.. ]
[ COORDSYS...]
[ TRANSFORM...]
COLUMNS n
<name> <type>
<name> <type>
.
.
DATA
...
То есть в нужно было втавить TRANSFORM _перед_ COLUMNS, а не после.

Во-вторых, предложение TRANSFORM имеет следующий синтаксис:

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

TRANSFORM множительX, множительY, смещениеX, смещениеY
причем, нули в этом предложении игнорируюстя. Соответственно, ваш код

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

TRANSFORM 0, 0, 1, 1
означает, что вы не будете масштабировать оси координат, а просто сдвигаете начало осчета:

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

Xн=Xс+1, Yн=Yс+1,
где Xн и Yн - координаты нового центра (начала отсчета), получаемые из координат Yс и Xс старого центра.

В вашем случае нужно правильно подобрать параметры сдвига (сдвигать, видимо, нужно не на одну единицу, а на какую-то величину, которую нужно предварительно расчитать). Кроме того, из рисунков видно, что прото сдвиг может и не помочь - в разных углах карты точки необходимо сдвинуть в разных направлениях. Поэтому вам нужно будет поиграть и с масштабирующими множителями.

Более подробно о формате файла MIF надо искать в документации (см. приложения к руководству пользователя). Скачать документацию можно, к примеру, тут: http://mapinfo.narod.ru/docs.html

Это то, что касалось предложения TRANSFORM. Однако, в вашем случае, может быть есть смысл попробовать притянуть точки к соответствующим объектам каким-либо другим способом (попробовать это сделать при помощи буферов и гео-операторов типа COMTAINS, INTERSECT и т.п.). Кстати, что это за поле MI_refnum в таблице адресов? Случайно не ссылка на соответствующий объект? Может "все уже сделано за нас"? :)

Conscript
Новоприбывший
Сообщения: 3
Зарегистрирован: 24 июн 2008, 22:38
Репутация: 0
Откуда: Москва

Сообщение Conscript » 02 июл 2008, 22:01

Дмитрий, здравствуйте!

Спасибо все решилось линейным смещением по оси Х.
Вы оказались правы, что кто-то эту таблицу уже преобразовывал. В исходной таблице поле MI_refnum отсутствует. Это уникальный идентификатор по названию улиц; кто и зачем это сделал - уже не узнать.
Большинство ссылок по указанному адресу - не рабочие.

Есть ли какой-нибудь простой универсальный инструмент создания карт? Более детально: можно всегда скачать карту с google или yandex (или получить рисунок интересующей территории). Так вот, можно ли данный рисунок использовать как подложку для Mapinfo, инструментами которой по контуру прорисовывать дома, изолинии, ...
Пример: имеется цифровая карта, но дома растут как грибы, вот и хочется их добавлять на карту.
Знаю, что можно рисунки (bmp, jpeg) открывать в MI, но здесь же при открытии таблицы "в активной карте" все плывет (что вполне понятно).
Заранее спасибо.

KolesovDmitry
Гуру
Сообщения: 810
Зарегистрирован: 22 авг 2007, 14:58
Репутация: 123
Откуда: Казань

Сообщение KolesovDmitry » 03 июл 2008, 11:07

Conscript писал(а):Есть ли какой-нибудь простой универсальный инструмент создания карт? Более детально: можно всегда скачать карту с google или yandex (или получить рисунок интересующей территории). Так вот, можно ли данный рисунок использовать как подложку для Mapinfo, инструментами которой по контуру прорисовывать дома, изолинии, ...
Пример: имеется цифровая карта, но дома растут как грибы, вот и хочется их добавлять на карту.
Знаю, что можно рисунки (bmp, jpeg) открывать в MI, но здесь же при открытии таблицы "в активной карте" все плывет (что вполне понятно).
Если честно, то я не очень понял вопроса. Что значит простой универсальный инструмент? Не устравивает MI (AV или др?). Чем?

Да, можно получить рисунок соотв. территории и прорисовывать по нему вновь появившиеся объекты. Не очень понятно, почему при добавлении к активной карте растра все "плывет".
Глупый вопрос: а вы правильно растр привязываете? Погрешность привязки большая? Проекцию правильную выставляете?

trubachev83
Новоприбывший
Сообщения: 7
Зарегистрирован: 27 авг 2013, 08:16
Репутация: 0

Re:

Сообщение trubachev83 » 27 авг 2013, 09:15

KolesovDmitry писал(а):
Conscript писал(а): Проблему описал в прикрепленном файле.
Здравствуйте, вы очень хорошо описали проблему - сразу стало понятно, над чем вы бьетесь. Давайте пройдемся по задаче:
Во-первых, как я понимаю, ошибка "Syntax error: transform" возникает из-за того, что вы всунули предложение TRANSFORM не в тот раздел. Согласно документации, заголовок MIF-файла должен выглядеть так:

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

VERSION n
NAME
[ no spaces allowed in the column name ]
Charset ”characterSetName”
[ DELIMITER ”<c>” ]
[ UNIQUE n,n.. ]
[ INDEX n,n.. ]
[ COORDSYS...]
[ TRANSFORM...]
COLUMNS n
<name> <type>
<name> <type>
.
.
DATA
...
То есть в нужно было втавить TRANSFORM _перед_ COLUMNS, а не после.

Во-вторых, предложение TRANSFORM имеет следующий синтаксис:

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

TRANSFORM множительX, множительY, смещениеX, смещениеY
причем, нули в этом предложении игнорируюстя. Соответственно, ваш код

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

TRANSFORM 0, 0, 1, 1
означает, что вы не будете масштабировать оси координат, а просто сдвигаете начало осчета:

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

Xн=Xс+1, Yн=Yс+1,
где Xн и Yн - координаты нового центра (начала отсчета), получаемые из координат Yс и Xс старого центра.

В вашем случае нужно правильно подобрать параметры сдвига (сдвигать, видимо, нужно не на одну единицу, а на какую-то величину, которую нужно предварительно расчитать). Кроме того, из рисунков видно, что прото сдвиг может и не помочь - в разных углах карты точки необходимо сдвинуть в разных направлениях. Поэтому вам нужно будет поиграть и с масштабирующими множителями.

Более подробно о формате файла MIF надо искать в документации (см. приложения к руководству пользователя). Скачать документацию можно, к примеру, тут: http://mapinfo.narod.ru/docs.html

Это то, что касалось предложения TRANSFORM. Однако, в вашем случае, может быть есть смысл попробовать притянуть точки к соответствующим объектам каким-либо другим способом (попробовать это сделать при помощи буферов и гео-операторов типа COMTAINS, INTERSECT и т.п.). Кстати, что это за поле MI_refnum в таблице адресов? Случайно не ссылка на соответствующий объект? Может "все уже сделано за нас"? :)

Здравствуйте, Дмитрий.
Мне нужно перевести электронную карту я в этих векторах вообще понять ни чего не могу :)
Но знаю что координаты в мап мнфо должны поменяться следующим образом, например:
в карте в мап инфо Х=2378354.5 Y=463077.2 в Х первая цифра меняется на 5, в Y первая цифра меняется на 53
то есть должны быть Х=5378354.5 Y=5363077.2
Подскажите пожалуйста как это сделать?
Я понял что надо перевести в mif, перевел...
Открыл mif файл блокнотом...
понял что нужно дописать TRANSFORM, но что в нем писать??? я ничего не понял!
За ранее спасибо!!!

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

Re: Привязка в MApInfo

Сообщение trir » 27 авг 2013, 09:42

А какие у вас СК?

Ответить

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

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

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