1

我正在使用 javascript、google maps v2 和 ESRI 10.1 构建一个应用程序。我的DynamicMapServiceLayerESRI 地图服务中有一个图层。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);
        }
    });
}
4

0 回答 0