问题起因
要做一个框选要素的功能,框选用了leafleat.editable插件。然后实现了demo,运用到项目上后,插件框选居然没有
如图画出来的polygon是透明的。
求索过程
1.首先想到是某个全局样式影响到了绘制的样式,注释所有全局样式无果。
2.既然没有样式影响,那么我在绘制过程中更改样式是否可以呢?写代码,终无果。
3.那么既然上面两种都无果,那么肯定是哪里发送错误了。下面是排查的过程:
首先发现消失的部分是svg的path。那么为什么会消失呢,请看图中红圈部分,消失的为M0 0,即没有绘制路径,那么问题肯定就在这了。
解决过程
1.由于项目是接手的,发现之前引用leaflet和插件的方式有点特别。没有使用npm安装,而是引入了源码,再通过loadmould的方式引入。这导致了后续引入插件都需要在loadmould加源码配置。。。这次还导致了这个问题,所以这次下定决心把它干掉换成npm安装。
2.经过测试,用leaflet加载geojson是可以正常显示的,那么原因肯定是在editable了,后续我发现了这个错,印证了我的猜想。
即editable是由我npm安装后import进来的,而这个时候leaflet还没引入呢。所以解决方法就是把leaflet也import进来。
3.那么引入leaflet后我又遇到了一个大坑。
首先天地图变成这副鬼样了(chinatmsprodive直接没了,这里是通过原生leaflet加载的)
解决Tile错乱
1.首先想到的是坐标系的问题,同意坐标系4326,无效,继续乱。
2.又是全局样式的锅?又注释了一遍全局样式,无果
3.那就得看源码了吧。好了,研究了一边leaflet创建tile、加载tile的源码,没有看出所以然,和正常加载的demo数据也差不多。真头大
4.突然发现tile的加载范围超出了视窗
那会不会是map的div的长宽不对(因为项目的map经过了嵌套,有可能改动的时候改变了长宽),无果
5.点开F12点击tile,发现tile居然没有leaflet.css的样式。。这也。。为啥我demo明明是正常获得了leaflet.css(难道是webpack打包的问题?没搞明白,等大佬解答)
6.那么找到问题所在就好解决了,引入css即可
import 'leaflet/dist/leaflet.css'