添加了UTFGrid图层,在请求数据的时候发现请求参数中x、y不正确导致请求不到数据。不知道是不是图层的projection的原因。
首先,这个x、y并不是x、y坐标,其次检查参数设置,图层名可以通过地图服务的layers资源查看;代码参考相关帖子,比如:
UTFGrid获取不到数据 UTFGrid回调函数传入参数.id .data没值
您好,我参考了这两个帖子还是没能解决,可能我表达的有点问题,我重新详细描述一下我的问题吧。我是参考JavaScript API里面的UTFGrid图层希望实现鼠标悬停或鼠标单击某一地物显示属性信息。这里是我地图初始化的代码:
//地图初始化 function init() {
map = new SuperMap.Map("map", { controls: [ new SuperMap.Control.ScaleLine(), //比例尺控件。默认位置为地图左下角。 new SuperMap.Control.Zoom(), //缩放类。 用于缩放地图。默认情况下垂直显示在地图左上角。 new SuperMap.Control.LayerSwitcher(), //图层选择控件类。 用于控制地图中的图层可见性。 new SuperMap.Control.MousePosition(), //该控件显示鼠标移动时,所在点的地理坐标。 new SuperMap.Control.Navigation({ dragPanOptions: { enableKinetic: true //设置是否使用拖拽动画。默认为false,不使用动画。 } }) //此控件处理伴随鼠标事件(拖拽,双击、鼠标滚轮缩放)的地图浏览, 如果创建地图时没有设置任何控件,此控件会默认添加到地图。 ] });
//创建分块动态REST图层,该图层显示iserver 8C 服务发布的地图, //其中"JianShuiNZ"为图层名称,url图层的服务地址,{transparent: true}设置到url的可选参数 layer = new SuperMap.Layer.TiledDynamicRESTLayer("JianShuiNZ", url, { transparent: true }, { maxResolution: "auto", bufferImgCount: 0, projection: "EPSG:4326", maxExtent: new SuperMap.Bounds(-180, -90, 180, 90), units: "degrees" });
layer.events.on({ "layerInitialized": addLayer });
uftGrid = new SuperMap.Layer.UTFGrid("UTFGridLayer", url, { layerName: "Layer_JY_Area", utfTileSize: 256, //瓦片的像素大小, 默认256像素的正方形。 pixcell: 16, //瓦片中每个单元格的像素宽度, 默认为2,pixcell应该能够被瓦片宽与高整除,该属性与options属性中 utfgridResolution 属性对应。 isUseCache: true //是否使用本地缓存策略。设置为false则不使用,默认使用。 }, { utfgridResolution: 16, // 瓦片像素点个数与UTFGrid单行数据点个数的比 值。如果UTFGrid中的一个字符码对应表示4x4的像素块,则utfgridResolution 的值为4,默认值为2。 projection: "EPSG:4326", maxExtent: layer.maxExtent, maxResolution: layer.maxResolution, units: "degrees", scales:layer.scales }); map.addLayer(uftGrid); //
utfControl = new SuperMap.Control.UTFGrid({ layers: [uftGrid], callback: utfGridCallBack, handlerMode: 'click' }) map.addControl(utfControl);
div = document.getElementById("map"); //初始化一个events。定义事件的监听器和自定义事件名称 var events = new SuperMap.Events(div, div, ["userselect"]); //将事件对象保存到div对象上 div.events = events; //监听自定义事件,注册处理函数,参数一指定事件类型,参数二指定事件处理对象,参数三定义处理函数 div.events.register("userselect", div, userselectHandler)
//将处理函数和调用对象绑定,函数最终调用里面的this对象即指向第二个参数指定的object对象 var observeFun = SuperMap.Function.bindAsEventListener(clickHandler, div); SuperMap.Event.observe(div, "", observeFun); }
在这里面添加了UTFGrid图层和UTFGridControl,回调函数是这样:
function utfGridCallBack(infoLookup, loc, pixel) { if (infoLookup) { //console.log(infoLookup); var info; for (var idx in infoLookup) { info = infoLookup[idx]; } if (info && info.data) { console.log(info.data); } else { //document.getElementById("utfGridResult").innerHTML = ""; } } //hideSelectFiledsDiv(); }
但是点击对应的图层的时候没有输出info.data,我检查了之后发现请求得到的data是空的。然后用浏览器访问地图服务,url到maps这一级,点地图名旁浏览于 JavaScript,右上角选择对应图层,那里的UTFGrid图层又是可以的。用浏览器调试工具查看请求发现是参数中的x、y不一样所以我的代码请求得到的data为空,不知道是哪里的原因。下面两个截图一个是我的代码发送的请求,一个是地图服务上面没有问题的时候的发送的请求。