我的编程空间,编程开发者的网络收藏夹
学习永远不晚

vue集成openlayers问题

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

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实现的,地理数据和展示效果之间的交互是依靠的像素坐标和经纬度坐标之间的转换,而地图元素的缩放破坏了这个转换关系,所以造成了鼠标位置和实际绘制位置的偏移。        

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持编程网。

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

vue集成openlayers问题

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

vue集成openlayers问题

这篇文章主要介绍了vue集成openlayers问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
2023-01-28

如何解决vue集成sweetalert2提示组件的问题

这篇文章主要介绍如何解决vue集成sweetalert2提示组件的问题,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!一、项目集成官网链接:https://sweetalert2.github.io案例1. 引入方式
2023-06-25

Android集成GoogleCast异常问题解析

这篇文章主要为大家介绍了Android集成GoogleCast异常问题解析,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
2023-02-10

解决springcloud集成nacos遇到的问题

这篇文章介绍了如何解决springcloud集成nacos遇到的问题,文章中有详细的代码示例,需要的朋友可以参考一下
2023-05-15

如何解析OpenLayers 3加载矢量地图源的问题

今天就跟大家聊聊有关如何解析OpenLayers 3加载矢量地图源的问题,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。一、矢量地图矢量图使用直线和曲线来描述图形,这些图形的元素是一些
2023-06-22

Net6 Xunit集成测试问题怎么解决

本篇内容主要讲解“Net6 Xunit集成测试问题怎么解决”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Net6 Xunit集成测试问题怎么解决”吧!1.新建测试项目2.使用到的类库Xunti与
2023-06-30

如何解决Spring集成webSocket页面访问404的问题

小编给大家分享一下如何解决Spring集成webSocket页面访问404的问题,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!由于工作需求,需要搭建一个平台无关的
2023-05-30

编程热搜

目录