美文网首页开源
Vue.js+OpenLayers 2、添加 GeoServer

Vue.js+OpenLayers 2、添加 GeoServer

作者: e20a12f8855d | 来源:发表于2020-05-07 17:40 被阅读0次

一、查看 GeoServer 发布的 wms 服务

image

二、添加地图配置

我的项目中用的是 GeoServer 发布的天津东丽区的 wms 服务,添加地图配置,方便管理。

mapCongif.js

export default {
  map: {
    geoserver: 'http://******/geoserver/DLQ/wms',
    view: {
      projection: "EPSG:4326",
      center: [117.36599976909781, 39.1470299097626],
      zoom: 12,
      extent: [
        117.09722430138682,
        38.988772821718655,
        117.72502101428843,
        39.30561397526118
      ]
    },
    layers: [{
        name: '电子地图',
        // layerName: 'DLQ:DLQDZDT',
        url: '',
        visible: true,
        zIndex: 0,
        type: ''
      },
      {
        name: '影像地图',
        // layerName: 'DLQ:DLQDOM',
        url: '',
        visible: true,
        zIndex: 1,
        type: ''
      },
      {
        name: '社区',
        layerName: 'DLQ:DLQYYCOMMUNITY',
        url: '',
        visible: false,
        zIndex: 2
      },
      {
        name: '网格',
        layerName: 'DLQ:DLQYYGRID',
        url: '',
        visible: true,
        zIndex: 3
      },
      {
        name: '房户人',
        layerName: 'DLQ:DLQFHR',
        url: '',
        visible: false,
        zIndex: 4
      }, 
      {
        name: '网格员',
        layerName: 'DLQ:DLQWGGLY',
        url: '',
        visible: false,
        zIndex: 5
      }
    ]
  }
}

geoserver 对应的路径就是 GeoServer 的服务地址,view 中设置地图的坐标系、中心点、缩放等级和可视范围。layers 中包含 GeoServer 发布的所有 wms 服务,visible 设置为 false 的默认不显示。因为电子地图和影像地图加载不出来,所以使用的 OSM 作为地图(在地图功能页面中有做判断,没有 layerName 的使用 OSM)。

三、修改地图功能页面

<template>
  <div></div>
</template>
<script>
import mapConfig from '@/mapConfig' // 地图配置
import "ol/ol.css"
import Map from "ol/Map"
import View from "ol/View"
import TileLayer from "ol/layer/Tile"
import TileWMS from "ol/source/TileWMS"
import OSM from "ol/source/OSM"
import { defaults as defaultControls } from 'ol/control'
import ZoomSlider from 'ol/control/ZoomSlider' // 缩放控制

export default {
  name: 'InitMap',
  data() {
    return {
      map: null
    }
  },
  mounted() {
    this.initMap()
  },
  methods: {
    // 获取所有图层
    getAllTileLayers() {
      let allLayers = mapConfig.map.layers
      for (let i = 0; i < allLayers.length; i++) {
        if (!allLayers[i].layerName) {
          // 没有 GeoServer 用的是 OSM
          let layer = new TileLayer({
            source: new OSM(),
            visible: allLayers[i].visible,
            zIndex: allLayers[i].zIndex,
            className: allLayers[i].name
          })
          this.map.addLayer(layer)
        } else {
          let layer = new TileLayer({
            source: new TileWMS({
              url: mapConfig.map.geoserver,
              params: { LAYERS: allLayers[i].layerName, TILED: true },
              serverType: "geoserver",
              transition: 0,
            }),
            visible: allLayers[i].visible,
            zIndex: allLayers[i].zIndex,
            className: allLayers[i].name
          })
          this.map.addLayer(layer)
        }
      }
    },
    // 地图单击事件
    singleClickFun() {
      this.map.on('singleclick', (e) => {
        console.log(e)
        if (this.map.hasFeatureAtPixel(e.pixel)) {
          let feature = this.map.getFeaturesAtPixel(e.pixel)
          console.log(feature)
        }
      })
    },

    // 初始化地图
    initMap() {
      let view = new View(mapConfig.map.view)
      this.map = new Map({
        layers: [],
        target: "map",
        view: view,
        controls: defaultControls().extend([new ZoomSlider()]) // 缩放控制
      })
      this.getAllTileLayers() // 获取所有图层
      this.singleClickFun(view) // 地图单击事件
    }

  }
}
</script>

<style lang="scss" scoped>
</style>
image

相关文章

网友评论

    本文标题:Vue.js+OpenLayers 2、添加 GeoServer

    本文链接:https://www.haomeiwen.com/subject/jmzaghtx.html