October. This
is one of the peculiarly dangerous months to
speculate in
stocks in. The others are July, January,
September,
April, November, May, March, June, December,
August, and
February.
— Pudd'nhead
Wilson's Calendar
По всему
Интернету не найти рецепта, рассказывающего:
как добавить к карте со spatialReference.wkid =
102100 тайловый слой с другим spatialreference.
Отличающимся. Формально, это невозможно.
Документация ArcGIS говорит о том, что
tiled layers перепроецировать (при добавлении
к карте) невозможно. Нужно такой слой
добавлять поверх подложки, имеющей
совпадающий spatialreference.
Да и ладно бы.
Но самый главный Есраевский вьювер
умудряется
справится с такой непростой и даже
невозможной задачей.
На эту карту
вполне можно добавить слой
у которого
spatialreference.wkid = 28407.
Как? Как они
это делают?
Эти шельмы —
разработчики Самого Главного Вьювера
— обманывают API, используя конструктор
(и «драйвер») слоя типа
ArcGISDynamicMapServiceLayer вместо ArcGISTiledMapServiceLayer!
Вот, смотрите
рабочий код функции добавления слоя в
карту по URL. Javascript API ArcGIS:
//~ dynamiclayer // http://sampleserver3.arcgisonline.com/ArcGIS/rest/services/Petroleum/KSPetro/MapServer //~ featurelayer // http://sampleserver3.arcgisonline.com/ArcGIS/rest/services/Hydrography/Watershed173811/MapServer/0 //~ tiledMap // http://services.arcgisonline.com/ArcGIS/rest/services/World_Topo_Map/MapServer addAGSLayer: function(layerURL) { var req = esri.request({ url: layerURL, content:{"f": "json"}, callbackParamName:"callback" }); req.then( dojo.hitch(this, function(lyrmeta) { var tiledMap = lyrmeta.singleFusedMapCache || false; var haveLayers = lyrmeta.layers || false; if(haveLayers) haveLayers = true; var lyr = null; if(tiledMap) { if(lyrmeta.spatialReference.wkid == map.spatialReference.wkid) { lyr = new esri.layers.ArcGISTiledMapServiceLayer(layerURL, {id: layerURL} ); } else { lyr = new esri.layers.ArcGISDynamicMapServiceLayer(layerURL, {id: layerURL}); } } else { if(haveLayers) { lyr = new esri.layers.ArcGISDynamicMapServiceLayer(layerURL, {id: layerURL}); } else { lyr = new esri.layers.FeatureLayer(layerURL, { id: layerURL, mode: esri.layers.FeatureLayer.MODE_ONDEMAND, outFields:["*"] } ); } } if(lyr) { map.addLayer(lyr); } }), dojo.hitch(this, function(err) { alert("addAGSLayer failed, url: " + layerURL); }) ); // req.then } |
Возмутительно,
но это работает.
А мужики-то не
знают:
original post http://vasnake.blogspot.com/2013/09/add-to-map-arcgis-tiled-mapservice-with.html
Комментариев нет:
Отправить комментарий