【OpenLayers】VUE+OpenLayers+ElementUI加载WMS地图服务

【OpenLayers】VUE+OpenLayers+ElementUI加载WMS地图服务

准备工作

需要安装好nodejs,nodejs下载地址,下载对应的版本向导式安装即可。
nodejs下载
安装完成后,控制台输入node -v,显示版本号即安装成功。
下载完成后,默认将缓存路径和下载路径设置的C盘,可以使用如下命令修改:

npm config set prefix "下载默认路径"
npm config set cache “缓存路径”

设置之后需要将上面两个地址添加到环境变量中。

安装vue

# - g为全局安装,将安装到node_global目录下,否则只会安装到当前目录
npm install vue -g

安装完成之后控制台输入vue -V,显示版本号则安装成功。

安装后遇到的问题:
执行vue时报错:

vue : 无法加载文件…/vue.ps1,因为在此系统上禁止运行脚本,有关详细信息,…

解决方案:控制台输入以下命令
(1)查看当前的执行策略

Get-ExecutionPolicy

(2)修改执行策略为RemoteSigned

Set-ExecutionPolicy -Scope CurrentUse

修改执行策略

创建vue项目

控制台进入到要创建vue项目的目录下,执行如下命令:

vue create ***(项目名,字母只能小写)

接着选择vue项目的配置,我这里选择的是vue3,其他的配置如下图:
vue项目配置
启动vue项目:进入项目的目录下,执行npm run serve 启动。访问http://localhost:8080/ 显示vue界面即启动成功。
修改vue项目的端口可以通过项目根目录下package.json文件修改serve:“serve”: “vue-cli-service serve --port 8002”
修改vue项目端口

安装OpenLayers

在项目根目录下执行

npm install ol

安装ElementUI

由于选择的是vue3项目,所以需要配合使用element plus,在项目根目录下执行

npm install element-plus --save

加载wms地图服务

在配置好以上环境后,下面就可以正式实现加载wms地图服务的功能。
在src/components目录下新建map.vue文件,实现地图的显示:

<!-- eslint-disable vue/multi-word-component-names -->
<template>
  <div
    id="mapDiv"
    style="width: 800px; height: 600px; border: 1px solid #ff0000"
  ></div>
</template>

<script>
import "ol/ol.css";
import Map from "ol/Map";
import View from "ol/View";
import ImageWMS from "ol/source/ImageWMS";
import Image from "ol/layer/Image";

export default {
  data() {
    return {
      map: null, //地图
    };
  },
  mounted() {
    this.initMap();
  },
  created() {},
  methods: {
    initMap() {
      var image = new Image({
        source: new ImageWMS({
          //不能设置为0,否则地图不展示。
          ratio: 1,
          url: "http://127.0.0.1:8080/geoserver/province/wms",
          params: {
            LAYERS: "province:新疆",
            STYLES: "",
            VERSION: "1.1.1",
            FORMAT: "image/png",
          },
          serverType: "geoserver",
        }),
      });
      this.map = new Map({
        //地图容器ID
        target: "mapDiv",
        //引入地图
        layers: [image],
        view: new View({
          center: [84, 42],
          zoom: 22,
        }),
      });
      this.$root._olMap = this.map;
    },
  },
};
</script>

<style scoped>
.map {
  width: 100%;
  height: 800px;
}
</style>

其中,url及相关参数可以从geoserver中获取:
url和参数获取

接下来修改App.vue的内容,这里使用了这个布局:
element ui布局
其他的布局可以直接在element常用布局中直接复制模板进行修改。

<template>
  <div id="app">
    <el-container class="app-out-pannel">
      <el-header class="sys-header">OpenLayers加载WMS地图服务</el-header>
      <el-container class="app-content-pannel">
        <el-aside class="sys-menu" width="200px"></el-aside>
        <el-container>
          <el-main class="app-main">
            <olMap></olMap>
          </el-main>
          <el-footer></el-footer>
        </el-container>
      </el-container>
    </el-container>
  </div>
</template>

<script>
import olMap from "./components/map.vue";

export default {
  name: "App",
  components: {
    olMap,
  },
};
</script>

<style>
#app {
  position: relative;
  width: 100%;
  height: 100%;
  margin: 0;
}
.app-out-pannel,
.app-content-pannel {
  height: 100%;
}
.sys-header {
  background-color: #a7ee91;
  line-height: 60px;
  height: 60px;
  color: #0e0d0d;
  font-size: 600;
}
.sys-menu {
  background-color: #c0fac5;
}
.app-main {
  background-color: #faf9f8;
}
</style>

最后修改main.js,引入相关的包:

import { createApp } from "vue";
import App from "./App.vue";
import ElementPlus from "element-plus";
import "element-plus/dist/index.css";
import zhCn from "element-plus/es/locale/lang/zh-cn";

const app = createApp(App);

app.use(ElementPlus, { locale: zhCn });
app.mount("#app");

最后输入 npm run serve 运行,浏览器中打开如下图:
加载wms服务

  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
当然可以,下面是一个简单的示例代码: ```vue <template> <div id="map"></div> </template> <script> import 'ol/ol.css'; import Map from 'ol/Map'; import View from 'ol/View'; import TileLayer from 'ol/layer/Tile'; import WMTS from 'ol/source/WMTS'; import WMTSTileGrid from 'ol/tilegrid/WMTS'; import {get as getProjection} from 'ol/proj'; import {getWidth, getTopLeft} from 'ol/extent'; import {getCenter} from 'ol/extent'; const layer = new TileLayer({ source: new WMTS({ url: 'https://my.wms.service.url.com/wms', layer: 'mywmslayer', matrixSet: 'EPSG:4326', format: 'image/png', projection: getProjection('EPSG:4326'), tileGrid: new WMTSTileGrid({ origin: getTopLeft(getProjection('EPSG:4326').getExtent()), resolutions: [ 0.7031250000000002, 0.3515625000000001, 0.17578125000000006, 0.08789062500000003, 0.043945312500000014, 0.021972656250000007, 0.010986328125000003, 0.005493164062500001, 0.0027465820312500004, 0.0013732910156250002, 0.0006866455078125001, 0.00034332275390625006, 0.00017166137695312503, 0.00008583068847656251, 0.000042915344238281406, 0.000021457672119140703 ], matrixIds: [ '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '10', '11', '12', '13', '14', '15' ] }), style: 'default' }) }); export default { name: 'MyMap', data() { return { map: null, } }, mounted() { this.map = new Map({ target: 'map', layers: [layer], view: new View({ center: getCenter(getProjection('EPSG:4326').getExtent()), zoom: 2 }) }); } }; </script> ``` 这个示例代码中,我们使用了 `ol` 库中的 `Map`、`View`、`TileLayer`、`WMTS`、`WMTSTileGrid`、`getProjection`、`getWidth`、`getTopLeft` 和 `getCenter` 等类或函数,用于加载 `WMS` 服务。其中,`WMS` 服务的地址是 `https://my.wms.service.url.com/wms`,图层名称是 `mywmslayer`,矩阵集是 `EPSG:4326`,输出格式是 `image/png`,投影是 `EPSG:4326`,切片网格是通过 `WMTSTileGrid` 类生成的,地图样式为默认值。我们还创建了一个名为 `MyMap` 的 Vue 组件,用于在 `mounted` 钩子函数中创建地图。在地图创建完成后,我们可以将地图添加到页面中,如: ```html <template> <div> <MyMap /> </div> </template> <script> import MyMap from './MyMap.vue'; export default { name: 'App', components: { MyMap } }; </script> ``` 希望这个示例代码能够对你有所帮助!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值