前端leaflet.js 加载SVG地图或者图片,实现缩放拖拽
首先去bootcdn 下载 leaflet.js 以及leaflet.css。此外leaflet.css有一些背景图的图标也可以在这儿找到。
我这篇文章仅仅针对于导入svg地图或者纯图片地图时使用,比如你放入房子的平面图
首先导入内容
<link rel="stylesheet" href="./styles/leaflet.css"> <script src="./scripts/leaflet.js"></script>
<body>
<div id="map"></div>
</body>
js代码:
function loadMap(){
const svgUrl = "./svg/BZ.svg";
// const svgUrl = "./asset/images/TF.png";
const map = L.map('map', {
minZoom:-2,
maxZoom: 5,
zoom:1,
crs: L.CRS.Simple,
trackResize:true
})
var bounds = [[0,0], [4081,7257]]; //起始点 0,0 以图片左下角起以及终点换算 表示像素坐标中的矩形区域。
var image = L.imageOverlay(svgUrl, bounds).addTo(map);
var sol = L.latLng([ 0,0 ]); // x,y 相反
const marker= L.marker(sol).addTo(map); // 图标,图标样式来源于leaflet.css 需要下载好图片
map.setView( [0, 0], 1); // 设置中心点,这个中心点将图片坐标位于外面父元素中心点,建议地图中心,我这个是起点;第二个参数应该是缩放倍数,
// map.setView( [70, 120], 1);
// 给图标添加事件
marker.on("mouseover", e => {
//添加文字的方法
var html=`
<div style="padding:10px;background:yellow">我是弹窗</div>
`
marker.bindPopup(html).openPopup();
// alert("咩哈哈")
})
// 右下角文字编辑
const rightBottomTitle= document.querySelector(".leaflet-control-attribution")
rightBottomTitle.innerHTML=""
}
我这里面bounds = [[0,0], [4081,7257]]
是设置他的起始点以及终止点,因为有的图片可能边缘部分空白用不上,这时候换算就会出现差错,比如图片边缘有10单位的空白,那么起始点就是[10,10],终止点就是[4071,7247]。这个Svg宽高是:7257,4081这里的坐标参数实际上是(y,x)。也就是你获取坐标进行展示图标的时候需要进行换算一下。比如:
function transform(position){
return {
x:position.y,
y:position.x
}
}
const point =transform({x:0,y:1});

浙公网安备 33010602011771号