getZIndex is not a func

0 投票

this.layer.getZIndex is not a function

selectFeature = new SuperMap.Control.SelectFeature(tLayer, { onSelect: onFeatureSelect, onUnselect: onUnFeatureSelect });
map.addControl(selectFeature);
selectFeature.activate();//这里会报异常:this.layer.getZIndex is not a function

请问是什么原因,有办法处理吗?或者有其他的方法可以实现我的目的吗?谢谢!
我的目的是选择图层的对象,然后弹出一个对话框,上面的图层tLayer是通过GetLayersInfoService查询得到,代码如下:
        function GetLayerInfo() {
            var getLayersInfoService = new SuperMap.REST.GetLayersInfoService(url);
            getLayersInfoService.events.on({ "processCompleted": getLayersInfoCompleted });
            getLayersInfoService.processAsync();
        }

        var selectFeature;
        function getLayersInfoCompleted(getLayersInfoEventArgs) {
            if (getLayersInfoEventArgs.result) {
                {
                    if (getLayersInfoEventArgs.result.subLayers) {
                        for (var j = 0; j < getLayersInfoEventArgs.result.subLayers.layers.length; j++) {
                            var tLayer = getLayersInfoEventArgs.result.subLayers.layers[j];
                            if (tLayer.name == "Airport@AirRoute") {
                                try {
                                    selectFeature = new SuperMap.Control.SelectFeature(tLayer, { onSelect: onFeatureSelect, onUnselect: onUnFeatureSelect });
                                    map.addControl(selectFeature);
                                    selectFeature.activate();//这里会报异常:this.layer.getZIndex is not a function
                                }
                                catch (e)
                                 { alert(e.name + ": " + e.message); }
                            }
                        }
                    }
                }
            }
            alert(" GetLayerInfo " + subLayers.length);
        }

        //要素被选中时调用此函数,需要传入当前选中要素参数feature
        function onFeatureSelect(feature) {
            alert("onFeatureSelect ; " + feature.style);
       
        }
        //要素被取消选中时调用此函数,需要传入当前要素参数feature
        function onUnFeatureSelect(feature) {
            alert("onUnFeatureSelect");
        }

7月 4, 2017 分类:  837次浏览 | 用户: Sieben (7 分)
重新分类 7月 4, 2017 用户:李晓

3 个回答

0 投票
您好,您用的是哪个产品啊?
7月 4, 2017 用户: 胡林 登峰造极 (5,985 分)
你好!报异常是版本是iServer 8C,我也要在7C 应用这个,7C还没试过有没有报这个异常
0 投票
报异常是版本是iServer 8C,我也要在7C 应用这个,7C还没试过有没有报这个异常
7月 4, 2017 用户: Sieben (7 分)
0 投票

您好!你报这个错是因为selectFeature只支持矢量图层要素选中(见下图),你获取的这个tLayer图层添加进去是不行的。

如果你是想点击地图上某个区域,然后弹出对应的信息,可以直接监听地图事件,然后在监听事件里面做判断,如果点击的是你需要的图层上的信息,才弹窗

7月 4, 2017 用户: 李晓 学富五车 (663 分)
谢谢你!

请问有监听地图事件的样例代码吗?是监听鼠标点击事件吗?不知道怎么过滤图层信息。

或者超图的示范程序有类似的样例吗?

        function FindBy_Point( tPoint) {   
            var point = new SuperMap.Geometry.Point(tPoint.lon, tPoint.lat);
            var queryParam, queryByGeometryParameters, queryService;
            queryParam = new SuperMap.REST.FilterParameter({ name: "ACCRegion@AirRoute" });
            queryByGeometryParameters = new SuperMap.REST.QueryByGeometryParameters({
                queryParams: [queryParam],
                geometry: point,
                spatialQueryMode: SuperMap.REST.SpatialQueryMode.INTERSECT
            });
            queryService = new SuperMap.REST.QueryByGeometryService(url, {
                eventListeners: {
                    "processCompleted": processCompleted,
                    "processFailed": processFailed
                }
            });
            queryService.processAsync(queryByGeometryParameters);     
        }

请问是类似这样过滤图层吗?

1,加入有多个图层要过滤应该怎么做?比如有"ACCRegion@AirRoute"还有"ACCRegion@AirRoute#2"

2,我要选择的东西会有点对象,这样能取到吗?或说这样做合适吗?

你可以这样做:

1、直接用点进行地图查询,查询方式就是按照你上面的代码那样写,点用drawFeature画(这个点不要渲染出来),在查询回调里面获得信息然后设置弹窗

画点及查询你可以参考这个示范程序:

http://support.supermap.com.cn:8090/iserver/iClient/forJavaScript/examples/examples.html#queryByGeometry

多图层查询,你可以参考这篇博客里面的地图查询,这是专门介绍如何进行多图层查询的:

http://blog.csdn.net/supermapsupport/article/details/54311880

点对象只要你的鼠标能点上就能查询到。

2、还有一个方法就是用utfgrid图层你可以看一下应该也能实现,参考这个范例:

http://support.supermap.com.cn:8090/iserver/iClient/forJavaScript/examples/examples.html#utfGridLayer

实现点击,只需把这个例子里面的handlerMode: "move"改成handlerMode: "click"

非常感谢!我先看看。
我这里选不上点对象,面对象就可以选上,用了你说的方法1也选不上点对象
我改用 QueryByDistanceService 距离查询可以通过点既查到点有查到面,请问知道里面的距离参数distance的单位是什么吗?是米?公里?还是要看投影坐标系?
嗯,要看你地图的坐标系,单位是和地图的单位一致的
哦,谢谢了!
...