Проблема с масштабом веб-карты при использовании МСК

0 голосов
спросил 15 Авг от giser (390 баллов) в категории Программные продукты Esri

Здравствуйте! Сформулирую свою проблему из предыдущего вопроса в отдельной теме.

Я добавил установил базу СК и проекций (https://blogs.esri-cis.ru/2018/10/22/custom_projections_arcgis/). Она меня устраивает, поскольку я работаю с МСК77, которая в ней тоже имеется. Сервер стал понимать все WKIDs. Проблема появляется при добавлении сервиса в веб-карту в качестве базовой карты. Масштаб карты становится неадекватным (очень мелким, цифры огромные). Естественно, далее это имеет последствия, начиная от измерений на карте. Как решить данную проблему? Ранее, при работе с сервисом, описанным обычной wkt-строкой (без WKID), такой ситуации не было.

1 Ответ

+1 голос
ответил 16 Авг от Grigoriy (123,960 баллов)

Это хорошо, что сервер у Вас стал понимать "кастомные" wkid :)

Но большинство приложений на портале, ни REST API, ни JS API про них ничего не знают.

При создании новой веб-карты, она сразу вставляет туда "базовую карту", которая установлена картой по-умолчанию на портале.

Как сделать другую карту по-умолчанию здесь:

https://enterprise.arcgis.com/en/portal/latest/administer/windows/configure-map.htm

Веб-карта сразу получает СК от этой базовой карты, скорее всего 3857.

Изменить эту СК через интерфейс уже не получится.

Даже если Вы в карту вставите "свой" слой и сделаете "базовым".

Потому Вы и видите попытку веб-приложения "перепроецировать" Ваш слой в WebMerkator.

С помощью WKT-строки Вы сможете "переопределить" СК, которую эта веб-карта будет использовать.

Т.е. нужно найти нужный "item" в контенте портала и поправить, его как-то так:

{
 "operationalLayers": [],
 "baseMap": {
  "baseMapLayers": [{
    "id": "BaseMap_MSK1_9413",
    "layerType": "ArcGISTiledMapServiceLayer",
    "url": "https://ваш_сервер/ваш_вебадаптор/rest/services/ваш_сервис/MapServer",
    "visibility": true,
    "opacity": 1,
    "title": "Классная карта"
   }
  ],
  "title": "Базовая карта"
 },
 "spatialReference": {
  "wkt": "PROJCS[\"Russia_Cadastre_50_1\",GEOGCS[\"GCS_Pulkovo_1995\",DATUM[\"D_Pulkovo_1995\",SPHEROID[\"Krasovsky_1940\",6378245.0,298.3]],PRIMEM[\"Greenwich\",0.0],UNIT[\"Degree\",0.0174532925199433]],PROJECTION[\"Gauss_Kruger\"],PARAMETER[\"False_Easting\",1250000.0],PARAMETER[\"False_Northing\",-5712900.566],PARAMETER[\"Central_Meridian\",35.48333333333333],PARAMETER[\"Scale_Factor\",1.0],PARAMETER[\"Latitude_Of_Origin\",0.0],UNIT[\"Meter\",1.0],AUTHORITY[\"CUSTOM\",202501]]",,
  "latestWkid": 202501
 },
 "authoringApp": "WebMapViewer",
 "authoringAppVersion": "10.7",
 "version": "2.13"
}

Можете воспользоваться вот такой штукой для редактирования:

https://github.com/Esri/ago-assistant/releases

Потом Вы можете сделать эту веб-карту, картой по-умолчанию на своём портале.

Но Вам всегда придётся помнить о том, что большинство функций на портале заточено под СК 3857 (некоторые работают с СК 4326)  и Вам придётся всегда "бороться", если вы решитесь использовать СК, отличную от 3857.

оставил комментарий 19 Авг от giser (390 баллов)
редактировать 19 Авг от giser
Спасибо!
Когда я ввязывался в эту авантюру с МСК, я, конечно, понимал, что будет больно, но чтобы настолько.. :) :)
За ago-assistant отдельное спасибо, классная штука. Раньше я уже копался в айтемах в файловой системе, но это было не так удобно.
Тем не менее, положительного результата по моему конкретному вопросу с базовой картой мне добиться не удалось.
Я посмотрел json моей веб-карты в редакторе. В нем указана следующая пространственная привязка:
   "spatialReference": {
           "wkid": 202771,
           "latestWkid": 202771
Эту карту я создавал, добавляя мой слой в качестве базовой карты. То есть карта не остается в 3857 и редактировать, в принципе, нечего. Да, я наблюдал в Network процессы перепроецирования, но, как я понял, они связаны с пересчетом экстента карты, когда я добавляю вместо базовой карты в 3857 пользовательскую карту в МСК. Также я установил пользовательскую карту в МСК в качестве карты по умолчанию. Теперь при создании новой карты загружается пользовательская карта в МСК, но масштаб по-прежнему неадекватный. В Network никакие процессы перепроецирования не наблюдаются.
В WKT тоже попробовал:
"spatialReference": {
        "wkt": "PROJCS[\"Russia_Cadastre_77_1\",GEOGCS[\"GCS_Bessel_1841\",DATUM[\"D_Bessel_1841\",SPHEROID[\"Bessel_1841\",6377397.155,299.1528128]],PRIMEM[\"Greenwich\",0.0],UNIT[\"Degree\",0.0174532925199433]],PROJECTION[\"Gauss_Kruger\"],PARAMETER[\"False_Easting\",0.0],PARAMETER[\"False_Northing\",0.0],PARAMETER[\"Central_Meridian\",37.5],PARAMETER[\"Scale_Factor\",1.0],PARAMETER[\"Latitude_Of_Origin\",55.66666666666666],UNIT[\"Meter\",1.0],AUTHORITY[\"CUSTOM\",202771]]"
    },
На всякий случай, заменил все пользовательские эллипсоиды и датумы на стандартные.
Что-то тут не так...
Кстати, почему не было никаких проблем, пока я не породнил сервер и СК с WKID? Я использовал слой в неизвестной для сервера СК, наблюдал ошибочные попытки перепроецирования в Network, но масштаб карты и координаты были правильными. Необходимость wkid понадобилась для задачи перехода по координатам в МСК в качестве параметров урла.
А так, конечно, есть большой соблазн использовать 3857...
Добро пожаловать на сайт Вопросов и Ответов, где вы можете задавать вопросы по GIS тематике и получать ответы от других членов сообщества.
...