Openlayers问题及 openlayer详解

壹、 常见问题

备注:

如同现openlayer官网的实例代码所以用的是VectorLayer的格式,项目是在该页面上引用的ol;

项目在全局引用了ol,所以用的ol.layer.Vector这样的格式;

部分代码是在word里改的可能有错误,粘贴复制需要检查。



1、 tilelayer与vectorlayer

tilelayer为瓦片数据,获取到的数据是以图片的形式展示的,所以无法获取包含的属性值;


  var imgayer = new TileLayer({

        source: new TileWMS({

          url: 'http://xx.xxx.xxxx /geoserver/'testosmmap /wms',

          params:{

 LAYERS: 'testosmmap:xxxx,

            TILED: true,

            VERSION: '1.1.0'

},

          serverType: 'geoserver',

          wrapX: false,

})

})



vectorlayer获取到的为矢量数据,openlayer默认的样式:点为中间白色边框为蓝色的圆圈,线为蓝色,面为中间白色边框蓝色;在添加矢量数据的时候可以根据自己想要的样子修改vectorlayer里的style,改变其样式。


var style = new ol.style.Style({

        fill: new ol.style.Fill({

          color: 'RGBA(27,84,146,0.3)'

}),

        stroke: new ol.style.Stroke({

          width: 4,

          color: 'RGBA(27,84,146,1)'

}),

        image: new ol.style.Icon({

          anchor: [0.5, 30],

          anchorXUnits: 'fraction',

          anchorYUnits: 'pixels',

          opacity: 0.95,

          src: that.point_icon //图片src

}),


        text: new ol.style.Text({

          font: 'bold 15px "Open Sans", "Arial Unicode MS", "sans-serif"',

          placement: 'point',

          fill: new ol.style.Fill({

            color: 'black'

}),

          offsetY: 5,

})

})

      //点线面要素图层

  // 这里的arr为要素集

      Var vectorsource1 = new ol.source.Vector({

        features: arr

})

      Var vectorlayer1 = new ol.layer.Vector({

        source: vectorsource1,


 //要素的name值显示在要素上

        style: function (feature) {

          style.getText().setText(feature.get('name'))

          return style

}

})



通过geoserver添加vectorlayer矢量数据:

        Var vectorsource= new VectorSource({ 

         //geoserver下预览选择geojson格式的url 

          url: 'http://xx.xxx.xxxx/geoserver/testosmmap/ows?service=WFS&version=1.0.0&request=GetFeature&typeName=testosmmap%3Apeople_point&maxFeatures=50&outputFormat=application%2Fjson',

          format: new GeoJSON()

})

        Var vectorlayer = new VectorLayer({

          source: vectorsource_

          style: new Style({

            image: new Icon({

              src: people

})

})

})




2、 获取矢量要素的属性值getProperties()及几何信息getGeometry()

 var features = vectorsource.getFeatures()

        for (var m = 0; m < feature.length; m++) {

 var prop = features[m].getProperties()

 var geom = features[m].getGeometry()

}


3、 获取当前的zoom比例缩放值

当我们要根据其zoom的值来改变一些地图上的东西时,这时候就要监听zoom的变化,实时获取当前的zoom值:(在moveend,缩放结束时获取当前地图的缩放比例)

map.on('moveend', function (event) {

        var zoom = map.getView().getZoom()

})

4、 获取当前地图的范围,并根据当前范围设置中心点,定位功能

比如说根据一个点击事件,定位到该要素,将该要素设为中心点:(通过getGeomety()获取该要素的几何信息,再根据几何信息获取该要素的范围,最后设置地图的视图即可)

 var geometry = feature.getGeometry();

var extent = geometry.getExtent();

    map.getView().fit(extent, map.getSize());


5、 Drawend事件,绘制点线面结束事件

绘制结束后,获取本次绘制的要素feature

draw.on('drawend', function (event) {

        that.feature = event.feature

 //获取feature的坐标点

        var coordinate = event.feature.getGeometry().getCoordinates()

        map.removeInteraction(draw)

}) 

6、 添加select选中事件,Selected选中后触发事件

 var select = new ol.interaction.Select()

      map.addInteraction(select)

      select.on('select', function (evt) {

 //选中的要素

        var feature = evt.selected[0]

})



7、 地图点击事件,click、doubleclick、pointermove、pointerdrag、pointerdown


//单击事件

map.on('click', function (evt) {

     var feature1 = map.forEachFeatureAtPixel(evt.pixel, function (feature){

          return feature

})

})


//鼠标移动事件

map.on("pointermove", function(e) {

  varfeature1 = map.forEachFeatureAtPixel(e.pixel, function (feature){

          return feature

})


});


//双击事件

map.on("doubleclick", function(e) {

  varfeature1 = map.forEachFeatureAtPixel(e.pixel, function (feature){

          return feature

})

});


//鼠标拖拽事件

//(拖拽时改变鼠标样式的操作)

  map.on('pointerdrag', function (evt) {

        $('#map').removeClass('mapup')

        $('#map').addClass('mapdown')

})

      map.on('pointerup', function() {

        $('#map').addClass('mapup')

})


8、 添加超图服务器上的data数据即矢量数据,sql查询、几何查询添加数据

//通过sql查询

var geometryParam = new SuperMap.GetFeaturesBySQLParameters({

            queryParameter:{

              name: 'abc'

},

 //abc为data的数据源名称;xyz为数据集名称

            datasetNames: ['abc: xyz'],

            toIndex: 20000,

            maxFeatures: 20000

})

var url = 'http://xxx.xxx.xxxx/iserver/services/xxx/rest/data'

          var icon = that.icon1

          that.adddata(url, geometryParam, icon)


//添加的方法

adddata (url, geometryParam, icon) {

      let that = this

      new ol.supermap.FeatureService(url).getFeaturesBySQL(

        geometryParam,

        function (serviceResult) {

          var features = new ol.format.GeoJSON().readFeatures(

            serviceResult.result.features

)

          var vectorSource = new ol.source.Vector({

            features: features,

            wrapX: false

})

          var style = new ol.style.Style({

            image: new ol.style.Icon({

              anchor: [0.5, 30],

              anchorXUnits: 'fraction',

              anchorYUnits: 'pixels',

              opacity: 0.95,

              src: icon

}),

            text: new ol.style.Text({

              font: 'bold 15px "Open Sans", "Arial Unicode MS", "sans-serif"',

              placement: 'point',

              fill: new ol.style.Fill({

                color: 'black'

}),

              offsetY: 5,

})

})


          var resultLayer = new ol.layer.Vector({

            source: vectorSource,

            // style: style

            style: function (feature) {

              style.getText().setText(feature.get('NAME'));

              return style

}

})

          map.addLayer(resultLayer)


          // }

})

},



//通过几何查询

var geometryParam = new SuperMap.GetFeaturesByGeometryParameters({

//abc为data的数据源名称;xyz为数据集名称

      datasetNames: [abc:xyz],

      geometry: polygon,

      spatialQueryMode: 'INTERSECT'

})

var url = 'http://xxx.xxx.xxxx/ iserver/services/xxxx /rest/maps/xxxx'

        new ol.supermap.FeatureService(url).getFeaturesByGeometry(geometryParam, function (serviceResult) {

      getdata = serviceResult

      var vectorSource = new ol.source.Vector({

        features: (new ol.format.GeoJSON()).readFeatures(serviceResult.result.features),

        wrapX: false

})

            var resultLayer = new ol.layer.Vector({

        source: vectorSource

})

            resultLayer.setProperties({

        'layerType': 'query_result'

})

            map.addLayer(resultLayer)

})

}


9、 想到别的再写


貳、 Openlayer详解

等下次再写,困了。

你可能感兴趣的:(Openlayers问题及 openlayer详解)