leaflet学习笔记-leaflet-ajax获取数据(五)

前言

地图开发中都会用一些GeoJSON数据进行渲染,这是用就会需要加载GeoJSON数据,这时就可以使用leaflet-ajax进行数据的获取

数据准备

本文通过阿里云的地图选择器(DataV.GeoAtlas官网)可以找到云南省的GeoJSON数据,访问链接如下https://geo.datav.aliyun.com/areas_v3/bound/530000_full.json

下载leaflet-ajax

本文依旧使用npm下载

npm i leaflet-ajax

使用

本来我以为可以直接用了,但是使用报错,发现leaflet里面的确有L.GeoJSON.AJAX,但是那个L.GeoJSON.AJAX不是我们真正要使用的L.GeoJSON.AJAX,所以必须要重新import,覆盖掉它原来的L.GeoJSON.AJAX,使用的时候才不会报错

    //加载geoJson数据
    //要先引用import一下leaflet-ajax才能覆盖leaflet带的L.GeoJSON.AJAX
    let geoJsonLayer = new L.GeoJSON.AJAX("https://geo.datav.aliyun.com/areas_v3/bound/530000_full.json");
    geoJsonLayer.addTo(this.mainMap);

效果如下

完成代码如下

<template>
  <div id="mainMap"></div>
</template>

<script>
import MiniMap from 'leaflet-minimap';
import 'leaflet-ajax';
import "leaflet-minimap/dist/Control.MiniMap.min.css";

export default {
  name: "MainMap",
  data: () => {
    return {
      centerLatLng: [25, 102.7],
      mainMap: null
    }
  },
  methods: {},
  mounted() {
    this.mainMap = L.map('mainMap', {
      center: [25, 102.7], // 地图中心
      zoom: 14, //缩放比列
      zoomControl: true, //禁用 + - 按钮
      doubleClickZoom: true, // 禁用双击放大
      attributionControl: false, // 移除右下角leaflet标识
    });

    //添加瓦片图层(作为底图备选)
    let openstreetmapLayer = L.tileLayer('http://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png?{foo}', {foo: 'bar'}).addTo(this.mainMap);
    let somedomainLayer = L.tileLayer('http://{s}.somedomain.com/{foo}/{z}/{x}/{y}.png', {foo: 'bar'});
    // 定义一个图层(注意:小地图的layer不能和地图上共用一个,否则无法加载)
    const minilayer = L.tileLayer(`https://map.geoq.cn/ArcGIS/rest/services/ChinaOnlineStreetWarm/MapServer/tile/{z}/{y}/{x}`);

    let circle = L.circle(this.centerLatLng, {radius: 100, fillColor: 'red'});

    let littleton = L.marker([25.61, 102.7]).bindPopup('This is Littleton, CO.');
    let denver = L.marker([25.61, 102.71]).bindPopup('This is Denver, CO.');
    let aurora = L.marker([25.61, 102.72]).bindPopup('This is Aurora, CO.');
    let golden = L.marker([25.61, 102.73]).bindPopup('This is Golden, CO.');

    //相当于arcgis的featureLayer
    let featureGroup = L.featureGroup([circle, littleton, denver, aurora, golden]);
    featureGroup.addTo(this.mainMap);
    //聚焦所有的marker
    let bound = featureGroup.getBounds();
    this.mainMap.fitBounds(bound);

    //基础底图(每次只能有一个)
    let baseLayers = {
      openstreetmapLayer,
      somedomainLayer,
    };

    //覆盖图层
    let overlays = {
      // circle,
      // littleton,
      // denver,
      // aurora,
      // golden,

      '<i style="color:red;">layerGroup</i>': featureGroup
    };

    //添加图层管理组件
    let layerControl = L.control.layers(baseLayers, overlays, {position: 'topright'}).addTo(this.mainMap);

    //比例尺组件
    let scaleControl = L.control.scale({imperial: false}).addTo(this.mainMap);

    let miniMap = new MiniMap(minilayer, {
      // 鹰眼图配置项,参数非必须,可以忽略使用默认配置
      width: 200, // 鹰眼图宽度
      height: 200, // 鹰眼图高度
      toggleDisplay: true, // 是否显示最小化按钮
      minimized: false, // 是否最小化位置开始
    }).addTo(this.mainMap);

    //自定义图片marker
    let myIcon = L.icon({
      iconUrl: '/icon/test_icon.jpg',
      iconSize: [42, 42],
      iconAnchor: [21, 21],
      popupAnchor: [0, -20],//注意坐标轴的方向
      // shadowUrl: 'my-icon-shadow.png',
      // shadowSize: [68, 95],
      // shadowAnchor: [22, 94]
    });

    let customIconMarker = L.marker([25.2, 102.7], {icon: myIcon}).addTo(this.mainMap);
    customIconMarker.bindPopup('<i style="color:blue;">我现在就在这里,<b style="color: red;">你来打我呀</b></i>');
    //默认打开popup
    setTimeout(() => {
      customIconMarker.openPopup();
    });

    //加载geoJson数据
    //要先引用import一下leaflet-ajax才能覆盖leaflet带的L.GeoJSON.AJAX
    let geoJsonLayer = new L.GeoJSON.AJAX("https://geo.datav.aliyun.com/areas_v3/bound/530000_full.json", {
      style: {
        color: 'red'
      }, onEachFeature: (feature, layer) => {
        //为每一个feature要素添加label(这里就是显示行政区的名称)
        let latlng = layer?.getBounds().getCenter();
        if (latlng) {
          let div_icon = L.divIcon({html: feature?.properties?.name || '', iconSize: [100], className: 'divIconLabel'});
          L.marker(latlng, {icon: div_icon}).addTo(this.mainMap);
        }
      }
    });
    geoJsonLayer.addTo(this.mainMap);
  }
}
</script>

<style scoped>

#mainMap {
  width: 100vw;
  height: 100vh;
}

/deep/ .divIconLabel {
  font-size: 24px;
  font-weight: bolder;
  color: blue;
}
</style>

本文只是做了一个简单的引入和基本加载操作,具体的渲染问题,后面会在详细讲述


本文为学习笔记,仅供参考

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/285992.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

TDD-LTE 附着流程和去附着流程

目录 1. 附着流程 1.1. 正常附着流程 2. 异常附着流程 2.1 RRC建立失败 2.2 核心网拒绝 2.3 eNodeB未收到初始化上下文建立请求 2.4 RRC重配置请求丢失 2. 去附着流程 2.1 非关机去附着流程 2.1.1 连接态非关机去附着 2.1.2 空闲态非关机去附着 2.2 关机去附着流程 …

线性代数-行列式-错题笔记-1

视频讲解链接&#xff1a;http://【线性代数行列式&#xff0c;每日一题&#xff0c;考研疯狂刷题必备&#xff0c;一分钟训练营】https://www.bilibili.com/video/BV1NG4y1H71S?vd_source18c50b47f8412cfd9655895729fcd4f2

.NET DevOps 接入指南 | 1. GitLab 安装

引言 容器、DevOps和微服务被称为驱动云原生快速发展的三架马车。而DevOps是其中非常重要的一环&#xff0c;DevOps 是由Developers&#xff08;Dev&#xff09;和Operations&#xff08;Ops&#xff09;两个单词简称组成&#xff0c;中文直译就是“开发运维一体化”。 DevOps…

2023年12月Scratch等级考试(四级)真题试卷

2023年12月Scratch等级考试&#xff08;四级&#xff09;真题试卷 题目总数&#xff1a;24 总分数&#xff1a;100 选择题 第 1 题 单选题 Scratch运行下列程序&#xff0c;输入“abcdef”&#xff0c;程序结束后&#xff0c;变量“字符串”是&#xff1f;&#xff0…

外贸人应该顺应趋势做外贸

2024年&#xff0c;有人疑惑外贸将如何发展&#xff1f;我想紧跟趋势是不会出错的&#xff0c;多年前网络没有如今那么发达&#xff0c;客户到中国参展或者来访就能确认订单。如今到处都是各种推广平台&#xff0c;客户足不出户就能在线上订购产品&#xff0c;如果你还是想靠之…

基于Java SSM框架实现智能仓储管理系统项目【项目源码+论文说明】

基于java的SSM框架实现仓库管理系统演示 摘要 随着科学技术的飞速发展&#xff0c;社会的方方面面、各行各业都在努力与现代的先进技术接轨&#xff0c;通过科技手段来提高自身的优势&#xff0c;智能仓储系统当然也不能排除在外。智能仓储系统是以实际运用为开发背景&#xf…

易用、高效、可靠!高精度组合定位系统P-Box测试解决方案

简介 TCU&#xff08;Telematics Control Unit&#xff09;是车载网联通讯终端&#xff0c;用于实现车辆远程通讯和远程服务。随着自动驾驶技术的不断发展&#xff0c;准确获取车辆定位信息变得越来越重要。P-Box将GNSS定位与惯性导航定位相结合&#xff0c;能够为车辆提供精准…

C++上位软件通过Snap7开源库访问西门子S7-1200/S7-1500数据块的方法

前言 本人一直从事C上位软件开发工作较多&#xff0c;在之前的项目中通过C访问西门子PLC S7-200/S7-1200/S7-1500并进行数据交互的应用中一直使用的是ModbusTCP/ModbusRTU协议进行。Modbus上位开源库采用的LibModbus。经过实际应用发现Modbus开源库单次发送和接受的数据不能超过…

R306指纹识别模块功能实现示例

1 基本通信流程 1.1 UART 命令包的处理过程 1.2 UART 数据包的发送过程 UART 传输数据包前&#xff0c;首先要接收到传输数据包的指令包&#xff0c;做好传输准备后发送成功应答包&#xff0c;最后才开始传输数据包。数据包主要包括&#xff1a;包头、设备地址、包标识、包长…

【深度学习下载大型数据集】快速下载谷歌云盘数据集

个人博客:Sekyoro的博客小屋 个人网站:Proanimer的个人网站 跑深度学习的时候,一些数据集比较大,比如60多个G,而且只是训练集. 然后这些数据是由某些实验室组采集的,并不像一些大公司搞的,一般都直接方法一些网盘中. 如果是谷歌网盘,本身通过代理也不麻烦,但是发现即使通过代…

Java中常见的进制转换

进制是一种表示数字的方法&#xff0c;用于计算机科学、数学和电子工程等领域。常见的进制包括十进制、二进制、八进制和十六进制。 十进制是我们最常用的数字表示方法&#xff0c;使用10个数字(0-9)来表示所有数字。 二进制是计算机最基本的进制&#xff0c;使用2个数字(0和1)…

vue3 实现el-date-picker日期筛选过程

一、图例 二、需求&#xff1a; 有2个查询条件&#xff0c;startTime 和 endTime 选中时间1&#xff0c;禁止选中时间2&#xff0c;当前值传递给 startTime 选中时间2&#xff0c;禁止选中时间1&#xff0c;当前值传递给 startTime 和 endTime 三、完整代码 <div class…

java中使用redis

1、redis数据类型 1.1、5种数据类型 redis存储的是key-value结构的数据&#xff0c;其中key是字符串类型&#xff0c;value有5种常用的数据类型&#xff1a;字符串 string、哈希 hash、列表 list、集合 set、有序集合 sorted set / zset。 字符串(string)&#xff1a;普通字符…

揭秘计算机内部通信:探秘数据、地址与控制信号的奥秘

引言 在我们前面的讲解中&#xff0c;我们详细了解了计算机系统的核心组件&#xff0c;包括CPU、内存和磁盘。然而&#xff0c;总线在这个体系中同样至关重要。总线是计算机内部各部件间通信的桥梁&#xff0c;涉及数据、地址和控制信号的传输。在接下来的内容中&#xff0c;我…

【C++】浅拷贝 / 深拷贝 / 写时拷贝

文章目录 1. 经典的string类问题2. 浅拷贝3. 深拷贝3.1 传统写法的String类3.2 现代写法的String类 4. 写时拷贝 1. 经典的string类问题 上一篇博客已经对string类进行了简单的介绍&#xff0c;大家只要能够正常使用即可。 链接&#xff1a;【C】string 在面试中&#xff0c;面…

用Redis实现实现全局唯一ID

全局唯一ID 如果使用数据库自增ID就存在一些问题&#xff1a; id的规律性太明显受表数据量的限制 全局ID生成器&#xff0c;是一种在分布式系统下用来生成全局唯一ID的工具&#xff0c;一般要满足下列特性&#xff1a; 唯一性高可用递增性安全性高性能 为了增加ID的安全性…

PMP如何续证?

PMP证书的有效期是3年&#xff0c;那过了有效期如何续证呢&#xff1f;对此你需要完成两个步骤&#xff1a; 1.在三年之内向PMI申报完成60个PDU&#xff1b; 2.向PMI申请下一个三年续证的有效期并缴费。 流程看着挺简单&#xff0c;但是对于首次操作的朋友可能会感到有些陌生…

深入解析云原生与Kubernetes:现代化应用开发的未来

云原生是一种创新的软件开发和部署方法论&#xff0c;旨在使应用程序能够更好地适应云环境的特性和需求。而Kubernetes作为云原生的核心技术&#xff0c;提供了强大的容器编排和管理能力&#xff0c;改变了应用部署和运行的方式。本文将深入探讨云原生和Kubernetes的概念、原理…

【VTK三维重建-体绘制】第四期 VTK中GPU加速

很高兴在雪易的CSDN遇见你 VTK技术爱好者 QQ&#xff1a;870202403 前言 上期内容讲到VTK的体绘制技术vtkGPUVolumeRayCastMapper&#xff0c;本文分享VTK中GPU加速的相关内容&#xff0c;希望对各位小伙伴有所帮助&#xff01; 感谢各位小伙伴的点赞关注&#xff0c;小易会…

WPF Blend for visual studio使用

Blend for visual studio介绍 VS自带Blend for visual studio是专门用来做WPF、Metro等的界面设计的可视化工具&#xff0c;其功能和PS类似。其目的让做界面和后台的程序分开&#xff0c;能快速绘制形状和路径、修改对象样式、动态显示对象(动画)、显示数据等高级操作。VS与Ble…