создание проекции с аффинными преобразованиями

MapInfo, MapBasic
sjh
Новоприбывший
Сообщения: 7
Зарегистрирован: 16 дек 2010, 09:51
Репутация: 0

создание проекции с аффинными преобразованиями

Сообщение sjh » 16 дек 2010, 10:00

Вопрос.
В файле mapinfo.prj создаю новую проекцию меркатора на эллипсоиде красовского
с аффинными преобразованиями
т.е.

"название", 1008,9999,3, (датум 8 параметров), 7, осевой,0,1,смещение,смещение,7, (6 аффинных коэффициентов)

после этого, данная проеция "работает правильно" (т.е. я могу таблицы из другой проекции перевести в эту), НО!
mapinfo не дает ни создать новую таблицу в этой проекции, ни импортировать mif/mid в ней
ругается на "встретилось [], а ожидалось )"

где ошибка?

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

Re: создание проекции с аффинными преобразованиями

Сообщение Boris » 16 дек 2010, 12:30

строку из mif/mid и mapinfo.prj приведите.

sjh
Новоприбывший
Сообщения: 7
Зарегистрирован: 16 дек 2010, 09:51
Репутация: 0

Re: создание проекции с аффинными преобразованиями

Сообщение sjh » 17 дек 2010, 08:24

mapinfo.prj:

"система", 1008, 9999, 3, 23.56, -140.95, -79.8, 0.0, -0.35, -0.79, -0.22, 0,7, 63, 0, 1, 500000, 0, 7, 1.0000047619, -0.0000028933, -499929.3400297030, 0.0000029449, 1.0000048223, -5355580.4074838500

в mif/mid, соответственно, тоже самое:

CoordSys Earth 1008, 9999, 3, 23.56, -140.95, -79.8, 0.0, -0.35, -0.79, -0.22, 0,"m", 63, 0, 1, 500000, 0, 7, 1.0000047619, -0.0000028933, -499929.3400297030, 0.0000029449, 1.0000048223, -5355580.4074838500

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

Re: создание проекции с аффинными преобразованиями

Сообщение Boris » 17 дек 2010, 09:44

Правильные строки для MAPINFOW.prj :

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

"--- SC Unknown and Special ---"
"SC Unknown", 1008, 9999, 3, 23.56, -140.95, -79.8, 0, -0.35, -0.79, -0.22, 0, 7, 63, 0, 1, 500000, 0 , 7, 1.0000047619, -0.0000028933, -499929.34002970299, 0.0000029449, 1.0000048223, -5355580.4074838497
Эта СК появляется в списке доступных проекций, позволяет создавать таблицы и присваивается окнам карт.

Для MIF файла:

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

CoordSys Earth Projection 8, 9999, 3, 23.56, -140.95, -79.8, 0, -0.35, -0.79, -0.22, 0, "m", 63, 0, 1, 500000, 0 Affine Units "m", 1.0000047619, -0.0000028933, -499929.34002970299, 0.0000029449, 1.0000048223, -5355580.4074838497
Хотя для MIF подходит и присланный вами, с единственным исключением в начале должно быть

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

CoordSys Earth Projection
48.rar
(844 байт) 497 скачиваний
- в приложении - два MIF/MID файла:
  • Untitled.MIF - это файл с вашей строкой. он нормально прошел импорт в MI
  • Untitled_3.MIF - это файл созданный на основе строки из MAPINFOW.prj, указанной выше, и затем выгруженный в формат MIF.
PS
Увы, но синтаксис команд, устанавливающих систем координат в разных местах MI - различается. :(
Правильную строку для формата MIF можно получить командой

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

print TableInfo(имя_таблицы,29)
---
Теперь позвольте вопрос, до которого у меня не дошли руки, а с ходу не получилось, вы 6 параметров аффинного преобразования рассчитывали для каких систем координат? Или вернее от какой к какой? От исходных к результирующим или от результирующих к исходным? Или там все еще сложней?

sjh
Новоприбывший
Сообщения: 7
Зарегистрирован: 16 дек 2010, 09:51
Репутация: 0

Re: создание проекции с аффинными преобразованиями

Сообщение sjh » 18 дек 2010, 02:54

1. по аффинным преобразованиям: коэффициенты расчитываются от проекции к искомой системе. т.е., как в данной строке, у меня есть местная система координат, которая является переуравненным 42 годом со сдвигом. вот и получается, сначала проекция 42 год, а потом 6 аффинных коэффициентов.

2. по сути вопроса: спасибо, но ошибка не в оформлении. возможно даже данный вопрос к разработчикам, потому что после нескольких экспериментов выяснилось, что данная ошибка у меня на всех компах с Mapinfo 9.5.1, а вот на 9.0 или 10.0 такой ошибки нет.

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

Re: создание проекции с аффинными преобразованиями

Сообщение Boris » 19 дек 2010, 00:09

sjh писал(а):1. по аффинным преобразованиям: коэффициенты расчитываются от проекции к искомой системе. т.е., как в данной строке, у меня есть местная система координат, которая является переуравненным 42 годом со сдвигом. вот и получается, сначала проекция 42 год, а потом 6 аффинных коэффициентов.
Т.е. если убрать параметры аффинного преобразования из строки проекции, мы получим некоторые проекционные координаты для наших геоданных. А коэффициенты аффинного преобразования задают переход от этих координат к координатам проекции с преобразованием?

sjh
Новоприбывший
Сообщения: 7
Зарегистрирован: 16 дек 2010, 09:51
Репутация: 0

Re: создание проекции с аффинными преобразованиями

Сообщение sjh » 27 дек 2010, 01:45

Boris писал(а): Т.е. если убрать параметры аффинного преобразования из строки проекции, мы получим некоторые проекционные координаты для наших геоданных. А коэффициенты аффинного преобразования задают переход от этих координат к координатам проекции с преобразованием?
именно так

П.С. выяснил я, что не так с проекциями. косяк mapinfo. он где-то неправильно обрабатывает числа и, видимо, переполняется память. т.е. если осевой меридиан двузначный, то все прокатывает (как в примере 63), а если трехзначный, то уже нет. но если при трехзначном меридиане убрать по одному знаку после запятой, - то опять все работает =)

romir
Участник
Сообщения: 67
Зарегистрирован: 27 ноя 2009, 14:09
Репутация: 0

Re: создание проекции с аффинными преобразованиями

Сообщение romir » 13 янв 2011, 15:24

Извиняюсь, что встреваю в тему, но у меня схожая ситуация: Надо векторную карту острова из местной системы координат привязать к Гауса-Крюгера. Я делал через доп. программку Register Vector. Один вектор привязался идеально. Другой выдает ошибку "встретилось [=], а ожидалось [Identificator]" при этом Регистратор векторов вешает Мапинфо (9.5.1) вне зависимости от результата своей работы. Приходится перегружать Мапинфо. И так с каждым вектором.
Пробовал притянуть файлы векторов через правку mif файла путем вставки
CoordSys Earth Projection 8, 1001, "m", 33, 0, 1, 6500000, 0 Bounds (-1749281.53901, -10002137.4978) (14749281.539, 10002137.4978) из мифа, сделанного из карты в проекции ГК42 и дополнения
строки TRANSFORM 0, 0, 6612393, 6882537 (коэффициенты подобрал методом многочисленных тыков). Почти удалось, но притягиваемый остров не полностью встает на место, т.е. имеются непонятные отклонения. Например: южный конец встает куда надо, северный ползет немного на восток. Чего надо подкрутить еще, чтобы все встало на место?
вот шапка мифа вектора, который я притягиваю:
Version 450
Charset "WindowsCyrillic"
Delimiter ","
CoordSys Earth Projection 8, 1001, "m", 33, 0, 1, 6500000, 0 Bounds (-1749281.53901, -10002137.4978) (14749281.539, 10002137.4978)
TRANSFORM 0, 1.01, 6612393, 6882537
Columns 11
КадастровыйНомер Char(50)
ТипЦели Integer
Код Integer
Тип Integer
Название Char(100)
Примечание Char(150)
ВторичныйКод Integer
Error Logical
Celis Char(70)
Площадь_по_документу Float
Наименование Char(128)
Data

Подскажите пожалуйста, где еще чего исправить?

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

Re: создание проекции с аффинными преобразованиями

Сообщение Boris » 13 янв 2011, 16:06

Оператор MIF файла TRANSFORM имеет 4 параметра, а аффинное требует 6. Аффинное задается при задаче строки координатной системы, а это выражение согласно документации предназначено для изменения знака у координат или направления осей координат. Вполне возможно, что если карта не имеет искажений за масштаб, то 4 равны 6.

Раз не подошли аффинные преобразования, то ваш трансформация не была простым переносом-поворотом.
Скорее всего она была сделана на основе СК-63 или МСК вашего региона (Что-то западней Москвы, но восточней Калининграда :) ) и речь идет о смещенном начальном меридиане и нулевой точке отсчета.

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

Re: создание проекции с аффинными преобразованиями

Сообщение gamm » 13 янв 2011, 16:19

Boris писал(а):Оператор MIF файла TRANSFORM имеет 4 параметра, а аффинное требует 6. Аффинное задается при задаче строки координатной системы, а это выражение согласно документации предназначено для изменения знака у координат или направления осей координат. Вполне возможно, что если карта не имеет искажений за масштаб, то 4 равны 6.
если есть поворот (даже без изменения масштаба), то все равно 6. Но если объект маленький (остров), то я бы затащил в R опорные точки, и посмотрел, что там и как. И попробовал поворот с переносом, и афинку. Выбрал, что получше, и в том же R поменял координаты.

romir
Участник
Сообщения: 67
Зарегистрирован: 27 ноя 2009, 14:09
Репутация: 0

Re: создание проекции с аффинными преобразованиями

Сообщение romir » 13 янв 2011, 17:12

Boris писал(а):Оператор MIF файла TRANSFORM имеет 4 параметра, а аффинное требует 6. Аффинное задается при задаче строки координатной системы, а это выражение согласно документации предназначено для изменения знака у координат или направления осей координат. Вполне возможно, что если карта не имеет искажений за масштаб, то 4 равны 6.
Раз не подошли аффинные преобразования, то ваш трансформация не была простым переносом-поворотом.
Скорее всего она была сделана на основе СК-63 или МСК вашего региона (Что-то западней Москвы, но восточней Калининграда :) ) и речь идет о смещенном начальном меридиане и нулевой точке отсчета.
Самое интересное, что через Регистрацию вектора (я так понимаю - это автоматизированное афинное преобразование) горизонтали встали идеально, а контур острова выдает какую-то ошибку. Системы одни и те же. Поэтому я и пытаюсь сейчас повторить афинное преобразование, только через правку мифа. Но толком не знаю какие коэффициенты куда вписывать - в какую часть шапки. Я пробовал разное - Мапинфо ругается, говорит, что ожидает не то увидеть, что видит :) Не могли бы вы привести пример синтаксиса шапки мифа с этими афинными преобразованиями? Или я вообще не в ту степь?

ПС:Притягиваемая карта строилась с нуля первоначально в местной системе координат. Вторая карта (к которой надо притянуть первую) строилась по топокарте (составленная по данным 1956 г) в проекции ГК 6 зона пулково 1942

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

Re: создание проекции с аффинными преобразованиями

Сообщение Boris » 14 янв 2011, 03:31

gamm писал(а): если есть поворот (даже без изменения масштаба), то все равно 6.
Я не готов сходу выписать все формулы, хотя это чистая тригонометрия, но все же перенос ( 1 точка для задания) и поворот (1 точка для задания) при сохранении масштаба и перпендикулярности осей координат требует двух точек для своего задания, что соответствует 4 параметрам. По крайней мере так же считает и утилита по трансформации от MStation
Clipboard012.jpg
Clipboard012.jpg (14.54 КБ) 16143 просмотра

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

Re: создание проекции с аффинными преобразованиями

Сообщение Boris » 14 янв 2011, 03:52

romir писал(а): Не могли бы вы привести пример синтаксиса шапки мифа с этими афинными преобразованиями?
Мне странно самого себя цитировать, тем более в пределах одной ветки, но вот здесь
viewtopic.php?f=17&t=6757&p=38272#p36851
во втором сверху "коде" идет полный формат заголовка MIF-Файла, после слов
Affine Units "m",
выписаны 6 параметров аффинного преобразования от спроецированных данных БЕЗ аффинного преобразования к нужным. Формат аффинных преобразований полностью совпадает с форматом оператора
Coorsys
из MapBasic'а, благо он теперь идет в нагрузку к любой MapInfo и имеет вполне достойный Help, что бы понять внутренне устройство команд, которыми пользуется Mapinfo при манипуляции с данными.
romir писал(а):Или я вообще не в ту степь?
Не могу сказать, поскольку не понял, что есть "та степь". Если речь идет о совмещении систем координат за счет аффинных преобразований, то вы на верном пути. "Регистрация вектора" и есть аффинное преобразование. От способа его исполнения результат не должен меняться.
Описанное поведение не очень понятно без картинки. Если горизонтали и остров лежат в разных углах карты, то это поведение нормально, если же изображения горизонталей и острова пересекаются, то тут вообще не понятно причем тут преобразования. Тут дело в расхождении данных, а может еще в каких не известных ошибках.
romir писал(а): ПС:Притягиваемая карта строилась с нуля первоначально в местной системе координат. Вторая карта (к которой надо притянуть первую) строилась по топокарте (составленная по данным 1956 г) в проекции ГК 6 зона пулково 1942
Что же до совпадения карт, то для того, что бы они совпали требуется что бы ваша местная была построена как аффинное преобразование от координат в соответствующей зоне СК-42. И тут все зависит от того, когда была построена ваша местная СК. Если до 1963 года, то тут может быть и СК производная от СК-42, а может и СК со своим собственным местным не только началом координат, но центральным меридианом. Если после - то есть большой шанс, что она строилась от СК-63.

romir
Участник
Сообщения: 67
Зарегистрирован: 27 ноя 2009, 14:09
Репутация: 0

Re: создание проекции с аффинными преобразованиями

Сообщение romir » 14 янв 2011, 12:03

Boris писал(а):Мне странно самого себя цитировать, тем более в пределах одной ветки, но вот здесь
viewtopic.php?f=17&t=6757&p=38272#p36851
во втором сверху "коде" идет полный формат заголовка MIF-Файла, после слов Affine Units "m",

Попав в эту ветку и увидев этот код, я подумал "Ура! Это то - что мне нужно!". Я скопировал Affine Units "m" с коэффициентами в шапку и тут Мапинфо при импорте мифа начала кочевряжится - что ожидала чего-то другого, а нашла не то. Я копировал Affine Units "m" в разные места шапки, но так и не добился желаемого. Подскажите, плз, в какое место шапки нужно прописывать Affine Units "m" и где найти описания какой коэффициент на какой параметр влияет? Если поставить шесть нолей - никаких преобразований не будет - Так? Можно методом поочередного изменения коэффициентов отслеживать изменения, но это какой-то первобытный способ вслепую...
Boris писал(а):выписаны 6 параметров аффинного преобразования от спроецированных данных БЕЗ аффинного преобразования к нужным. Формат аффинных преобразований полностью совпадает с форматом оператора Coorsys из MapBasic'а,
Не очень понятно. Т.е. если в шапке мифа есть Coordsys, то можно задавать преобразования с помощью его коэффициентов (в коде: "m", 33, 0, 1, 6500000, 0 )? Или это совсем не о том?
CoordSys Earth Projection 8, 1001, "m", 33, 0, 1, 6500000, 0 Bounds (-1749281.53901, -10002137.4978) (14749281.539, 10002137.4978)
TRANSFORM 0, 1.01, 6612393, 6882537
"Регистрация вектора" и есть аффинное преобразование. От способа его исполнения результат не должен меняться. Описанное поведение не очень понятно без картинки.
Значит я не ошибся. :) Картинки моей проблемы прикладываю, там же описание.
Boris писал(а):а может и СК со своим собственным местным не только началом координат, но центральным меридианом.
[/quote]
Так оно и есть.
Вложения
GK.zip
(958.61 КБ) 493 скачивания

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

Re: создание проекции с аффинными преобразованиями

Сообщение gamm » 14 янв 2011, 12:39

Boris писал(а):
gamm писал(а): если есть поворот (даже без изменения масштаба), то все равно 6.
Я не готов сходу выписать все формулы, хотя это чистая тригонометрия, но все же перенос ( 1 точка для задания) и поворот (1 точка для задания) при сохранении масштаба и перпендикулярности осей координат требует двух точек для своего задания, что соответствует 4 параметрам
имелись в виду 6 коэффициентов (не независимых параметров), столько в TRANSFORM, про который шла речь, не записывается.

после некоторого раздумья ... вроде независимых 3 параметра, сдвиг (dX,dY) и угол поворота.

Ответить

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

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

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