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: '&copy; <a href="https://www.lantmateriet.se/en/">Lantmäteriet</a> Topografisk Webbkarta Visning, CCB',
}).addTo(map);
map.setView([59.3167, 18.0667], 7);

 

转载自:https://blog.csdn.net/weixin_40184249/article/details/83933048

You may also like...