Страница 1 из 2

Изменение проекции в *.lyr файле

Добавлено: 14 ноя 2016, 09:45
5Nap
Привет!
Есть lyr-файл, описывающий тайловый слой из сети. В свойствах у него, соответственно, значится Data Type: Tiled Internet Layer. Создан в ArcGIS Online с последующим сохранением на компе. При создании ему по умолчанию задаётся проекция WGS_1984_Web_Mercator_Auxiliary_Sphere, что конкретно для этого слоя неверно.
Два вопроса - можно ли её изменить и можно ли как-то руками залезть в сам lyr-файл?

Re: Изменение проекции в *.lyr файле

Добавлено: 14 ноя 2016, 10:16
geouser
Я не спец по тайловым и прочим онлайн слоям, скажу сразу.
Файл слоя это как бы его законсервированное отображение в программе ArcMap, со ссылкой на источник данных.
При подгрузке файла слоя обычно можно изменить настройки и пересохранить файл слоя используя правый щелчок мышью на слое и меню "Сохранить как файл слоя".
Вполне возможно, файл слоя можно также изменить командами Python. Это типа не открывая его вообще.
Но слой так или иначе должен поддерживать изменение самого себя. :D
Наверное есть слои, параметры которых менять нельзя.

Re: Изменение проекции в *.lyr файле

Добавлено: 14 ноя 2016, 10:30
Александр Мурый
Вы уверены, что проекция неверна? Обычно при создании тайлов используется именно Web Mercator.
ArcGIS может перепроецировать тайловый слой "на лету"? Если да, то проблем быть не должно.

Re: Изменение проекции в *.lyr файле

Добавлено: 14 ноя 2016, 10:38
5Nap
geouser писал(а):При подгрузке файла слоя обычно можно изменить настройки и пересохранить файл слоя используя правый щелчок мышью на слое и меню "Сохранить как файл слоя".
Вполне возможно, файл слоя можно также изменить командами Python.
В этом случае никаких вариантов изменения нет. Т.е. при "обычном" слое есть варианты "Change Data Source" и тд, в случае с тайловым - вариантов что-то сделать никаких. Save as Layer даёт возможность лишь поменять версию ArcGIS'а (причем при версии ниже 10.1, вроде, всё вообще перестаёт открываться. Подозреваю, что ArcGIS просто не поддерживал тайловые слои в этих версиях.)
Пробовать перепроецировать через arcpy пробовал. К сожалению, неудачно.
Александр Мурый писал(а):Вы уверены, что проекция не верна? Обычно при создании тайлов используется именно Web Mercator.
Абсолютно. Насчёт перепроекции "на лету" - надеюсь, что да, у меня нет возможности проверить, пока я её не поменяю:)

Re: Изменение проекции в *.lyr файле

Добавлено: 14 ноя 2016, 13:12
geouser
Похоже на то, что:
1) Проекция Web Mercator ... , как мне тоже кажется, является более чем естественной для тайлового слоя, тем более с ArcGIS Online. Почти всё (или всё) что сделано в ArcGIS Online со стороны ESRI, по умолчанию в этой проекции, тем более тайлы. Поскольку они по любому являются подстилкой для других слоёв, эта проекция может "прилипать" и к векторным слоям тоже?
Я AG Online особо не пользуюсь, если честно.
2) Поскольку слой чужой, поменять его параметры не удастся, как я и думал. Это уже решает вопрос отрицательно. Файл слоя указывает на огромный массив растров, находящихся у чужого дяди вдалеке отсюда.
3) Если ArcGIS перепроецирует тайловый слой на лету, то она делает это сразу. Достаточно лишь загрузить требуемый файл слоя, и поменять правой кнопкой мыши проекцию *карты* (фрейма данных, она же "Слои" в самом верху слоёв) на любую другую, отличную от WebM. Менять параметры слоя не надо.

Re: Изменение проекции в *.lyr файле

Добавлено: 14 ноя 2016, 13:36
5Nap
geouser писал(а):Похоже на то, что:
1) Проекция Web Mercator ... , как мне тоже кажется, является более чем естественной для тайлового слоя, тем более с ArcGIS Online. Почти всё (или всё) что сделано в ArcGIS Online со стороны ESRI, по умолчанию в этой проекции, тем более тайлы.
Всё так. Вот только, к сожалению, не все так считают. Но АГ Онлайн по умолчанию задаёт Веб Меркатор без возможности что-то указать. Отсюда и берётся неверно прописанная проекция в слое (в lyr-файле, тайлы не имеют никакой проекции)
geouser писал(а):2) Поскольку слой чужой, поменять его параметры не удастся, как я и думал. Это уже решает вопрос отрицательно. Файл слоя указывает на огромный массив растров, находящихся у чужого дяди вдалеке отсюда.
3) Если ArcGIS перепроецирует тайловый слой на лету, то она делает это сразу. Достаточно лишь загрузить требуемый файл слоя, и поменять правой кнопкой мыши проекцию *карты* (фрейма данных, она же "Слои" в самом верху слоёв) на любую другую, отличную от WebM. Менять параметры слоя не надо.
Он прекрасно перепроецирует на лету в любую проекцию. Но исходная проекция указана неверно, это не Веб Меркатор. Поэтому и все результаты перепроецирования тоже неверны.

Re: Изменение проекции в *.lyr файле

Добавлено: 14 ноя 2016, 14:22
amnesiac
А можете подробнее описать ситуацию - как создавался тайловый слой (нигде не нашла описания, как сделать это в AG Online, знаю только как в AG for Server это делается) и дать ссылку на сам слой посмотреть?

Re: Изменение проекции в *.lyr файле

Добавлено: 14 ноя 2016, 15:07
5Nap
amnesiac писал(а):А можете подробнее описать ситуацию - как создавался тайловый слой (нигде не нашла описания, как сделать это в AG Online, знаю только как в AG for Server это делается) и дать ссылку на сам слой посмотреть?
В окне карты Add->Add Layer From Web->A Tile Layer. Там дальше разбить адрес по маске https://{subDomain}.domain.com/<path>/{level}/{col}/{row}.jpg

После этого карта сохраняется, закрывается. На вкладке My Content есть список всех карт, рядом с каждой есть опция Open In ArcGIS for Desktop. Она сохраняет файл item.pkinfo, представляющий из себя xml со ссылкой на данные на портале ArcGIS'а. Если открыть его в ArcMAP, то в проекте будет этот самый слой с Data Type = Tiled Internet Layer. Единственное, что с ним можно сделать - сохранить как lyr.

Ну и проблема, собственно, в том, что этому слою по умолчанию прописывается Web Mercator даже если это не так.

Пример слоя - это яндексовский слой. Поскольку подобное использование их тайлов полу-легально, и, насколько я могу судить, на форуме есть много народу, не приветствующего подобное полу-легальное использование, сам lyr файл прикладывать не буду)
Ссылка на тайлы - https://{subDomain}.maps.yandex.net/tiles?l=map&v=4.127.2&x={col}&y={row}&z={level}&scale=1&lang=ru_RU

subDomain = [vec01, vec02, vec03, vec04]

Re: Изменение проекции в *.lyr файле

Добавлено: 15 ноя 2016, 09:48
geouser
Я вообще не могу ничего понять.
Вы берёте чужой тайловый слой (который наверняка в проекции Web Mercator), и говорите, что его проекция "неверная". А какая верная? Откуда такая информация?
А зачем добавлять чужой тайловый слой в ArcGIS Online, чтобы затем сохранить его в lyr файл? А не проще ли в ArcMap сразу добавить искомый слой и играться с ним до посинения?
Я таких тайловых слоёв насоздавал кучу, и ВСЕ они в проекции web Mercator. А почему? А потому, что веб приложение использует слои ArcGIS Online, и все они в этой проекции. Потому у меня гигабайты созданных тайлов в проекции Web Mercator. И да, у тайлов ЕСТЬ проекция - именно эта, где большой север. Тайлы это скриншоты экрана, которые геопривязаны в какую-то проекцию, ничего более.
Не проще ли добавить искомый слой сразу в ArcMap и не мутить ничего с ArcGIS Online?
Обсуждать проекцию можно у своего векторного слоя, и то не накладывая его на чужие тайлы.
Поменять проекцию у чужих тайлов НЕЛЬЗЯ.
Кто-то задавал подозрительно похожий вопрос, ответы в целом в том же духе, что и здесь.
Поскольку вопрос очень экзотический и вне интереса для большинства обычных пользователей, правильно рекомендуют обратиться в ESRI - можно написать в форум, а если есть программа ArcGIS на оплаченной техподдержке, то запросить техподдержку. Случай весьма экзотический для большинства пользователей.

Re: Изменение проекции в *.lyr файле

Добавлено: 15 ноя 2016, 09:56
geouser
Собственно говоря, важное замечание.
Чужие тайлы это веб-ГИС-СЕРВИС, то есть оформленная услуга, как её оформил издатель сервиса. Вы ей лишь пользуетесь с правами "только чтение".
Обсуждать проекцию можно у шейпфайла у себя не жёстком диске.
Здесь же ... you are out of luck ... :D
Задавать параметры можно лишь своим собственным тайловым слоям, а не чужим. То есть вначале их самостоятельно создать.
Или ... бодаться с авторами чужого слоя, если Вы используете его легально, а им это интересно. :D

Re: Изменение проекции в *.lyr файле

Добавлено: 15 ноя 2016, 10:16
5Nap
Подозрительно похожий вопрос мой.
Проекция не неверная, она отличается от общепринятой в понимании ESRI. Яндекс используют эллиптическую, а не сферическую проекцию Меркатора.
Тайл - это png размером 256х256 (у Я, кстати, немного меньше), вместе с которым приходит информация об уровне, колонке и столбце. Это единственные координаты, которые там есть. Так же с ним не приходит никакой информации о проекции. И то и другое задаётся на уровне пользователя (если мы говорим о случае подрузки тайлов в АГ).
Я использую их с правами только чтение, верно. И я читаю, что сейчас экстент экрана ((37.3, 37.9), (55.5, 56.0)), масштаб такой и экстент задан в координатах. На моей стороне формируется запрос к сервису на тайлы по определённой схеме, в результате чего я получаю в ответ набор пнг, для которых заданы столбец и колонка. И опять же на моей стороне происходит интерпретация этих псевдо-координат, чтобы вывести эти тайлы на экран.
Ну так вот. Ошибка происходит на моменте запроса, т.к. задана неверная проекция. В слое. У меня. Тайловый сервис тут ни при чём, какие координаты он использует - известно. Вот я и хочу их выставить.
Если вы знаете, как создать подобный тайловый слой руками не чере АГ Онлайн и в какой-то момент дойти до стадии выбора проекции - буду очень признателен.

Re: Изменение проекции в *.lyr файле

Добавлено: 15 ноя 2016, 11:44
geouser
Я так и думал про авторство вопроса, судя по тематике и времени.
Опять немного неправильно. Картинки по запросу вытягиваются не абстрактные, а в системе. Конкретно Яндекс выдаёт их в своей системе (проекция), а предположим, ArcGIS Online - в своей. Изменить параметры проекции сервиса потребитель не может, только издатель.
Говорю это как издатель десятков сервисов, в том числе кэшированных размером в десятки гигабайт.
Когда какая-то карта публикуется, и тем более кэшируется, в какой-то проекции, изменить её пользователь уже не может.
Вы можете только, если это вообще возможно, запросить у Яндекса *правильный* lyr файл с параметрами их сервиса. И больше ничего здесь поменять нельзя.
Если система не дружит с системой ArcGIS Online (случайно или намеренно), это проблема только этой системы. Потому что система ArcGIS Online придумана конкретными людьми как стандарт, на котором работает 99% или все 100% в системе ArcGIS.
Изменить проекцию в терабайтах кэша Яндекс карт у Вас нет ни технической, ни административной возможности. Этот сервис поставляется в режиме "только чтение".
Я могу повыпендриваться и опубликовать большой сервис в любой проекции и закэшировать его. Но ... он не будет дружить с ArcGIS Online, то есть не будет накладываться ни на одну их подложку, в веб системе.
Речь здесь идёт о чём ... об эллипсоиде и геоиде как бы, параметрах проекции. Нет абстрактной координаты с X и Y, а есть координата в системе Pulkovo 42, WGS 84, Web Mercator и т.п., где каждый тайл кэшированного сервиса уже посажен на место с учётом конкретного эллипсоида-геоида и параметров (сдвига, например). ArcGIS вообще не понимает проекции без геоида (это кстати наследие MapInfo).

Re: Изменение проекции в *.lyr файле

Добавлено: 15 ноя 2016, 11:52
Denis Rykov
Не знаю как в ArcGIS, но в других системах (в том же QGIS) для того, чтобы совместить тайлы, находящиеся в разных проекциях, достаточно воспользоваться перепроецированием "на лету", проекцию тайлового слоя можно так же указать самостоятельно. Аналогично, можно делать и в веб-клиентах, в том же OpenLayers, как натянуть Yandex на OSM я писал тут.

Re: Изменение проекции в *.lyr файле

Добавлено: 15 ноя 2016, 12:19
5Nap
Denis Rykov писал(а):достаточно воспользоваться перепроецированием "на лету", проекцию тайлового слоя можно так же указать самостоятельно
Об этом и речь. И если в QGIS тайлам Яндекса указать не принятый у них World Mercator, а принятый у всех остальных Web Mercator, то тайлы точно так же будут уезжать на 20 км. Вопрос не в Яндексе, вопрос в запросе, который формируется у меня на компе. Я просто-напросто запрашиваю не те кусочки.
geouser писал(а):Если система не дружит с системой ArcGIS Online (случайно или намеренно), это проблема только этой системы. Потому что система ArcGIS Online придумана конкретными людьми как стандарт, на котором работает 99% или все 100% в системе ArcGIS.
Изменить проекцию в терабайтах кэша Яндекс карт у Вас нет ни технической, ни административной возможности. Этот сервис поставляется в режиме "только чтение".
Мне не нужно менять проекцию Яндекса. Мне не нужно менять проекцию в АГ Онлайн (там она зашита жёстко, я уже попробовал этот путь). Мне нужно поменять проекцию, зашитую в отдельном 6-ти килобайтовом lyr-файле, который лежит у меня на компе и по схеме в котором формируется запрос. Внутри этого файла прописано, что запрос к конкретному сервису я формирую в Web Mercator. В случае с Яндексом это не так.

В целом, я понял, что на данный момент конкретно в ArcGIS это близко к невозможному, ок.

Re: Изменение проекции в *.lyr файле

Добавлено: 15 ноя 2016, 13:37
geouser
Ну да, всё вышесказанное невозможно. LYR файл ArcGIS просто это не поддерживает, параметры тайлового слоя пользователем не меняются. А здесь тема по ArcGIS, про другие системы не знаю.
А говоря вульгарным языком про запросы, значит нужно запрограммировать запрос на СДВИГ, параметры которого нужно определить инструментально. То есть запрашивать не X и Y, а X-x и Y-y.
Это самое очевидное следствие из вышесказанного. А насколько оно осуществимо, это другой вопрос.
Абсолютно похожая тема возникает при использовании WGS84 и Pulkovo42. Нужно знать параметры пересчёта.
Кстати в ArcMap они есть, эти transformations зашиты в перепроецирование.
Ещё раз поясню, что перепроецирование работает только на лету со слоями в ArcMap. В веб системе Вам надо самостоятельно менять ПАРАМЕТРЫ запроса, то есть закладывать туда сдвиг, поворот и что там ещё потребуется. Само приложение запроса тайлов должно осуществлять сдвиг на 20 км, чтобы попасть в нужное место.
Ибо координаты Спасской башни у AG Online и Яндекса разные ...