离线地图开发

news/2024/7/9 23:46:50 标签: vue, openlayers, 离线地图

文章目录

      • 概述:
      • 一、地图服务器配置
        • 1、地图数据下载
        • 2、nginx地图服务器配置
      • 二、地图调用
      • 附:

概述:

在内网离线环境内,如何进行离线地图开发呢?本文讲述一种基于nginx作为地图服务器,再结合openlayers实现离线地图数据访问的一种可行方案。

一、地图服务器配置

1、地图数据下载

​ 要想实现离线地图开发,得先获得地图数据。可以通过**全能电子地图下载器太乐地图下载器** 等地图现在软件,下载png格式的瓦片数据。例如,以太乐地图下载器为例。

​ 首先下载并安装下载器,下载地址:https://pan.baidu.com/s/1-_4_b-pX5UqD6kcuXjnk4w (提取码:4nkj ),安装并获得企业版许可。然后,按以下步骤进行下载离线地图数据。

图层类型选择

创建任务,并下载

下载结果

2、nginx地图服务器配置

​ 准备nginx环境,可以在任意平台下,本文以windows环境为例,下载并解压nginx。将上述步骤中下载的瓦片数据拷贝到数据存放目录中去(可以任意路径),如 D:\nginx-1.18.0\roadmap

瓦片数据存储

​ 准备好地图瓦片数据后,修改nginx配置文件(D:\nginx-1.18.0\conf\nginx.conf),实现图片访问:

#监听9089端口,访问路径:localhost:9089/roadmap/xxx.png
server {
		listen   9089;
		server_name 127.0.0.1;

		location ^~/roadmap{
			alias D:/nginx-1.18.0/roadmap/;
			autoindex on;
			charset utf-8,utf-8;
		}
}

添加完以上配置文件后,启动nginx,在浏览器输入:localhost:9089/roadmap 进行测试。得到各个层级的数据,说明nginx服务器配置成功。

访问测试

二、地图调用

基于vue+openlayers6,实现离线地图调用

vue"><template>
  <div class="demo01">
    <div id='map'></div>
    <Row>
      <Col span="24" type="flex" align="center">
        <Button type="primary" @click="setScale('max')">放大</Button>
        <Button type="primary" @click="setScale('min')">缩小</Button>
      </Col>
    </Row>
  </div>
</template>

<script>
import "ol/ol.css";
import Map from 'ol/Map';
import View from 'ol/View';
import TileLayer from 'ol/layer/Tile';
import XYZ from 'ol/source/XYZ';

import OSM from 'ol/source/OSM';

import Overlay from 'ol/Overlay';
import {toStringHDMS} from 'ol/coordinate';
import {toLonLat} from 'ol/proj';
import TileJSON from 'ol/source/TileJSON';

export default {
  name: 'HelloWorld',
  data () {
    return {
      msg: 'Welcome to Your Vue.js App',
      map: null,
      overlay:null,
      hdms:null
    }
  },
  mounted(){
    this.initMap();
  },
  methods:{
    //初始化地图
    initMap(){
      var gaodeMapLayer = new TileLayer({
        source: new XYZ({
          url: 'http://localhost:9089/roadmap/{z}/{x}/{y}.png'
        })
      });

      this.map = new Map({
        layers: [gaodeMapLayer],
        view: new View({
          center: [103.83405759641674,36.060709432547604],
          projection: 'EPSG:4326',
          zoom: 13
        }),
        target: 'map'
      });

      this.map.on('singleclick', function(evt) {debugger
        var coordinate = evt.coordinate;
        var hdms = toStringHDMS(toLonLat(coordinate));

        this.hdms = hdms;
        alert(coordinate);
        //this.overlay.setPosition(coordinate);
      });
    },
    //手动缩放
    setScale(type){
      let view = this.map.getView();
      let zoom = view.getZoom();
      let scale = type === 'max' ? zoom + 1 : zoom -1;
      view.setZoom(scale);
    }
  }
}
</script>

<!-- Add "scoped" attribute to limit CSS to this component only -->
<style scoped >
  .map {
    height: 100%;
    width: 100%;
  }
  body{
    margin:0 !important;
  }
  #app{
    margin:0 !important;
  }

  #map{
    width: 100%;
    height: 80vh;
    margin-bottom: 10px;
  }
  .demo01 button{
      margin: 0px 5px;
  }
</style>

效果图

附:

1、nginx离线地图服务器:

链接:https://pan.baidu.com/s/17DGUYTfG7BjarXF4RAzC6w
提取码:8dt4
内部包含甘肃省1-13级离线瓦片地图,解压即可运行。

2、项目码云地址:

https://gitee.com/lifuping_net/openlayers-offline-map


http://www.niftyadmin.cn/n/1618353.html

相关文章

文件夹树状图生成

一、概述 ​ 不知道经常写技术文档或博客的小伙伴有没有显示文件夹目录树的需求。比如要介绍一下某个项目的工程结构的时候&#xff0c;或许会用到&#xff0c;例如vue项目结构&#xff1a; vue-text-project //项目名称├── config│ ├── dev.env.js│ ├── in…

ios uiview 如何刷新_ios – 重新加载/刷新子视图 – setNeedsDisplay不起作用

我遇到setNeedsDisplay的问题.我有一个带有很多子UIViews的UIView,在Inteface Builder中创建.我还有一个带有IBAction的按钮.在这个IBAction中我想重绘/重新加载所有UIViews(或所有UIElements,如UILabel,UIWebView等等)我这样做,这对我不起作用,不知道为什么..&#xff1a;//re…

Spring Boot 项目jar文件启动脚本编写

文章目录一、概述二、脚本编写1、linux 环境脚本编写1.1、start.sh1.2、stop.sh1.3 脚本使用2、windows 环境脚本编写2.1 start.cmd2.2 stop.cmd2.3 脚本使用三、注&#xff1a;一、概述 ​ Spring Boot 项目打包为jar文件后&#xff0c;可以直接启动。若不写脚本&#xff0c;…

apply筛选 pandas_【Pandas教程】像写SQL一样用Pandas

写在最前Python在数据分析领域有三个必须需要熟悉的库&#xff0c;分别是pandas,numpy和matplotlib&#xff0c;如果排个优先级的话&#xff0c;我推荐先学pandas。numpy主要用于数组和矩阵的运算&#xff0c;一般在算法领域会应用比较多。matplotlib用于作图的话其实可替代的库…

解决idea bpmn中文乱码问题

概述 ​ idea安装完 actiBPMN 插件以后&#xff0c;编辑bpmn流程时&#xff0c;可能会出现中文乱码问题。此时就需要进行设置编码为UTF8。此文提供两种解决方案。 文章目录方案11、修改整个项目的encding 为 utf-8。2、修改vmoptions配置文件方案2修改Custom VM Options方案1 …

32抗干扰_首创通用32位MCU跑分大战中国芯超越ST32

注&#xff1a;以下文章纯手打原创&#xff0c;评测数据从第三方应用角度测评&#xff0c;如您是以下IC原厂&#xff0c;有专业性的偏颇建议请及时联系小编。说起评测&#xff0c;大家往往想起手机&#xff0c;电脑&#xff0c;汽车等等&#xff0c;相信大家经常在数码IT网站看…

el-date-picker 兼容IE浏览器

一、问题描述 ​ element组件之el-date-picker&#xff0c;在chrome浏览器中正常显示&#xff0c;而在IE浏览器却无法显示值。此时&#xff0c;需要设置value-format属性。 <el-date-pickerv-model"value1"type"datetime"placeholder"选择日期时间…

浙江python改革_重大改革:Python 语言将被加入高考科目!

据媒体报道&#xff0c;教育部考试中心近日发布了“关于全国计算机等级(NCRE)体系调整”的通知&#xff0c;决定自2018年3月起&#xff0c;在全国计算机二级考试中加入了“Python语言程序设计”科目。早些消息&#xff0c;浙江省信息技术课程改革方案已经出台&#xff0c;Pytho…