关于使用openlayer加载wfs图层

答疑:关于openlayer加载图层为什么使用wfs协议的图层,而不是使用wms图层?

想要知道为什么不适用wms图层反而使用wfs图层,这个我们就需要知道他们二者有什么本质的区别,下面我博主摘录网上关于wfs图层和wms图层的区别,希望对在座各位有所帮助。(数据来源于互联网)

wms-web地图服务

wms是指OGC的web地图服务(Web Map Servie)规范,它利用具有地理空间位置信息的数据制作地图,将地图定义伟地理数据可视的表现。
wms定义了一个规范的http接口,支持标准http协议的get和post请求,但多基于get方式进行服务请求。能够根据用户请求返回相应的地图(包括png,gif,jpeg等栅格形式或者svg和web cgm等矢量形式)
geoserver支持wms1.1.1(最广泛使用的版本)和wms1.3.0

wfs-wfs服务

wfs是指ogc的web矢量(要素)服务(Web Feature Service),返回的是矢量级的地理标记语音gml编码,并提供对矢量的增加、修改、删除等事物操作,是对web地图服务的进一步深入。wfs通过ogc filter构造查询条件,支持基于空间几何关系的查询,基于属性域的查询,还包括基于空间关系和属性域的共同查询。
wms返回的是图层级的地图影响,而wfs返回纯地理数据而设计的,它不包含任何关于绘制数据的建议

如果上面的描述还是不太清除,下面两个截图也方便各位使用
wms返回响应数据:
这个是wms图片
wfs返回响应数据:
这个是wfs
通过对比我们可以看出通过获取到wfs图层之后,我们可以对数据进行处理。比如我们可以在图层上面展示图层名称,并且可以修改对应样式,同时我们还可以对区块信息进行样式调整,比如区块填充颜色和边框颜色等。下面是我项目实现的效果:
在这里插入图片描述
废话不多说了,直接整代码

第一步先加载底图

我们现在使用的是wmts的底图,实现方式使用(openlayer)

var tileLoadFun = function (image, src) {
    var client = new XMLHttpRequest();
    client.withCredentials = false;
    client.responseType = 'blob';
    client.open('GET', src);
    client.onload = function () {
      image.getImage().src = URL.createObjectURL(client.response);
    };
    client.setRequestHeader('Accept', '*/*'); // 可以通过加载XMLHttpRequest请求,并配置对应header
    client.send();
  };
  // 
  var matrixIds = [];
  for (var z = 0; z < borderLine.length; ++z) {
    matrixIds[z] = z;
  }
  var view = new ol.View({
    projection: 'EPSG:4326',
    // projection: 'EPSG:4490',
    center: [120.19425250589857512, 33.36711265060023379],
    zoom: 12,
    maxZoom: 20,
    minZoom: 10,
  });
  map = new ol.Map({
    target: 'mapDiv',
    layers: [
      new ol.layer.Tile({
        source: new ol.source.WMTS({
          url: url,
          layer: 'Layers',
          style: 'default',
          matrixSet: 'Custom_Layers',
          projection: 'EPSG:4490',
          format: 'image/png',
          crossOrigin: 'anonymous',
          tileGrid: new ol.tilegrid.WMTS({
            origin: [118.12500000000011, 35.156249999999986],
            resolutions: borderLine,
            matrixIds: matrixIds,
          }),
          tileLoadFunction: tileLoadFun,
        }),
      }),
    ],
    view,
  });

第二步加载wfs图层

var wfsSource = new ol.source.Vector({
      format: new ol.format.GeoJSON(),
      loader: function (extent, resolution, projection) {
        const url = '这个是你的地图api'
        fetch(url)
          .then(function (response) {
            return response.text();
          })
          .then(function (text) {
            var features = wfsSource.getFormat().readFeatures(text, {
              dataProjection: 'EPSG:4490', // 假设 WFS 数据为 EPSG:4326
              featureProjection: projection,
            });
            wfsSource.addFeatures(features);
          });
      },
      strategy: ol.loadingstrategy.bbox,
      zIndex: 1,
    });
    var tiled = new ol.layer.Vector({
      source: wfsSource,
      visible: true,
      style: createStyleFunction(), // 这个方法可以自定义你想实现的样式
    });

 // 将 WFS 层添加到地图(高亮部分)
  var highlightLayer = new ol.layer.Vector({
    source: highlightSource,
    style: function (val) {
      let plan = val.values_.plan;
      switch (plan) {
        case '保留现状内侧管控':
          return planFill3; // 自定义高亮的颜色
        case '外侧美化':
          return planFill2;
        default:
          return planFill1;
      }
    },
  });

第三步把上面图层加载到map里面

我现在使用的是openlayer
map.addLayer(tiled);
// 将高亮图层添加到地图
map.addLayer(highlightLayer);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值