SASGIS

Веб-картография и навигация

Global Mapper

Обсуждение различной информации связанной с картографией в САСе, а также сторонние программные продукты для связки с САСом

Модератор: Tolik

Re: Global Mapper

Сообщение valsw » 23 апр 2014, 18:50

Благодарю за ответ, garl!
Это был бы идеальный вариант. К примеру, брать с сервера тайл 256х280, подрезать снизу до стандартных 256, а последующий нижестоящий тайл уже брать с поправкой на подрезку предыдущего. К сожалению, личные познания в Паскале оставляют желать лучшего. Может быть есть уже готовый скрипт для эстонской EPSG:3301, которой можно было бы использовать как пример для изучения?
valsw
Новичок
 
Сообщения: 15
Зарегистрирован: 22 апр 2014, 16:36
Благодарил (а): 7 раз.
Поблагодарили: 3 раз.

Re: Global Mapper

Сообщение garl » 23 апр 2014, 19:31

valsw писал(а):Благодарю за ответ, garl!
Это был бы идеальный вариант. К примеру, брать с сервера тайл 256х280, подрезать снизу до стандартных 256, а последующий нижестоящий тайл уже брать с поправкой на подрезку предыдущего. К сожалению, личные познания в Паскале оставляют желать лучшего. Может быть есть уже готовый скрипт для эстонской EPSG:3301, которой можно было бы использовать как пример для изучения?


для начала сделайте себе zmp по аналогии с вот этим
https://bitbucket.org/sas_team/sas.plus ... at=default
чтобы он брал тайлы 256*256 с нормальной привязкой и ватермарками, затем приступим к второй фазе операции : "обрезке копирайтов" ))
Russian NDN Team
QIP NightlyTester

За это сообщение автора garl поблагодарил:
valsw (24 апр 2014, 02:48)
Рейтинг: 5.26%
 
Аватара пользователя
garl
Гуру
 
Сообщения: 1625
Зарегистрирован: 16 июл 2008, 14:40
Откуда: Краснодар, Кубанская столица.
Благодарил (а): 97 раз.
Поблагодарили: 245 раз.

Re: Global Mapper

Сообщение valsw » 23 апр 2014, 23:11

garl писал(а):для начала сделайте себе zmp по аналогии с вот этим
https://bitbucket.org/sas_team/sas.plus ... at=default
чтобы он брал тайлы 256*256 с нормальной привязкой и ватермарками, затем приступим к второй фазе операции : "обрезке копирайтов" ))


Добро, пробую. По params.txt вопросов не возникло, всё понятно. Последную строку прописал вот такую (нашёл в прикреплённом файле к теме про proj4.dll):
Proj4Args=+proj=lcc +lat_1=59.33333333333334 +lat_2=58 +lat_0=57.51755393055556 +lon_0=24 +x_0=500000 +y_0=6375000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs
Со скриптом разобраться пока не получается. Изменяемая часть URL для сервера следующего вида (отследил при работе GM):
350000,6350000,750000,6650000&WIDTH=1164&HEIGHT=873 (рабочая поверхность всей карты, но на данном минимальном масштабе карта не видна в GM)
Четыре числа подряд- Y, X, Y, X левого нижнего и правого верхнего углов соответственно в EPSG:3301. Отсчёт ведётся от левого нижнего угла. Масштаб отдаваемого тайла явно в URL не задаётся, и похоже, что определяется соотношением координат углов с размерами отдаваемого тайла. Вот изменяемая часть URL при минимальном масштабе, на котором карта становится видна в GM:
574477.403,6513061.922,587844.952,6519445.694&WIDTH=1919&HEIGHT=916
valsw
Новичок
 
Сообщения: 15
Зарегистрирован: 22 апр 2014, 16:36
Благодарил (а): 7 раз.
Поблагодарили: 3 раз.

Re: Global Mapper

Сообщение valsw » 24 апр 2014, 02:48

valsw писал(а):Со скриптом разобраться пока не получается.


Разобрался. Пришла мысль, т.к. тайлы всегда будем брать постоянного размера, то решил перенести &WIDTH=256&HEIGHT=256 в DefURLBase. Проверил браузером изменённый URL - тайл карты загрузился. Затем убрал из скрипта запрос зума (9), строка выглядит теперь так:
ResultURL := GetURLBase + RoundEx(M.X) + ',' + RoundEx(N.Y) + ',' + RoundEx(N.X) + ',' + RoundEx(M.Y);
Запустил SAS.Планету и карта загружается на 14 и 15 зумах! :D
Привязка карты есть, проверил по OSM-слою, дороги примерно совпадают. Но пока не работает перепроецирование из LCC в Меркатор. На границе зон О-34 и О-35 расхождения практически не заметны, но чем дальше на восток, тем "недоворот" до Меркатора всё больше и больше. Пример в приложенном файле. К сожалению, сервер тайлы отдаёт в формате png, а это значит, что из-за недостатка цветов при трансформации тайлов появятся неприятные искажения на прямых линиях. И есть небольшое несовпадение с бланковкой ГШ по долготе. Но, по-любому, дело сдвинулось с мёртвой точки, и я весьма благодарен вам за участие и помощь!
Вложения
karta.jpg
valsw
Новичок
 
Сообщения: 15
Зарегистрирован: 22 апр 2014, 16:36
Благодарил (а): 7 раз.
Поблагодарили: 3 раз.

Re: Global Mapper

Сообщение garl » 24 апр 2014, 08:01

valsw, а Ваш wms если его попросить не согласится отдавать в православной 3785?
Russian NDN Team
QIP NightlyTester
Аватара пользователя
garl
Гуру
 
Сообщения: 1625
Зарегистрирован: 16 июл 2008, 14:40
Откуда: Краснодар, Кубанская столица.
Благодарил (а): 97 раз.
Поблагодарили: 245 раз.

Re: Global Mapper

Сообщение valsw » 24 апр 2014, 12:45

garl, проверил браузером на рабочем URL 3785, а заодно до кучи и 3395 с 4326, тайл не отдаёт и выдаёт ошибку (файл application/vnd.ogc.se_xml). Похоже на то, что действительно работает лишь в 3301. И без явного указания в URL SRS=EPSG:3301 таже самая ошибка.
valsw
Новичок
 
Сообщения: 15
Зарегистрирован: 22 апр 2014, 16:36
Благодарил (а): 7 раз.
Поблагодарили: 3 раз.

Re: Global Mapper

Сообщение zed » 24 апр 2014, 21:27

Обсуждение wms в этой теме несколько оффтопно, но коль уж начали, то присоединюсь.

1. У wms нельзя запрашивать тайлы 256*256 pix, если он не поддерживает проекции, известные SAS
2. Разрешение тайла в запросе нужно вычислять, для каждого тайла отдельно
3. Полученный от сервера тайл нужно перепроецировать в одну из поддерживаемых в SAS проекций
4. После перепроецирования, мы должны получить тайл 256*256 pix, который уже можно скармливать SAS

Таким образом, у нас 2 проблемы: как вычислить разрешение тайла для запроса и как перепроецировать полученный тайл. И решить эти проблемы сходу не получится - SAS пока что не готов к такому "из коробки", поэтому придётся программировать на стороне пользователя. Опять же, на стороне пользователя возможны 2 варианта: написание dll, которую можно вызывать из zmp (старожилы помнят как раньше работали Яндекс.Пробки? Ага, через dll, написанную пользователем и подключённую к zmp) и написание и встраивание проксика между SAS и wms.

Ну а теперь про то, как теоретически решаются проблемы. Есть такая библиотека и набор консольных утилит, под одним общим названием - GDAL, в которой есть возможность перепроецировать растры между всеми известными науке проекциями (юзается proj4). И всё становится очень просто. Для начала, нам нужно взять "бланк" тайла 256*256 pix в проекции A, которую поддерживает SAS и перепроецировать его в проекцию B, в которой отдаёт тайлы наш wms. Таким образом, мы получим бланк тайла, разрешением Wb*Hb и именно это разрешение и нужно будет подставить в запрос к серверу. Над полученным же от сервера тайлом, мы должны проделать обратную операцию: из проекции B, тайл (уже тайл, а не бланк) разрешением Wb*Hb перепроецировать в проекцию A, получив тайл разрешением Wa*Ha, которое, в итоге, должно точно равняться заветным 256*256 pix. И только после всех этих мытарств мы можем со спокойной душой отдавать тайл SAS - никаких смещений не будет (зато появятся артефакты от перепроецирования - возможно сильные, возможно и незаметные, но тут уж не попишешь...).

У GDAL есть API для кучи языков:
C
C++
Perl
Python
VB6 Bindings (not using SWIG)
Java
C# / .Net
Ruby
R

Плюс, как я уже упоминал - консольные утилиты, которые можно смело использовать откуда угодно, пусть и с накладными расходами. Для перепроецирования тайлов достаточно утилиты gdalwarp.

За это сообщение автора zed поблагодарили: 3
garl (24 апр 2014, 22:03) • rass (24 апр 2014, 22:37) • valsw (25 апр 2014, 01:14)
Рейтинг: 15.79%
 
zed
Гуру
 
Сообщения: 2888
Зарегистрирован: 16 авг 2008, 20:21
Благодарил (а): 89 раз.
Поблагодарили: 525 раз.

Re: Global Mapper

Сообщение valsw » 25 апр 2014, 02:48

zed, благодарю, что откликнулись! И простите за оффтоп.
Тактика понятна. Буду эксперементировать. Немного недопонял лишь это:
zed писал(а):Для начала, нам нужно взять "бланк" тайла 256*256 pix в проекции A, которую поддерживает SAS

Откуда же его взять, если WMS категорически не поддерживает проекцию SAS? Думаю, что, с какой-нибудь другой карты той же местности в проекции 3785 и индентичного зума. Т.е. с другого онлайн-источника, но, наверное, одновременное подключение к двум картам в SAS невозможно, значит тогда прямо из полного рабочего кэша другой карты. Тогда это будет уже не "бланк" тайла, но ведь картинка на нём никакой роли не играет. Строка скрипта, в которой фомируется изменяемая часть URL, останется прежней, за исключением того, что добавится концовка (её нужно будет написать в соответствии с правилами Паскаля):
&WIDTH=Wb&HEIGHT=Hb
Правильно мыслю? Как думаете, чем можно будет определять разрешение полученного тайла в проекции B, чтобы передавать параметры Wb*Hb скрипту для запроса?
zed писал(а):зато появятся артефакты от перепроецирования - возможно сильные, возможно и незаметные, но тут уж не попишешь...

А это, наверное, возможно решить путём перегона "на лету" полученного от сервера тайла в проекции B перед перепроецированием его в проекцию А в полноцветный BMP консольными утилитами из пакета ImageMagick.
Если получится, то карта будет с логотипом на каждом тайле. Выводить "на лету" (изучил тему) из-за возможных артефактов не вариант, потому что это карта, а не снимок. Остаётся только подрезать, благо логотип постояннен по местоположению на каждом тайле. Новая "засада" :) Может, всё таки проще заставить Global Mapper брать строки высотой 512 со смещением на подрезку предыдущей строки? Тайлы у него, судя по информации в данной теме, 512х512.
valsw
Новичок
 
Сообщения: 15
Зарегистрирован: 22 апр 2014, 16:36
Благодарил (а): 7 раз.
Поблагодарили: 3 раз.

Re: Global Mapper

Сообщение zed » 25 апр 2014, 10:15

valsw писал(а):Откуда же его взять

Координаты углов тайла взять в скрипте, они там есть, а сам тайл-бланк - сгенерировать как обычную пустую битмапку 256*256 pix. Просто gdalwarp работает с растрами, вот и нужен бланк, чтобы он что-то смог перепроецировать, в проекцию B. По-хорошему, если знать алгоритм перехода из проекции А в В, то можно и без растра пересчитать пиксели и вычислить конечное разрешение Wb*Hb, но это нужно лезть в дебри GDAL.
valsw писал(а):Строка скрипта, в которой фомируется изменяемая часть URL, останется прежней, за исключением того, что добавится концовка (её нужно будет написать в соответствии с правилами Паскаля):
&WIDTH=Wb&HEIGHT=Hb

Да.
valsw писал(а):Как думаете, чем можно будет определять разрешение полученного тайла в проекции B, чтобы передавать параметры Wb*Hb скрипту для запроса?

Как я уже говорил, определять можно средствами GDAL. А GDAL можно использовать либо через свою dll в zmp, либо через свой проксик. Кстати, я в предыдущем посте упустил один момент - из скрипта мы не сможем сделать полноценное перепроецирование полученного тайла из В в А, т.к. в SAS нету скриптовой постобработки ответа сервера. Но тайл автоматом приведётся к разрешению 256*256 pix, правда, линейным алгоритмом, что вероятно несколько снизит точность наложения растра. Хотя, сейчас этот линейный алгоритм используется для отображения тайлов из кэша GoogleEarth и особых проблем с точность там не заметно.
valsw писал(а):А это, наверное, возможно решить путём перегона "на лету" полученного от сервера тайла в проекции B перед перепроецированием его в проекцию А в полноцветный BMP консольными утилитами из пакета ImageMagick.

Перепроецирование и так работает с полноцветными растрами, так что дополнительно там ничего не нужно вкорячивать.
valsw писал(а):Может, всё таки проще заставить Global Mapper брать строки высотой 512 со смещением на подрезку предыдущей строки? Тайлы у него, судя по информации в данной теме, 512х512.

Вот по этому поводу ничего сказать не могу.

За это сообщение автора zed поблагодарил:
valsw (25 апр 2014, 14:20)
Рейтинг: 5.26%
 
zed
Гуру
 
Сообщения: 2888
Зарегистрирован: 16 авг 2008, 20:21
Благодарил (а): 89 раз.
Поблагодарили: 525 раз.

Re: Global Mapper

Сообщение Ficus » 02 янв 2015, 04:55

Столкнулся с проблемой подготовки в GM (v.16) карты для Саспланеты (Палеарктика).
Исходник: http://www.zin.ru/animalia/coleoptera/i ... arctic.gif (1,1 Мб).
Собственно, карту привязываю в GM по узлам сетки (по всем), меняю проекцию на Меркатора и режу на тайлы, все работает, но карта не ложится - в средних широтах, до 60 градуса с.ш. все более-менее хорошо, но чем дальше на север, тем хуже. 70-я параллель карты отображается почти на 40 км южнее, чем должна, 80-я - на 20 км.
Потыкавшись, пришел к мысли, что, вероятно, исходно неправильно определил проекцию карты - я решил, что это равновеликая эллиптическая Эккерта (Eckert IV), что, вероятно, не так :oops: .
Подскажите, в чем я ошибся - если в проекции, можно ли как ее определить точно на такой картинке?
___________
Нарезанная для САСа карта (z1-z4) с zmp, 5,2 Мб http://rusfolder.com/42672237
Ficus
Новичок
 
Сообщения: 1
Зарегистрирован: 25 окт 2011, 03:18
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.

Пред.След.

Вернуться в Другие программы

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

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