离线地图开发

概述:

在内网离线环境内,如何进行离线地图开发呢?本文讲述一种基于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,实现离线地图调用

<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

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值