时间:2021-05-25
今天遇到了一点点的小情况,我自己根据leaflet.js做了一个离线地图,公司要用来做态势,但是地图的底图用的是高德的原图,样式是下面这样的:
但是态势的主题是如下的这种淡蓝色:
这就造成了本次的需求,需要可以修改样式的主题,由于本人是个后端小佬,前端菜鸡,所以实现起来发生了一些困难,这里简单介绍下实现的路程。
首先看下效果:
然后介绍下艰辛的过程:
首先,需要用到一个基于leaflet.js的插件:
https://github.com/hnrchrdl/leaflet-tilelayer-colorizr
但是在使用这个插件的时候出现了一些问题,这里不赘述了,大致就是我加载的地图瓦片是其他的服务器,但是这个插件似乎不能支持跨域,废了很大的心思我终于解决了这个问题。
这里我先提供解决的方式:
用上面的代码直接顶替掉下面这个js插件中的所有代码
以下是使用的方式:
var map = L.map("map", { center: [34.694, 113.587], renderer: L.svg(), zoom: 16, zoomControl: false, // + -号放大缩小 attributionControl: false // 右下角leaflet.js图标 }); // http://192.168.0.105:9090/img/{z}/{x}/{y}.png // 这个是瓦片地图的地址 L.tileLayer.colorizr("http://localhost:9090/img/{z}/{x}/{y}.png", { maxZoom: 18, minZoom: 3, colorize: function (pixel) { // 这个方法用来调整所有的图片上的rgb值,pixel是图片原有的rgb值 pixel.r += 13; pixel.g += 17; pixel.b += 90; return pixel; } }).addTo(map);需要注意的是,可以配合着给图片加滤镜来做:
.leaflet-zoom-animated img { -webkit-filter: invert(50%) grayscale(0) saturate(0.5) brightness(1.6) opacity(1) hue-rotate(334deg) sepia(10%) !important; -ms-filter: invert(1) grayscale(0) saturate(0.5) brightness(1.6) opacity(1) hue-rotate(334deg) sepia(10%) !important; -moz-filter: invert(1) grayscale(0) saturate(0.5) brightness(1.6) opacity(1) hue-rotate(334deg) sepia(10%) !important; filter: invert(1) grayscale(0) saturate(0.5) brightness(1.6) opacity(1) hue-rotate(334deg) sepia(1%) !important; }通过修改colorize的返回值就可以实现修改地图的样式了。
总结下实现思路:这种方法主要是通过拦截地图瓦片数据,然后通过canvas(本人后端,不是太懂,反正这东西能操作图片)操作图片来修改图片的rgb值,从而达到修改地图样式的目的。
最后,感谢下友好的国际友人(虽然没能帮到我),嘻嘻。
可以看看我们有趣的聊天记录
最后的最后,给大家附上一个我自己基于leaflet。js实现的离线地图服务器(下载与部署一体)
总结
到此这篇关于基于leaflet.js实现修改地图主题样式的文章就介绍到这了,更多相关leaflet.js修改地图主题样式内容请搜索以前的文章或继续浏览下面的相关文章希望大家以后多多支持!
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
本文实例讲述了基于JS实现简单的样式切换效果。分享给大家供大家参考。具体如下:这是一款基于JS实现简单的样式切换代码,自由切换CSS样式,很多大网站现在正在用,
微信小程序这个坑啊,js动态修改样式,我们并不能用js或者jq轻轻松松一行代码搞定。或者用removeClassaddClass来修改样式。以下是一种动态修改样
本文实例讲述了原生JS实现获取及修改CSS样式的方法。分享给大家供大家参考,具体如下:大家都知道在JavaScript原生操作中获取元素的样式,在实际操作是使用
本文给大家分享一段代码,基于js代码实现的翻书效果的页面切换样式,具体代码如下所示;$(function(){$("#right").click(functio
在Word中应用样式后,当以后要对某个文字的样式进行修改时,只需修改所应用的样式,即可实现对应用了此样式的所有文字的内容的修改。在Word2003中修改Word