本文只描述现象与处理措施,不讨论原理。
开发过程中遇到此异常,查询后网上说是跨域访问的问题,给出的解决方案是通过JQuery的跨域访问机制来解决,
难道我需要直接找ArcGISTiledMapServiceLayer相关代码,去重构吗?
还有给出的解决方案如下,http://resources.arcgis.com/en/help/rest/apiref/config.html,大意就是要设置一下ArcGIS Server服务,可服务是别人的,设置不了。
代码如下,在地图类型切换时需要调用另一个网址,就报出了如下错误。
if (tp == "mp") { //移除之前 map.removeLayer(basemap); //地图 basemap = new ArcGISTiledMapServiceLayer("http://xxx.xxx.xxx.xxx.xxx.xxx"); $("#mptype").val("mp"); map.addLayer(basemap); }
实际上两个图层域名是差不多的,不知道为什么出现这个问题。
后来尝试了下,在地图初始化的时候就实例化两个ArcGISTiledMapServiceLayer,在地图切换的时候进行图层的添加、删除,不进行实例化,即解决问题。
大致代码如下:
function loadMap(lnt,lat,zo0o) { zoom=zo0o; require(["esri/map", "esri/toolbars/navigation", "esri/layers/ArcGISTiledMapServiceLayer"], function (Map, Navigation, ArcGISTiledMapServiceLayer) { options = { logo: false, fadeOnZoom: true, slider: true, sliderPosition: "bottom-left", sliderStyle: "large" }; iniLat = lat; iniLnt = lnt; map = new esri.Map("mapDiv", options); basemap = new ArcGISTiledMapServiceLayer("http://xxx.xxx.xxx.xxx"); annolayer = new ArcGISTiledMapServiceLayer("http://bb.bbb.ccc.ddd"); map.addLayer(annolayer); spatialReference = map.spatialReference; map.on("mouse-down", function (evt) { console.log(evt.mapPoint.x.toFixed(3) + "," + evt.mapPoint.y.toFixed(3)); }); map.centerAndZoom(new esri.geometry.Point(lnt, lat), zoom); navToolbar = new Navigation(map); }); }
地图切换代码修改如下:
function MapTypeSwitch(tp){ require(["esri/map", "esri/layers/ArcGISTiledMapServiceLayer", "esri/config"], function (Map, ArcGISTiledMapServiceLayer, esriConfig) { esriConfig.defaults.io.corsDetection = false; if (tp == "mp") { //移除之前 $("#mptype").val("mp"); map.removeLayer(annolayer); map.addLayer(basemap); } }); }