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详解

等下次再写,困了。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,542评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,596评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 158,021评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,682评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,792评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,985评论 1 291
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,107评论 3 410
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,845评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,299评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,612评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,747评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,441评论 4 333
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,072评论 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,828评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,069评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,545评论 2 362
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,658评论 2 350

推荐阅读更多精彩内容