vue中使用leaflet加载open street map的一些使用

1.leaflet 的英文文档:Documentation - Leaflet - a JavaScript library for interactive mapsicon-default.png?t=M5H6https://leafletjs.com/reference.html

2.leaflet的中文文档:Documentation - Leaflet - 一个交互式地图 JavaScript 库icon-default.png?t=M5H6https://leafletjs.cn/reference-1.8.0.html

3.首先安装npm:

npm i leaflet -S

4.引进需要编辑的地图组件中,没有全局去调用。比如说新建的OpenStreetMap.vue中:

import L from "leaflet";
import "leaflet/dist/leaflet.css";

5.leaflet通过插件是可以渲染多个第三方的地图的,目前先渲染单个地图,就是openstreetmap地图,这个地图是没有自己的官方的。

const options = {
    center: [23.061977, 113.392585], // 地图中心
    minZoom: 0,
    maxZoom: 18,
    zoom: 10,
    zoomControl: true, //禁用 + - 按钮
    doubleClickZoom: true, // 禁用双击放大
    // attributionControl: true, // 移除右下角leaflet标识
    dragging: true, //禁止鼠标拖动滚动
    boxZoom: true, //决定地图是否可被缩放到鼠标拖拽出的矩形的视图,鼠标拖拽时需要同时按住shift键.
    scrollWheelZoom: true, //禁止鼠标滚动缩放
    zoomSnap: 0.5, //地图能放缩的zoom的最小刻度尺度,默认值1
    fullscreenControl: true, //全屏控件,不显示
}
let map = L.map('mapId', options)
this.map = map;
 //添加创建地图的函数
        const createTileLayer = (map, url, options) => {
          let tileLayer = L.tileLayer(url, options);
          tileLayer.addTo(map);
          return tileLayer;
        };

createTileLayer(this.map, "https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png");

不出意外,以上的代码就可以简单渲染一个openstreetmap地图了

6.下面加上些小玩意,就是地图上的小工具控件,

        首先安装:

npm i leaflet.pm -S

 然后在当前的地图组件中,引进:

import "leaflet.pm";
import "leaflet.pm/dist/leaflet.pm.css";

  在地图初始化的方法中加上以下的代码:

const option= {
    //leaflet.pm配置项
        position: "topleft",
        drawPolygon: true, // 添加绘制多边形
        drawMarker: false, //添加按钮以绘制标记
        drawCircleMarker: true, //添加按钮以绘制圆形标记
        drawPolyline: true, //添加按钮绘制线条
        drawRectangle: true, //添加按钮绘制矩形
        drawCircle: true, //  添加按钮绘制圆圈
        editMode: true, //  添加按钮编辑多边形
        dragMode: true, //   添加按钮拖动多边形
        cutPolygon: true, // 添加一个按钮以删除图层里面的部分内容
        removalMode: true, // 清除图层
}
this.map.pm.setLang("zh"); //设置语言  en, de, it, ru, ro, es, fr, pt_br, zh , nl
this.map.pm.addControls(option); //添加工具

不出意外应该有了

7.现在渲染多个地图,这边是封装了单独的地图组件,放到父组件中渲染,可以在父组件中,把某个地图的标识传个地图组件,然后监听,进行渲染不同的地图

         首先要安装插件:

npm i leaflet.chinatmsproviders -S
子组件中:
import "leaflet.chinatmsproviders";
props: {
      mapUrl: {
        type: String,
        default: "Geoq.Normal.Map",
      },
    },
watch: {
      mapUrl() {
        this.map.removeLayer(this.layers);
        this.$nextTick(() => {
          this.layers = this.chinaLayers(this.map, this.mapUrl);
        });
      },
    },
父组件中:
 <map-component :map-url="mapUrl"></map-component>
 data: ()=> ({
     mapUrl: "Geoq.Normal.Map",
      mapList: [
        {
          id: 1,
          name: "智图地图",
          url: "Geoq.Normal.Map",
        },
        {
          id: 4,
          name: "天地影像",
          url: "TianDiTu.Satellite.Map",
        },
        {
          id: 5,
          name: "午夜蓝",
          url: "Geoq.Normal.PurplishBlue",
        },
        {
          id: 6,
          name: "高德卫星地图",
          url: "GaoDe.Satellite.Map",
        },
        {
          id: 7,
          name: "高德地图",
          url: "GaoDe.Normal.Map",
        },
        {
          id: 8,
          name: "OSM地图",
          url: "OSM.Normal.Map",
        },
        {
          id: 9,
          name: "腾讯地图",
          url: "Tencent.Normal.Map",
        },
        {
          id: 10,
          name: "谷歌地图",
          url: "Google.Normal.Map",
        },
      ],
    })

最后在地图组件中的地图初始化方法中:

const chinaLayers = (map, url, option)=> {
        let chinaLeayer = L.tileLayer.chinaProvider(url, option);
        chinaLeayer.addTo(map);
        return chinaLeayer;
      };
this.layers = this.chinaLayers(this.map, this.mapUrl); //加载各种地图

不出意外的话,就会出现了多个地图的选择了:

8.先这样吧。。。

### 如何使用 OpenStreetMap API 进行开发 #### 使用 JavaScript 加载 OpenStreetMap 地图并展示在网页上 为了在 Web 应用程序中集成 OpenStreetMap (OSM),可以利用 Leaflet.js 或者其他类似的库简化这一过程。Leaflet 是一个轻量级开源的 JavaScript 库,专为移动友好设计的地图而构建。 下面是一段简单的 HTML 和 JavaScript 代码片段用于加载 OSM 并将其嵌入到网页中: ```html <!DOCTYPE html> <html> <head> <title>OpenStreetMap Example</title> <!-- 引入 Leaflet CSS --> <link rel="stylesheet" href="https://unpkg.com/leaflet@1.7.1/dist/leaflet.css"/> <style>#map { height: 400px; width: 80%; }</style> </head> <body> <div id="map"></div> <!-- 引入 Leaflet JS 文件 --> <script src="https://unpkg.com/leaflet@1.7.1/dist/leaflet.js"></script> <script type="text/javascript"> var map = L.map('map').setView([51.505, -0.09], 13); L.tileLayer('https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png', { attribution: '© <a href="https://www.openstreetmap.org/copyright">OpenStreetMap</a> contributors' }).addTo(map); </script> </body> </html> ``` 这段代码创建了一个基本的地图实例,并设置了初始视图位置和缩放级别[^2]。 #### 关于 SHP 和 OSM 数据格式 SHP(Shapefile)是一种由 ESRI 开发的空间矢量数据存储格式,广泛应用于地理信息系统(GIS)软件之间交换空间数据。它通常包含多个文件(.shp,.shx,.dbf等),其中 .shp 存储几何对象(点线面). 相比之下,OSM 的 XML 格式的源数据则更为灵活,支持更复杂的功能集。OSM 数据模型定义了几种主要元素:节点(node)表示单个地理位置;路径(way)是由一系列有序节点组成的线条或多边形;关系(relation)用来描述不同要素之间的关联方式。这些特性使得 OSM 成为众包制图项目的理想选择[^3]. 对于 Android 中 OSM 开发而言,虽然 ArcGIS 提供了一套完整的解决方案,但对于仅需简单地图功能的应用来说可能显得过于庞大。此时可以选择像 OSMDroid 这样的轻量化框架来处理离线地图缓存等问题[^1].
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值