1. 地图底图切片制作 如果在项目中,有地图数据,需要自己进行底图制作,这里就涉及到底图切片制作;
常用底图切片制作工具
1.arcmap是一款常用的地图数据处理工具,商业版软件,不过网上有很多和谐版可以下载;使用arcmap,能够将影像(raster)或矢量(vector)数据,制作成地图切片缓存,一般是配合arcgis server进行切片数据发布;
2.MapTiler是一款专业的地图切片工具,能够将影像(raster)或矢量(vector)数据,不过高级的功能也是收费的;
3.QGIS是一款开源的地图数据处理工具,功能比较完备,其toolbox内置的gdal2tiles,能够将影像(raster)或矢量(vector)数据,转换成切片数据;
4.其他类型的工具,网上也能搜到;假如会代码开发,基于gdal类库就能进行工具开发。
切片制作简单步骤
1.影像(raster)
- 坐标系转换
目标切片是什么坐标系,最好将数据转成对应的坐标系; - 区域范围裁切(可选)
需要根据行政区划显示数据,用矢量对影像进行裁切; - 切片数据制作
处理好的影像数据,进行切片操作。
2.矢量数据(vector)
- 坐标系转换
同影像 - 配图配色
矢量的点、线、面数据,设置显示类型,线和面颜色等; - 分级控制
根据不同的级别,显示不同的矢量元素数据; - 转换成影像类型数据(可选)
- 切片数据制作
配置好的矢量数据(或转换的影像数据),进去切片操作。
2. 底图切片的换算
现在网上有各种类型的地图下载器,通过设置地图范围,能够将一块区域中指定级别的底图切片下载下来,导出成切片文件夹,或者拼成一张影像图,这种下载涉及到底图切片的换算,下边借助gdal2tile的python代码,讲一下大概的换算原理。
Web墨卡托(EPSG:3857)
坐标系范围(单位:米):[-20037508.342789244, -20037508.342789244, 20037508.342789244, 20037508.342789244]
切片尺寸是256*256,中心点为(xyz)(ox,oy):[-20037508.342789244, 20037508.342789244]的情况,
地图初始分辨率(第0级)是:initialResolution = 20037508.342789244 * 2 / 256 = 156543.03392804062
第n级的分辨率是:resolution = initialResolution/(2的n次方)
有经纬度坐标(x,y),转换成墨卡托坐标(mx,my),
对应的(xyz)像素坐标:
px=(mx-ox)/resolution;
py=(my-oy)/resolution;
再根据每张切片的尺寸,就能计算出切片的索引数,这样就能进行下载了,在js的开发中,推荐使用global-mercator类库。
wgs84/cgcs2000(EPSG:4326)
分成两种情况:
第0级两张切片:initialResolution = 180 / 256 = 0.703125
第0级两张切片:initialResolution = 180 / 256 = 1.40625
切片尺寸是256*256,中心点为(xyz)(ox,oy):[-180, 90]的情况,
第n级的分辨率是:resolution = initialResolution/(2的n次方)
有经纬度坐标(x,y,
对应的(xyz)像素坐标:
px=(x-ox)/resolution;
py=(y-oy)/resolution;
再根据每张切片的尺寸,就能计算出切片的索引数,这样就能进行下载了。
参考地址:
https://github.com/wclwksn/gdal2tiles/blob/master/gdal2tiles/gdal2tiles.py
3. 地图切片存储和发布
切片存储
切片数据默认是一张张等尺寸的图片,jpg、png等格式,需要底图边缘透明效果,就要用png格式;
切片最简单的存储是直接放在文件夹里,按照缩放\列数\行数的形式组织,但是在切片数量多时,数据要进行拷贝或者移动时,耗时就较长了;
另一种方式将切片数据放在sqlite数据库里,称为mbtiles文件,将图片转换成二进制存放在数据表中,根据索引获取对应的图片文件,对外显示是一个大的文件,在拷贝时,速度会快很多;
相同的原理,切片数据能够写入到其他类型的关系数据库,如mysql、postgresql等,也能写入到NoSQL数据库中,进行存储。
切片发布
切片数据发布以后,才能够进行访问使用。
1.文件夹类型切片
使用web服务器发布就行,对应软件nginx、apache、IIS都可以,将切片的文件夹发布了就能够进行访问;
2.mbtiles文件
需要支持mbtiles的软件进行发布,简单的mbtiles server,在github上就能够找到,geoserver通过安装插件,也能够对mbtiles进行发布;
分享两个开源mbtiles发布软件地址:
https://github.com/wclwksn/mbtiles-server
https://github.com/wclwksn/mbtiles-image-server
3.专业的发布软件
Arcgis Server、超图iServer或者开源的Geoserver,能够将输入的影像或者矢量数据,直接发布成可访问的切片形式,从而不用预先对数据进行处理。