首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >带有打开层的WMS调用的mapserver

带有打开层的WMS调用的mapserver
EN

Stack Overflow用户
提问于 2015-04-10 07:16:56
回答 1查看 392关注 0票数 0

1.设想情况如下:

地图显示在地图服务器的TiledWMS层下面。它有两层。

  1. TiledWMS图层为OSM世界地图。
  2. TiledWMS层,用于通过.map文件在mapserver中的kml文件中定义的层。这个地图文件包含许多层。

现在,当用户点击地图:它得到了上面的两个层。

但是,由于第二层是由.map文件中给定的不同层组成的,所以我无法唯一地识别这些层。我想,因为第二层是由不同的层组成的kml文件,我应该能够唯一地识别他们鼠标点击或显示。

谢谢萨帕尔

EN

回答 1

Stack Overflow用户

发布于 2015-04-17 14:04:52

我能够得到它:下面是其他人的示例代码。

代码语言:javascript
复制
    var coord = evt.coordinate;
    var pixel = $scope.map.getPixelFromCoordinate(coord);
    var viewProjection = $scope.map.getView().getProjection();
    var viewResolution = $scope.map.getView().getResolution();
    var numberOfLayersOnMap = $scope.map.getLayers();
    var feature = $scope.map.forEachFeatureAtPixel(pixel, function(feature, layer){return feature;}, null, function(layer) {return true;});
    if(feature === undefined)
    {
        $scope.map.forEachLayerAtPixel(pixel, function (layer) 
        {
            if(!layer)
            {
                return ;
            }
            var urlWMSGetFeatureInfo = layer.getSource().getGetFeatureInfoUrl(coord, viewResolution, viewProjection, {
                    'INFO_FORMAT': 'application/vnd.ogc.gml'
            });
            if(urlWMSGetFeatureInfo.indexOf("osm-google.map")<0)
            {
                $http({
                    method: 'GET',
                    url: urlWMSGetFeatureInfo,
                }).success(function(data){
                    var parser = new ol.format.WMSGetFeatureInfo();
                    var features = parser.readFeatures(data);
                    if(features.length>0)
                    {                               
                        var featureName = features[0].n.Name;
                        topOverlayElement.innerHTML = featureName;
                        $scope.highlightOverlay.setFeatures(new ol.Collection());
                        if($scope.flagLinkage == true)
                        {
                            var xmlObj = utility.StringToXML(data);
                            var xmlDocumnet = xmlObj.childNodes[0];
                            var layerNode = xmlDocumnet.children[0];
                            var gmlLayerNode = layerNode.children[0];
                            var layerName = gmlLayerNode.textContent;
                            var layerInfoObject = {};
                            layerInfoObject.layerName = layerName;
                            //layerInfoObject.placemarkName = featureName;
                            $scope.placemarksSelectedObject.push(layerInfoObject);
                            $scope.placemarksSelectedFeatureObject.push(features[0]);
                        }
                        else
                        {
                            $scope.placemarksSelectedFeatureObject.length = 0;
                            $scope.placemarksSelectedFeatureObject.push(features[0]);
                        }
                        $scope.highlightOverlay.setFeatures(new ol.Collection($scope.placemarksSelectedFeatureObject));
                        var featureDescription = features[0].n.description;
                        middleOverlayElement.innerHTML = (featureDescription === undefined) ? '' : featureDescription;
                        $scope.showOverlay(coord);
                    }
                }).error(function (data) {
                    console.log("Not able to get capabilty data.");         
                });
            }
            else
            {
                $scope.closeOverlay(evt);
            }
        });
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29555518

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档