我正在使用 javascript、google maps v2 和 ESRI 10.1 构建一个应用程序。我的DynamicMapServiceLayer
ESRI 地图服务中有一个图层。setLayerDefinitions
我使用 ESRI函数根据用户在运行时选择的过滤器值 动态显示或隐藏图层上的功能。
当用户点击地图时,我使用 ESRIIdentifyTask
对象来查找用户点击的内容。我想显示用户单击的功能的信息窗口。我的代码有点工作,但它打开了在图层上被过滤掉(不可见)的功能的信息窗口。
如何检查用户是否单击了可见功能并停止打开隐藏功能的信息窗口?或者我怎样才能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);
});
更新
我已经升级到谷歌地图 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);
}
});
}