获取全国各地行政区的genjson数据以及使用leaflet加载行政区数据

前言

在写代码之前,我们需要做一些准备工作,需要有一份某个行政区的geojson数据,如果你没有也没关系,我们可以去下载,地址:geojson数据下载网站

打开网站,选择自己想要获取的行政区,我这里以南宁为例。我们有两种方式获取数据,第一种直接复制链接地址,在线引入geojson数据。第二种,点击下载按钮,将数据以json文件的形式保存到本地,从本地引入数据。
在这里插入图片描述

我这里以第二种方法来演示。

一、简单加载行政区数据

首先创建一个地图对象,将地图的中心点设置成在我们的行政区内,否则加载完成之后看不到效果。

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>Title</title><link rel="stylesheet" href="../leaflet/leaflet.css"><script src="../leaflet/leaflet.js"></script><script src="../js/jquery.js"></script>
</head>
<style>#map {position: absolute;width: 100%;height: 100vh;left: 0;top: 0;}
</style>
<body>
<div id="map"></div>
</body>
<script>const map = L.map("map",{center: [22.82261, 108.37345],  //[纬度,经度]zoom: 8,  //默认缩放等级crs: L.CRS.EPSG4326  //wgs84坐标系的代码});
</script>
</html>

引入jquery.js文件加载json数据,通过L.geoJson方法加载南宁市的行政区数据。

//读取geojson数据$.getJSON('./南宁市.json', function (data) {const xzqLayer = L.geoJson(data);xzqLayer.addTo(map);})

效果如下:
在这里插入图片描述

二、定制行政区样式

在使用L.geoJson方法加载行政区时,可以设置他的option属性,自定义我们的地图样式。

const map = L.map("map",{center: [22.82261, 108.37345],  //[纬度,经度]zoom: 8,  //默认缩放等级crs: L.CRS.EPSG4326  //wgs84坐标系的代码});//读取geojson数据$.getJSON('./南宁市.json', function (data) {const xzqLayer = L.geoJson(data, {fillColor: '#000',  //填充颜色color: '#3ef4c8',  //边线颜色fillOpacity: 1   //透明度});xzqLayer.addTo(map);})

效果如下:
在这里插入图片描述

更多的样式设置请参考官方文档:官方文档

三、地图在浏览器中自动居中

如果通过设置map的中心点的位置来实现地图在浏览器中居中的话,将会十分困难,我们这里通过两句代码来实现地图自动居中。

//地图在浏览器中自动居中
const bound = xzqLayer.getBounds();
map.fitBounds(bound);

四、添加城市名称的标签

我们通过L.geonJson的属性onEachFeature来自定义一个回调函数setLabel,用来显示城市名标签,函数的参数是地图的每一个区域的genjson值,即图斑。

L.marker的第一个参数是标签要显示的位置,是经纬度值,注意纬度在前经度在后,所以我们要反转一下获取到的genjson中的中心。

//读取geojson数据
$.getJSON('./南宁市.json', function (data) {const xzqLayer = L.geoJson(data, {fillColor: '#fff',  //填充颜色color: '#3ef4c8',  //边线颜色fillOpacity: 1,   //透明度onEachFeature: setLabel  //回调函数});xzqLayer.addTo(map);//地图在浏览器中自动居中const bound = xzqLayer.getBounds();map.fitBounds(bound);//设置城市标签的回调函数function setLabel (e){//将标签定义为icon的样式显示const icon = L.divIcon({className: "test",html: "<div>" + e.properties.name + "</div>"});//(标签显示的位置, 要显示的标签)L.marker(e.properties.center.reverse(), {icon: icon}).addTo(map);}
});

效果如图:
在这里插入图片描述

因为我们下载的genjson数据的中心位置有问题,所以标签显示不整齐,想要显示整齐的话,自己去geojson中调整经纬度即可。

还可以直接在div标签中调整css样式。

//设置城市标签的回调函数
function setLabel (e){//将标签定义为icon的样式显示const icon = L.divIcon({className: "test",html: "<div style='width: 200px;color: #222222'>" + e.properties.name + "</div>"});//(标签显示的位置, 要显示的标签)L.marker(e.properties.center.reverse(), {icon: icon}).addTo(map);
}

效果如下:
在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【FAQ】API6低代码开发问题汇总

参考文档&#xff1a; 低代码开发参考文档&#xff1a; 文档中心:使用低代码进行开发 基于景区模板开发元服务&#xff1a; 文档中心:模板简介 使用API6低代码开发遇到的问题汇总情况如下&#xff1a; 1、低代码环境下&#xff0c;如何实现box-shadow阴影效果的配置&#…

瑞萨RFP工具使用问题总结

最近在用瑞萨的RH850&#xff0c;需要用到瑞萨提供的刷新工具RFP&#xff08;Renesas Flash Programmer&#xff09;&#xff0c;但是总是遇到一些问题&#xff0c;除了一些能够在官网上找到答案的问题&#xff0c;还遇到了其他各种各样的问题&#xff0c;这里记录一下问题和对…

(五)Flask之深入剖析路由源码

路由&#xff08;Route&#xff09;这个概念在所有web框架中都非常重要&#xff0c;它是用于定义URL和对应的处理函数&#xff08;视图&#xff09;之间的映射关系。通过定义路由&#xff0c;可以使web框架应用程序能够响应不同的URL请求&#xff0c;并执行相应的逻辑。 源码剖…

巧用浮动布局、解决高度塌陷实例分享

问题 如图所示&#xff0c;这种效果该怎么实现呢&#xff1f; 面包屑导航和按钮一行两端显示面包屑或编辑栏超出宽度则自动另行显示 实现 采用浮动&#xff0c;绿色块左浮&#xff0c;蓝色块右浮&#xff0c;利用浮动特性实现宽度超出另一行显示的效果&#xff0c;并是动态的…

flutter页面添加透明遮罩

路由工具 import package:test/main.dart; import package:flutter/material.dart;import circle_page_route.dart;class NavigatorUtil {static push(Widget page, {BuildContext context}) {return Navigator.push(context ?? navigatorKey.currentContext,MaterialPageRo…

Docker安装xxl-job

创建数据库 xxl_job数据库下载地址&#xff1a;https://pan.baidu.com/s/1XkirmK8_NUGj967MuBIPlQ?pwddlyl 拉取镜像 docker pull xuxueli/xxl-job-admin:2.3.1 防火墙打开端口 firewall-cmd --zonepublic --add-port8088/tcp --permanent firewall-cmd --reload 启动运行…

2023-7-13-第十八式观察者模式

&#x1f37f;*★,*:.☆(&#xffe3;▽&#xffe3;)/$:*.★* &#x1f37f; &#x1f4a5;&#x1f4a5;&#x1f4a5;欢迎来到&#x1f91e;汤姆&#x1f91e;的csdn博文&#x1f4a5;&#x1f4a5;&#x1f4a5; &#x1f49f;&#x1f49f;喜欢的朋友可以关注一下&#xf…

Linux离线安装Jenkins、Maven、Gitlab、Git,部署Java项目

安装Java 《Linux安装java》 安装Maven 把Maven上传到Linux服务器/data/目录下进行解压 cd /data/ && tar -zxvf apache-maven-3.9.3-bin.tar.gz配置环境变量 vim /etc/profile找到export PATH USER LOGNAME MAIL HOSTNAME HISTSIZE HISTCONTROL在下面追加 # mave…

Java基础---集合类

目录 典型回答 Collection和Collections有什么区别 Java中的Collection如何遍历迭代 Iterable和Iterator如何使用 为什么不把Iterable和Iterator合成一个使用 哪些集合类是线程安全的 典型回答 什么是集合 集合就是一个放数据的容器&#xff0c;准确的说是放数据对象引用…

Tomcat 基础

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 目录 前言 一、概述 二、安装 三、 目录结构 四、启停 五、配置文件 1. server.xml (1) Server (2) Listener (3) GlobalNamingResources (4) Service 01.Connector (1) port…

Unity知识记录--项目升级URP

URP是指Unity的通用渲染管线&#xff0c;此处主要针对原有项目进行升级使用&#xff0c;但并不是所有的内容都可以直接通过升级完成&#xff0c;直接使用的Unity默认的shader通常可以完成直接升级&#xff0c;自己编写的shader通常需要重做。 首先我们先要安装这个Package&…

Centos 7 安装 Oracle 11G

Oracle 11G 安装教程 准备环境 p13390677_112040_Linux-x86-64_1of7.zipp13390677_112040_Linux-x86-64_2of7.zipCentos 7- rhel7-英文版的系统–不想换语言的执行(LANGen_US)– 传输 文件到服务器上 创建用户和组 [rootlocalhost ~]# groupadd oracle [rootlocalhost ~]…