带有openlayers的WMS调用的mapserver

时间:2015-04-10 07:16:56

标签: wms mapserver

我的情景如下:

map显示在mapserver的TiledWMS图层下。它有2层。

  1. OSM世界地图的TiledWMS图层。

  2. TiledWMS图层,用于在mapl文件中定义的图层,通过.map文件放置在mapserver中。此地图文件包含许多图层。

  3. 现在,当用户点击地图时:它上面有2层。

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

    由于 Satpal

1 个答案:

答案 0 :(得分:1)

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

    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);
            }
        });
相关问题