zoukankan      html  css  js  c++  java
  • Vue中使用Openlayers加载Geoserver发布的ImageWMS

    场景

    Openlayers下载与加载geoserver的wms服务显示地图:

    https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/114320531

    在上面使用Openlayers加载wms服务显示地图的基础上,如果想要在Vue中使用Openlayers加载地图怎么用。

    在上面使用图层预览后可以直接在网页中显示wms地图

    ImageWMS与TileWMS的区别

    相同点:都是加载WMS服务。
    不同点:TitleWMS会把当前可视窗口根据网格(开发者可以在调用OpenLayers api的时候自定义)切分,一片一片地返回回来,在前端进行整合。而ImageWMS则不会进行切割,每次请求都是只会返回一个当前窗口可见地地图图片。如果WMS服务对应地数据比较大并且网络条件不是很好的时候,TileWMS交互体验更好一点(因为做了切割,每次返回回来的图片大小都比较小),而ImageWMS是返回一整个图片,看起来会有较大的卡顿时间,交互感觉不好。

    切片方式(TileWMS):动态地图在GIS Server生成后,以切片的方式返回到前端,优点是将地图切分,每个切片的数据量很小,便于数据的传输,适用于网络状况不佳的环境;缺点是在地图切片的过程中,可能会造成我遇到的 标注多次出现的问题。
    图像方式(ImageWMS):地图生成后,直接以一个整体返回到前端显示,优点是不会出现标注重复出现的问题,确定是对网络状况不佳的环境,可能出现请求失败的问题。

    注:

    博客:
    https://blog.csdn.net/badao_liumang_qizhi
    关注公众号
    霸道的程序猿
    获取编程相关电子书、教程推送与免费下载。

    实现

    首先搭建一个Vue项目,这里使用快速开发框架搭建如下

    若依前后端分离版手把手教你本地搭建环境并运行项目:

    https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/108465662

    Vue中安装Openlayers

    npm install ol

    然后我们新建一个组件olMapImageWMS.vue

    在此组件中首先增加一个div用来显示地图

    <template>
      <div id="map" class="map"></div>
    </template>

    并且设置id,后面用来渲染地图用,然后设置一些样式

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

    然后导入一些相关模块

    //导入基本模块
    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";

    然后在mounted方法中执行地图初始化的方法initMap

      mounted() {
        this.initMap();
      },

    在地图初始化的方法中

    首先新建一个layers图层名为image

          var image = new Image({
            source: new ImageWMS({
              //不能设置为0,否则地图不展示。
              ratio: 1,
              url: "http://localhost:8000/geoserver/nyc/wms",
              params: {
                LAYERS: "nyc:nyc_roads",
                STYLES: "",
                VERSION: "1.1.1",
                FORMAT: "image/png",
              },
              serverType: "geoserver",
            }),
          });

    注意这里的参数要与自己上面使用geoserver发布的wms预览中的一致

    url就是预览地址中的问号前面部分

    params中的相关参数,可以在预览界面中查看源代码获取

    注意这里的FORMAT是image/png

    然后新建地图对象

          this.map = new Map({
            //地图容器ID
            target: "map",
            //引入地图
            layers: [image],
            view: new View({
              //地图中心点
              center: [987777.93778, 213834.81024],
              zoom: 12,
              // minZoom:1, // 地图缩放最小级别
            }),
          });

    这里需要主要的是target的参数值对应的是上面div的id,用来设置地图容器的id

    然后layers设置图层时就是上面新建的image图层对象

    然后就是设置地图的中心点,可以在预览界面中获取要显示地图时的中心点

    组件完整代码

    <template>
      <div id="map" class="map"></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 {
      name: "olMapImageWMS",
      data() {
        return {
        };
      },
      mounted() {
        this.initMap();
      },
      methods: {
        initMap() {
          var image = new Image({
            source: new ImageWMS({
              //不能设置为0,否则地图不展示。
              ratio: 1,
              url: "http://localhost:8000/geoserver/nyc/wms",
              params: {
                LAYERS: "nyc:nyc_roads",
                STYLES: "",
                VERSION: "1.1.1",
                FORMAT: "image/png",
              },
              serverType: "geoserver",
            }),
          });
    
          this.map = new Map({
            //地图容器ID
            target: "map",
            //引入地图
            layers: [image],
            view: new View({
              //地图中心点
              center: [987777.93778, 213834.81024],
              zoom: 12,
              // minZoom:1, // 地图缩放最小级别
            }),
          });
        },
      },
    };
    </script>
    
    <style scoped>
    .map {
       100%;
      height: 800px;
    }
    </style>

    然后在需要显示地图的页面引入并显示组件

    <template>
      <div class="app-container home">
        <el-row :gutter="20">
          <olMapImageWMS></olMapImageWMS>
        </el-row>
        <el-divider />
      </div>
    </template>
    
    <script>
    import olMapImageWMS from "@/components/olMap/olMapImageWMS";
    export default {
      name: "index",
      components: {
        olMapImageWMS,
      },

    然后启动项目,访问页面查看效果

     

    博客园: https://www.cnblogs.com/badaoliumangqizhi/ 关注公众号 霸道的程序猿 获取编程相关电子书、教程推送与免费下载。
  • 相关阅读:
    [ 低危 ] mt网CRLF
    mysql之字段的修改,添加、删除,多表关系(外键),单表详细操作(增删改)
    mysql 之编码配置、引擎介绍、字段操作、数据类型及约束条件
    Navicat Premium永久激活方式
    centos 用户名密码忘记了怎么办?
    并发编程总结
    初识mysql
    线程queue、线程进程池,协程
    python解释器
    线程全局修改、死锁、递归锁、信号量、GIL以及多进程和多线程的比较
  • 原文地址:https://www.cnblogs.com/badaoliumangqizhi/p/14677483.html
Copyright © 2011-2022 走看看