vue集成openlayers问题

 更新时间:2023年01月23日 13:00:22   作者:呱呱•.•  
这篇文章主要介绍了vue集成openlayers问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

vue集成openlayers

下载依赖

cnpm i -S ol

创建地图文件

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

按需引入相应的API,具体查看官方文档

<script>
import Map from "ol/Map";
import View from "ol/View";
// 添加图层
import TileLayer from "ol/layer/Tile";
import XYZ from "ol/source/XYZ";
import TileWMS from "ol/source/TileWMS.js";
// 格式化地理坐标
import { fromLonLat } from "ol/proj.js";
export default {
  data() {
    return {
      map: null,
      //后台服务器地址
      urlRoot: "http://193.112.110.27:8080/geoserver/gee/wms?",
    };
  },
  mounted() {
    this.init();
  },
  methods: {
    init() {
      //  经纬度转化
      var center = fromLonLat([101.34272, 23.6042484]);
      //  自定义图层
      this.layers = [
        new TileLayer({
          source: new TileWMS({
            url: this.urlRoot, //图层地址
            params: { LAYERS: "fangchenggang:other_sea" }, //图层名称
            serverType: "geoserver", //后台服务器
            zIndex: 2 //图层层级
          })
        }),
        new TileLayer({
          source: new TileWMS({
            url: this.urlRoot,
            params: { LAYERS: "fangchenggang:realm" },
            serverType: "geoserver"
          }),
          zIndex: 3
        }),
        new TileLayer({
          source: new TileWMS({
            url: this.urlRoot,
            params: { LAYERS: "fangchenggang:stockpile" },
            serverType: "geoserver"
          }),
          zIndex: 3
        }),
        new TileLayer({
          source: new TileWMS({
            url: this.urlRoot,
            params: { LAYERS: "fangchenggang:road" },
            serverType: "geoserver"
          }),
          zIndex: 3
        }),
        new TileLayer({
          source: new TileWMS({
            url: this.urlRoot,
            params: { LAYERS: "fangchenggang:railway" },
            serverType: "geoserver"
            //crossOrigin: 'anonymous'
          }),
          zIndex: 3
        }),
        new TileLayer({
          source: new TileWMS({
            url: this.urlRoot,
            params: { LAYERS: "cesium:storage_yard" },
            serverType: "geoserver"
          }),
          zIndex: 3
        })
      ];
      //  加载地图
      this.map = new Map({
        target: "map", //地图容器
        layers: [        
        //加载天地图天地图
        new TileLayer({
          source: new XYZ({
            url: "https://{a-c}.tile.openstreetmap.org/{z}/{x}/{y}.png"
          }),
          zIndex: 1
        })],
        view: new View({
          projection: "EPSG:3857",
          //初始化地图中心
          center: center,
          zoom: 2,
          // 镜头
          maxZoom: 18,
          minZoom: 13
        }),
        logo: false
      });
      //添加图层
      this.map.addLayer(layers);
    }
  }
};
</script>

其他API

从地图中删除给定的叠加层。

this.map.removeLayer(layer);

设置图层显示或隐藏

this.layers.road.setOpacity(0)

vue openlayers绘制数据时鼠标位置偏移问题

问题:将地图集成到现有的vue项目中,使用测量/绘制工具,鼠标位置和绘制的实际位置发生偏移。

如图,

正常应该是鼠标位置和实际绘制位置在同一点,图:

分析:我能想到可能造成这个问题的原因有:

  • 显示器缩放比例不是100%;
  • 地图dom被拉伸;
  • 组件冲突导致。

解决方案

我的系统是项目本身对body设置了缩放,因此在浏览器大小和预置大小不一致时会对body整体进行缩放,从而导致map元素被缩放。

body此时的样式:

至此,问题找到,取消这个缩放即可得到正确的鼠标定位。

反思一下,地图出现这个问题是因为地图数据的展示是凭借canvas实现的,地理数据和展示效果之间的交互是依靠的像素坐标和经纬度坐标之间的转换,而地图元素的缩放破坏了这个转换关系,所以造成了鼠标位置和实际绘制位置的偏移。        

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • 解决vue router组件状态刷新消失的问题

    解决vue router组件状态刷新消失的问题

    这篇文章主要介绍了vue router组件状态刷新消失的问题,非常不错,具有一定的参考借鉴价值,需要的朋友可以参考下
    2018-08-08
  • vue中keep-alive组件的用法示例

    vue中keep-alive组件的用法示例

    众所周知keep-alive是Vue提供的一个抽象组件,主要是用来对组件进行缓存,从而做到节省性能,这篇文章主要给大家介绍了关于vue中keep-alive组件用法的相关资料,需要的朋友可以参考下
    2021-05-05
  • vue子路由跳转实现tab选项卡

    vue子路由跳转实现tab选项卡

    这篇文章主要为大家详细介绍了vue子路由跳转实现tab选项卡,完成一个简单的tab选项卡布局,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-07-07
  • Vue刷新后页面数据丢失问题的解决过程

    Vue刷新后页面数据丢失问题的解决过程

    在做vue项目的过程中有时候会遇到一个问题,就是进行F5页面刷新的时候,页面的数据会丢失,这篇文章主要给大家介绍了关于Vue刷新后页面数据丢失问题的解决过程,需要的朋友可以参考下
    2022-11-11
  • 初识简单却不失优雅的Vue.js

    初识简单却不失优雅的Vue.js

    这篇文章主要为大家介绍了简单却不失优雅、小巧而不乏大匠的Vue.js,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2016-09-09
  • 前端vue3使用axios调用后端接口的实现方法

    前端vue3使用axios调用后端接口的实现方法

    vue本身不支持ajax接口的请求,所以在vue中经常使用axios这个接口请求工具,下面这篇文章主要给大家介绍了关于前端vue3使用axios调用后端接口的实现方法,需要的朋友可以参考下
    2022-12-12
  • vue LogicFlow更多配置选项示例详解

    vue LogicFlow更多配置选项示例详解

    这篇文章主要为大家介绍了vue LogicFlow更多配置选项详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-01-01
  • Vue2使用cube-ui 实现搜索过滤、高亮功能

    Vue2使用cube-ui 实现搜索过滤、高亮功能

    cube-ui 是基于 Vue.js 实现的精致移动端组件库,由于很长一段时间没有学习cube-ui 的功能实现示例代码了,今天通过本文给大家介绍下Vue2使用cube-ui 实现搜索过滤、高亮功能,感兴趣的朋友跟随小编一起看看吧
    2023-01-01
  • vue-baidu-map 进入页面自动定位的解决方案(推荐)

    vue-baidu-map 进入页面自动定位的解决方案(推荐)

    这篇文章主要介绍了vue-baidu-map 进入页面自动定位的解决方案,需要的朋友可以参考下
    2018-04-04
  • 浅谈VUE uni-app 自定义组件

    浅谈VUE uni-app 自定义组件

    这篇文章主要介绍了uni-app 的自定义组件,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-10-10

最新评论