目录什么是WEBGIS?什么是Leaflet?在Vue中安装Leaflet,与其他依赖在App.vue中使用初始化地图chinaProvider地图瓦片addControls使用工具
webGis又称之为网络地理信息系统,GIS的全名是Geographic InfORMation System
,它是在计算机硬件,软件系统支持下,对整个或部分地球表层空间中的有关地理分布数据进行采集,储存,管理,运算,分析,显示和描述的技术系统。
地图是GIS的表现形式,但是GIS深层是空间信息的处理,简单说就是将GIS这门学科所能提供的功能,以B/S技术展现给用户,使用户只需要在浏览器上便能使用这些GIS功能的一个应用方向。
Leafet 作为 webGis 主流框架之一,Leaflet 是一个开源并且对移动端友好的交互式地图 javascript 库。 它大小仅仅只有39 KB, 并且拥有绝大部分开发者所需要的所有地图特性。
// leaflet 核心库
npm install leaflet
// 地图瓦片
npm install leaflet.chinatmsproviders
// 动态线
npm install leaflet-ant-path
// 侧边栏工具库
npm install @geoman-io/leaflet-geoman-free
import L from "leaflet";
import "leaflet.chinatmsproviders"; // 插件可加载各种地图(如:智图地图,谷歌地图,高德地图等包含卫星地图)
import "leaflet-ant-path"; //动态线条插件
import "leaflet/dist/leaflet.CSS";
import imgs from "@/assets/svg/logo.svg";
import "@geoman-io/leaflet-geoman-free";
import "@geoman-io/leaflet-geoman-free/dist/leaflet-geoman.css";
methods:{
initMap(){
let _this = this;
this.map = L.map("map", {
attributionControl: true, // 是否版权
closePopupOnClick: false, // 点击画布是否直接隐藏弹窗
maxZoom: 13, // 最大缩放
minZoom: 3, // 最小缩放
noWrap: false, // 该层是否包裹在逆子午线周围
worldCopyJump: true, // 拷贝当前配置
renderer: L.svg(), // 矢量渲染
});
}
}
// 设置需要引入的地图瓦片
// 其他材质包括(天地图,百度,...) git地址:https://GitHub.com/htoooth/Leaflet.ChineseTmsProviders
L.tileLayer?.chinaProvider('Geoq.Normal.PurplishBlue').addTo(this.map);
// 设置中心点与缩放层级
this.map.setView([41.02999636902566, 108.984375], 3);
this.map.pm.addControls({
position: "topleft",
drawCircle: false,
});
const attrs = L.control.attribution({ prefix: "Leafet地图" });
attrs.addTo(this.map);
data(){
return{
// layerGroup 图层组主要用于添加标点与线段对象
LineGroupLayer: L.layerGroup([]),
MakerGroupLayer: L.layerGroup([]),
}
}
// 定义图标
const icons = L.icon({
iconUrl: imgs,
iconSize: [20, 20],
iconAnchor: [5, 5],
shadowSize: [0, 0],
});
// 创建点实例 将经纬度传入,并在该点位显示图标
let makerStart = L.marker([50.5, 30.5],{ icon: icons });
// 添加图
this.MakerGroupLayer.addLayer(makerStart);
this.map.addLayer(this.MakerGroupLayer); // 添加点
let paths = [
[35.485106, 123.078832],
[26.787026, 126.104039],
[22.847052, 126.281993],
[18.999909, 126.578654],
]; //随便打的点
let lineLayer = L.polyline.antPath(paths, {
// 线
paused: false, //暂停 初始化状态
reverse: false, //方向反转
delay: 1000, //延迟,数值越大效果越缓慢
dashArray: [10, 20], //间隔样式
weight: 2, //线宽
opacity: 0.7, //透明度
color: "red",
pulseColor: "#fff", //块颜色
});
this.LineGroupLayer.addLayer(lineLayer);
this.map.addLayer(this.LineGroupLayer); // 添加线
let multipolygon = new L.Polygon(
[
[
[17.385044, 78.486671],
[16.506174, 80.648015],
[17.686816, 83.218482],
],
],
{
color: "rgba(0,0,255,.7)",
weight: 1,
}
);
multipolygon.addTo(this.map);
// 自定义popup,并显示图片
var popup = L.popup()
.setLatLng([e.latlng.lat, e.latlng.lng])
.setContent(`<p>Hello world!<br />This is a nice popup.</p><img src="${imgs}"/>`)
.openOn(_this.map);
// 定义图标
const icons = L.icon({
iconUrl: imgs,
iconSize: [20, 20],
iconAnchor: [5, 5],
shadowSize: [0, 0],
});
let popupDom =
"<div class='pop-data'><ul><li class='time'><span>这是一个点:</span>" +
"</li><li><span>内容...</span>" +
"</li><li><span>内容...</span>" +
"</li></ul></div>"; // 绑定popup
let makerEnd = L.marker([17.686816, 83.218482], {
icon: icons,
}).bindTooltip(popupDom);
this.MakerGroupLayer.addLayer(makerEnd);
首先需要我们在(DataV)[datav.aliyun.com/portal/scho…
// 引入Geojson的json文件,这里直接将文件展开了,在项目中不应该这么做
let Geojson = {
type: "FeatureCollectio",
properties: { zhName: "河北省", name: "Hebei" },
geometry: {
type: "MultiPolygon",
coordinates: [
[
[116.365069,40.943216],
[116.37641,40.939681],
[116.398515,40.905999]
....
],
],
},
};
L.geoJSON(Geojson, style: {
weight: 2, //边框粗细
opacity: 0.4, //透明度
fillColor: 'transparent', //区域填充颜色
fillOpacity: 0.3, //区域填充颜色的透明
}).addTo(this.map);
根据上面的例子总结到Leaflet框架设计简单,而且官方提供很多插件、具有高扩展性、性能良好和可用性强等特点。它可以在所有主流的桌面和移动平台上高效运行,能够利用主流浏览器中利用HTML5和css3的优势的同时也兼容老版本浏览器,更加适合移动端,但是只支持2D地图,不支持3D地图。
--结束END--
本文标题: Leaflet基础入门教程示例
本文链接: https://lsjlt.com/news/176709.html(转载时请注明来源链接)
有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341
2024-01-12
2023-05-20
2023-05-20
2023-05-20
2023-05-20
2023-05-20
2023-05-20
2023-05-20
2023-05-20
2023-05-20
回答
回答
回答
回答
回答
回答
回答
回答
回答
回答
0