Как рассчитать координаты тайла на основе местоположения и crs для карт Arcgis - PullRequest
0 голосов
/ 02 апреля 2019

Я работаю над решением для загрузки листов карты на основе заданного местоположения: (широта, долгота) и уровня масштабирования

подписался https://wiki.openstreetmap.org/wiki/Slippy_map_tilenames

Ключевой концепцией является преобразование (широта, долгота) в эталонный фрагмент, например. код JavaScript:

function long2tileX(lon,zoom) { return (Math.floor((lon+180)/360*Math.pow(2,zoom))); }

function lat2tileY(lat,zoom) { return (Math.floor((1-Math.log(Math.tan(lat*Math.PI/180) + 1/Math.cos(lat*Math.PI/180))/Math.PI)/2 *Math.pow(2,zoom))); }

Для местоположения образца (63.433772, 10.393456) и уровня масштабирования (17) эти формулы возвращают (69320, 35421), что именно то, что нужно для получения плитки:

https://opencache.statkart.no/gatekeeper/gk/gk.open_gmaps?layers=topo4&zoom=17&x=69320&y=35421

Теперь я изо всех сил пытаюсь добиться того же с картами ArcGIS. Предоставляется следующий объект CRS:

{ "Name":"Geocache Basis", "Crs":{ "Resolutions":[ 21674.7100160867, 10837.355008043351, 5418.6775040216753, 2709.3387520108377, 1354.6693760054188, 677.33468800270941, 338.66734400135471, 169.33367200067735, 84.666836000338677, 42.333418000169338, 21.166709000084669, 10.583354500042335, 5.2916772500211673, 2.6458386250105836, 1.3229193125052918, 0.66145965625264591, 0.33072982812632296, 0.16536491406316148 ], "OriginX":-2500000.0, "OriginY":9045984.0, "Srid":"EPSG:32633", "Definition":"+proj=utm +zone=33 +ellps=WGS84 +datum=WGS84 +units=m +no_defs" }, "Attribution":"Kartverket, Geovekst og kommuner - Geodata AS", "MapProvider":"arcgis" }

Попытался использовать proj4 и определить EPSG: 32633 со значением поля «Определение», затем выполнить проекцию, но это не дало мне возможности приблизиться к вычислению соответствующие координаты плитки, которые я определил экспериментально (47333, 65439) https://services.geodataonline.no/arcgis/rest/services/Geocache_UTM33_WGS84/GeocacheBasis/MapServer/tile/17/47333/65439

Буду признателен за любую подсказку о том, какую математическую формулу я могу применить, чтобы следовать тому же сценарию и получить точный результат.

...