TRANSFORM в MapInfo

Не знаете, где задать вопрос? Задавайте здесь.
Виктор20
Интересующийся
Сообщения: 18
Зарегистрирован: 21 май 2013, 08:23
Репутация: 0

TRANSFORM в MapInfo

Сообщение Виктор20 » 21 окт 2016, 07:11

У меня не получается правильно преобразовать координаты в таблицах.
Проблема в том, что преобразовываются координаты по формулам:
U=0.99983072*X-0.02111343*Y+403000.622
V=0.0211343*X+0.99983072*Y+192336.18
Параметров для Гауса-Крюгера я не знаю. Пользуюсь MapInfo 7,8 Non-Earth meters.
Нужен и поворот и сдвиг.
Как это сделать правильно?

Помогите!
Вложения
MAPINFOW_PRJ.txt
Mapinfow.prj
(112.59 КБ) 852 скачивания

DDim
Интересующийся
Сообщения: 24
Зарегистрирован: 24 дек 2015, 15:22
Репутация: 1

Re: TRANSFORM в MapInfo

Сообщение DDim » 21 окт 2016, 10:32

Вам надо к параметрам той проекции, в которой слои изначально дописать параметры афинного преобразования, вот из Справочника Мапинфо:
В этом примере мы используем систему координат Поперечную Меркатора, построенную в UTM, при этом в роли топоцентрической (региональной) системы координат выступает NAD 1983. Надо добавить следующую строку в файл MAPINFOW.PRJ:
"UTM Zone 1 (NAD 83)", 8, 74, 7, -177, 0, 0.9996, 500000, 0
Теперь полученную проекцию необходимо подвергнуть аффинным преобразованиям (см. раздел, посвященный аффинным преобразованиям), и при этом использовать следующие параметры:
Единицы измерения = метры; A=0.5; B=-0.866; C=0; D=0.866; E=0.5; и F=0
В этом случае строка с добавленными параметрами аффинных преобразований будет выглядеть так:
"UTM Zone 1 (NAD 83) - поворот на 60 градусов", 1008, 74, 7, -177, 0, 0.9996, 500000, 0, 7, 0.5, -0.866, 0, 0.866, 0.5, 0
В вашем случае:
A = 0.99983072 B = -0.02111343 C = 403000.622 D = 0.0211343 E = 0.99983072 F = 192336.18
то есть надо, к константе 8 или какая у вас в проекции исходной прибавить 1000, и в конце дописать:

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

7, 0.99983072, -0.02111343, 403000.622, 0.0211343, 0.99983072, 192336.18

Виктор20
Интересующийся
Сообщения: 18
Зарегистрирован: 21 май 2013, 08:23
Репутация: 0

Re: TRANSFORM в MapInfo

Сообщение Виктор20 » 21 окт 2016, 10:55

Спасибо!
Еще один вопрос: А как найти проекцию, которой я пользуюсь в этом огромном файле .prj?

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

Re: TRANSFORM в MapInfo

Сообщение trir » 21 окт 2016, 10:59

"--- Non-Earth ---"
"Non-Earth (inches)", 0, 2
"Non-Earth (feet)", 0, 3
"Non-Earth (yards)", 0, 4
"Non-Earth (miles)", 0, 0
"Non-Earth (millimeters)", 0, 5
"Non-Earth (centimeters)", 0, 6
"Non-Earth (meters)", 0, 7
"Non-Earth (kilometers)", 0, 1
А какая у вас СК?

Виктор20
Интересующийся
Сообщения: 18
Зарегистрирован: 21 май 2013, 08:23
Репутация: 0

Re: TRANSFORM в MapInfo

Сообщение Виктор20 » 21 окт 2016, 11:03

Абакан 19 .
Теперь все переходят в 166 (Хакасия).

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

Re: TRANSFORM в MapInfo

Сообщение trir » 21 окт 2016, 11:25

"GK Местная №166", 8, 1001, 7, 90, 0, 1, 107543.30, -5540944.50
"МСК-166", 8, 1001, 7, 92.48333333333, 0, 1, 500000, -5716586.442

Виктор20
Интересующийся
Сообщения: 18
Зарегистрирован: 21 май 2013, 08:23
Репутация: 0

Re: TRANSFORM в MapInfo

Сообщение Виктор20 » 21 окт 2016, 11:35

Но я перехожу с СК-19
а ее данные?
Так теперь надо будет дописать в файл prj? А как программа выберет, какой ей нужно пользоваться строкой?

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

Re: TRANSFORM в MapInfo

Сообщение trir » 21 окт 2016, 11:38

Идёте в гор. арх. и просите параметры МСК 19
а потом в Росреестр и просите параметры МСК 166

Аватара пользователя
Игорь Белов
Гуру
Сообщения: 2240
Зарегистрирован: 04 янв 2011, 22:00
Репутация: 1513
Откуда: Казань

Re: TRANSFORM в MapInfo

Сообщение Игорь Белов » 21 окт 2016, 11:49

Я понял задачу так.

Дано: слои в системе координат СК-1.
Преобразование:
X2 = 0.99983072 * X1 - 0.02111343 * Y1 + 403000.622
Y2 = 0.02111343 * X1 + 0.99983072 * Y1 + 192336.18
Найти: слои в системе координат СК-2.

Решение.

Экспортируем один из слоёв в формат MIF. Смотрим строку CoordSys. Предположим, там такое:

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

CoordSys NonEarth Units "m" Bounds (1000, 6000) (5000, 9000)
"Bounds" задаёт границы слоя. Если слоёв много и нет уверенности в том, что СК задана для всех единообразно, придётся открыть все слои в окне карты и убедиться, что координаты крайних объектов помещаются в области 1000 ≤ X ≤ 5000, 6000 ≤ Y ≤ 9000.

Воспользуемся электронными таблицами или чем-то ещё, чтобы пересчитать углы ограничивающего прямоугольника из СК-1 в СК-2.
img20161021112846.png
img20161021112846.png (12.67 КБ) 10145 просмотров
Выбираем минимальные и максимальные значения для Bounds в СК-2:

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

403810.43185, 198356.27775, 407873.09502, 201440.22363
Записываем новую систему координат СК-2 в файл MAPINFOW.PRJ:

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

"CK-2", 3000, 7, 7, 0.99983072, -0.02111343, 403000.622, 0.02111343, 0.99983072, 192336.18, 403810.43185, 198356.27775, 407873.09502, 201440.22363
Теперь просто сохраняем слои в систему CK-2. Можно по одному, можно сразу все утилитой batchtools. Задача решена.

Рекомендуется, конечно, работать в проекциях.
The purpose of computing is insight, not numbers

Виктор20
Интересующийся
Сообщения: 18
Зарегистрирован: 21 май 2013, 08:23
Репутация: 0

Re: TRANSFORM в MapInfo

Сообщение Виктор20 » 21 окт 2016, 12:19

Вообще-то, конечно было X min =2479 , Y min = 5890 , X max = 17363, Y max = 16001

Виктор20
Интересующийся
Сообщения: 18
Зарегистрирован: 21 май 2013, 08:23
Репутация: 0

Re: TRANSFORM в MapInfo

Сообщение Виктор20 » 21 окт 2016, 12:32

Я не до конца понял, еще раз задам вопрос:
Я пользовался системой СК-19. В файл mapinfo.prj нужно записать СК-19 и приплюсовать 7,0.99983072, ...
Но в mapinfo.prj нет такой СК. Где её взять?
И как программа MapInfo узнает, что именно эту строку нужно взять?

DDim
Интересующийся
Сообщения: 24
Зарегистрирован: 24 дек 2015, 15:22
Репутация: 1

Re: TRANSFORM в MapInfo

Сообщение DDim » 21 окт 2016, 13:57

1. Берете экспортируете слой из Mapinfo в Mif.
2. Далее проделываете операцию которую описал Игорь Белов, и получаете строку СК-2 для Mapinfo и вписываете её в MAPINFOW.PRJ
3. Дальше средствами Mapinfo пересохраняете исходный слой в этой СК-2.

После этих операций координаты в этом слое должны стать численно равны координатам МСК-166

4. Экспортируете этот слой в MIF, а дальше импортируете обратно указав уже что это МСК-166 (добавив предварительно её параметры в MAPINFOW.PRJ)

Вроде так.

Аватара пользователя
Игорь Белов
Гуру
Сообщения: 2240
Зарегистрирован: 04 янв 2011, 22:00
Репутация: 1513
Откуда: Казань

Re: TRANSFORM в MapInfo

Сообщение Игорь Белов » 21 окт 2016, 15:21

С проекциями работать проще: совсем не обязательно возиться с Bounds.

Если я всё правильно понял,
  • преобразование из городской СК г. Абакан в МСК-19;
  • относительно "общечеловеческих" координат;
  • значение 0.0211343 следует читать как 0.02111343;
  • МСК-19 есть второе определение trir.
Необходимо вычислить набор параметров для обратного преобразования из проекции в местную (городскую) систему:

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

0.999723504024, 0.021111165919, -406949.63495810918, -0.021111165919, 0.999723504024, -183775.18682357998
Добавим нужные проекции. Для этого копируют файл MAPINFOW.PRJ из папки, куда установлена программа, в папку, где хранятся настройки пользователя (папки CustSymb, LayoutTemplate, ThmTmplt, файлы MapInfow.clr, MapInfow.fnt, MapInfow.pen). Из этого файла можно удалить все ненужные проекции. Можно добавить свои проекции. Например, добавим в конец файла группу из трёх проекций:

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

"--- Хакасия ---"
"GK Местная №166", 8, 1001, 7, 90, 0, 1, 107543.30, -5540944.50
"МСК-19", 8, 1001, 7, 92.48333333333, 0, 1, 500000, -5716586.442
"Абакан", 1008, 1001, 7, 92.48333333333, 0, 1, 500000, -5716586.442, 7, 0.999723504024, 0.021111165919, -406949.63495810918, -0.021111165919, 0.999723504024, -183775.18682357998
СК "Абакан" и есть проекция Ваших данных.

Экспортируйте слои в MIF, замените в каждом строку CoordSys на такую:

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

CoordSys Earth Projection 8, 1001, "m", 92.48333333333, 0, 1, 500000, -5716586.442 Affine Units "m", 0.999723504024, 0.021111165919, -406949.63495810918, -0.021111165919, 0.999723504024, -183775.18682357998
и импортируйте. Новые слои будут в СК "Абакан". Теперь можно сохранить их копии в другой проекции, например, "GK Местная №166". По слухам, обе СК основаны на СК-42, так что проблемы с несоответствием датумов быть не должно. Sed tamen potest esse totaliter aliter.
The purpose of computing is insight, not numbers

Виктор20
Интересующийся
Сообщения: 18
Зарегистрирован: 21 май 2013, 08:23
Репутация: 0

Re: TRANSFORM в MapInfo

Сообщение Виктор20 » 24 окт 2016, 04:06

Огромное спасибо!

Виктор20
Интересующийся
Сообщения: 18
Зарегистрирован: 21 май 2013, 08:23
Репутация: 0

Re: TRANSFORM в MapInfo

Сообщение Виктор20 » 25 окт 2016, 11:59

К сожалению, перевод, предложенный Игорем Беловым не получился так, как надо. Все координаты перешли сами в себя.
Городская СК - это и есть МСК-19(ее координаты не достигают даже 20000). Ее нужно перевести в МСК-166, у которой 400000 и 200000.
У trir 1-я строка - это МСК-166 , а что означает 2-я строка?

Пожалуйста, подскажите, на какую строку в mif заменить Coordsys, чтобы получился правильный перевод в МСК-166.

Ответить

Вернуться в «Я новичок!»

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

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