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
Комментариев нет:
Отправить комментарий