LeaFlet中切片图层使用自定义坐标系
leaflet给定的坐标系中规中矩,就那几个,如果在项目遇到了需要用到我国2000一类的坐标系,怎么办?解决方法只有一个那就是自定义坐标系,由于leaflet是轻量性的,自定义坐标系需要借助Proj4Leaflet,leaflet的生态非常好,插件很多,这是他的有点也是它的缺点。
一、如何定义坐标系
1、引入插件
2、查询所要的定义的坐标系的EPSG,然后https://epsg.io/到查询,输入3006,点击search,将搜寻的结果点进去
选择proj.4,将红框部分复制
二、构造函数
L.Proj.CRS(code, proj4def, options)
1、code :例如EPSG:3006
2、proj4def:刚才上面复制的,例如:"+proj=utm +zone=33 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs"
3、options:一个参数组,有几个参数
origin:切片原点
scales:比例尺,这个和resolutions,需要设置其中的一个
resolutions:分别率,这个设置可以通过你加载的切片图层中找,例如在geoserver中的grid查询
bounds:坐标的范围,该参寻找见下图
Projected bounds:
三、demo
var crs = new L.Proj.CRS('EPSG:3006',
'+proj=utm +zone=33 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs',
{
resolutions: [
4096, 2048, 1024, 512, 256, 128, 64, 32, 16, 8
],
origin: [-1200000.000000, 8500000.000000 ],
bounds: L.bounds( [-1200000.000000, 8500000.000000], [4305696.000000, 2994304.000000])
}),
map = new L.Map('map', {
crs: crs,
continuousWorld: true,
});
new L.TileLayer('https://api.lantmateriet.se/open/topowebb-ccby/v1/wmts/token/'+ token +'/?SERVICE=WMTS&REQUEST=GetTile&VERSION=1.0.0&LAYER=topowebb&STYLE=default&TILEMATRIXSET=3006&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}&FORMAT=image%2Fpng', {
maxZoom: 9,
minZoom: 0,
continuousWorld: true,
attribution: '© <a href="https://www.lantmateriet.se/en/">Lantmäteriet</a> Topografisk Webbkarta Visning, CCB',
}).addTo(map);
map.setView([59.3167, 18.0667], 7);