我正在使用javascript,google maps v2和ESRI 10.1构建应用。
我的ESRI地图服务中有一个DynamicMapServiceLayer
和一个图层。我根据用户在运行时选择的过滤器值,使用ESRI setLayerDefinitions
函数动态显示或隐藏图层上的要素。
当用户点击地图时,我使用ESRI IdentifyTask
对象来查找用户点击的内容。我想显示用户点击的功能的信息窗口。我的代码很有用,但它会打开infowindows以获取在图层上过滤掉(不可见)的功能。
如何查看用户是否点击了可见功能并停止打开infowindows以获取隐藏功能?或者我如何让IdentifyTask
停止在它返回的响应对象中包含隐藏的功能?
这是我的identifyParameters任务调用设置
// set the identify parameters
var identifyParameters = new esri.arcgis.gmaps.IdentifyParameters();
identifyParameters.geometry = latLng; // where the user clicked on the map
identifyParameters.tolerance = 3;
identifyParameters.layerIds = [OUTAGES_LAYER];
identifyParameters.layerOption = 'all';
identifyParameters.bounds = map.getBounds();
var mapSize = map.getSize();
identifyParameters.width = mapSize.width;
identifyParameters.height = mapSize.height;
// execute the identify operation
identifyTask.execute(identifyParameters, function(response, error) {
if (hasErrorOccurred(error)) return;
addResultToMap(response, latLng);
});
更新
我已升级到Google地图v3。现在,识别参数支持传递layerdef信息,如下所示。例如,我可以将识别操作限制为FISCAL_YEAR = 2014的那些功能。我的问题已经解决。
function identify(evt) {
dynamicMap.getMapService().identify({
'geometry': evt.latLng,
'tolerance': 3,
'layerIds': [12],
'layerOption': 'all',
'layerDefs': {12 : 'FISCAL_YEAR = 2014'},
'bounds': map.getBounds(),
'width': map.getDiv().offsetWidth,
'height': map.getDiv().offsetHeight
}, function(results, err) {
if (err) {
alert(err.message + err.details.join('\n'));
} else {
addResultToMap(results, evt.latLng);
}
});
}