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

news/2024/12/22 20:16:07/

前言

在写代码之前,我们需要做一些准备工作,需要有一份某个行政区的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.ppmy.cn/news/845662.html

相关文章

微交易平台官网_熟悉官网常用版块

近期有投资者反馈&#xff0c;发现有平台打着首域微交易的旗号行诈骗之举&#xff0c;诱导大家众筹投资影视剧&#xff0c;败坏平台口碑&#xff0c;影响极坏。对此&#xff0c;首域第一时间发布澄清公告&#xff0c;告诫投资者认准首域微交易平台官网bosctime&#xff0c;不要…

三十五、影院页面(获取卖座官网的影院信息并显示)

Better-Scroll插件实现页面中拖动滚动、拉动属性功能&#xff08;平滑滚动&#xff09;&#xff0c;以提高用户体验。 当div内容的高度超过div的高度时&#xff0c;使用该插件实现平滑滚动。 Better-Scroll的安装&#xff1a; &#xff08;1&#xff09;具体实现过程 Cinema.…

在线影视网站分享(持续更新)

在线影视网站分享&#xff08;持续更新&#xff09; 简影影视网 https://tv.syrme.top/ 奈斯TV https://www.naisitv.com/ 555电影网 https://www.555dy.com/ 孤单电影网 https://www.hanmiys.com/ 电影狗&#xff08;电影搜索引擎&#xff09; https://www.dianyinggou.co…

怎么查电影备案? 中国电影查询官网、影剧备字查询系统

国家新闻出版广电总局官方网站: http://dy.chinasarft.gov.cn/ 打开网站后,浓浓的九十年代网站风格扑面而来,看到这让人无力吐槽的页面,就已确定是官方网站无疑了…… 再瞧瞧域名的后缀是:gov.cn,那更确定没问题了。 小常识:域名是中国政府机构专用的域名。注册要求提…

电影票购票系统

电影票购票系统 HTML 部分 <!DOCTYPE html> <html><head><meta charset"utf-8"><title>电影票购票系统</title><link rel"stylesheet" href"style.css"></head><body><div class&qu…

基于android 的影院售票

本文是基于安卓的电影在线订票系统的设计。随着网络、通信和信息技术的突破性进展&#xff0c;Internet技术在全球爆炸性增长并迅速普及&#xff0c;移动互联网已经在人们日常生活的方方面面都带来了深刻的变革&#xff0c;在这一前提下&#xff0c;网络订餐&#xff0c;即网上…

影创SDK☀️四、开发注意事项

目录 &#x1f7e5; 手势识别 &#x1f7e7; 导出手机端APK &#x1f7e8; 与百度语音同时使用 &#x1f7e9; 手柄不能识别 &#x1f7e6; 与Vuforia配对使用 &#x1f7e5; 手势识别 老版本的SDK手势识别方法&#xff1a; 只有当摄像机识别到你现在的手时&#xff0c;才…

国内首家专注影视文化产业的数藏平台“神缘”即将上线

相比于海外NFT在各路资本、明星、开发者的追捧&#xff0c;层出不穷的项目创意玩法&#xff0c;人们的注意力似乎都从一个NFT的艺术本质&#xff0c;全部转移到了“地板价”及市值等&#xff0c;在风口下人们都想更“艺术”的玩转“区块链”。一方面可以”一不小心“赚得名声利…