Cesium 可以加载自定义的地图服务,一般在私有云上应用比较广。
原始地图数据有很多地方都可以下载。比如常用的下载工具,付费的有水经注、91助手等,还有国家空间地理服务的官网上也有可用的数据。假设你已经通过一些来源获得了原始的地图数据。
接下来需要对原始的地图数据进行切片。之前使用过geoserver。通过geoserver发布的wmts服务,在调用的时候参数比较繁琐,而且发布过程,中间环节太多,需要人干预配置的工作多,容易出错。后来找到一个处理原始地图数据的利器Cesiumlabhttp://www.bjxbsj.cn/。可以处理的原始数据很多,而且切片完成可以直接发布成服务,并支持浏览。功能非常强大。
具体通过工具处理数据的过程,网上教程很多,可以自己去百度。假设到这里原始的数据已经发布完成,接着需要在我们自己的平台中加载。数据切片完成后,数据会导出到文件夹中。接着我们就可以利用web服务器把数据发布出去,支持后续的加载。web服务容器有很多可用,比如tomcat、NGINX、node等。这里我们直接用NGINX,把切片数据文件夹直接拷贝到NGINX根目录的html文件夹下。如果没有新建一个html文件夹就可以了。至于为什么要拷到文件夹下,不在本次的讨论范围内。简单来说,NGINX默认配置会从根目录html文件夹加载静态资源。如果服务运行起来了,http://ip:port/这个地址会直接定位到NGINX的html目录下,后面需要加载什么资源就跟上对应的资源路径。
我们使用Cesium加载离线地图服务。
对于原始数据都是tiff格式的图片数据的,都可以按这种方式发布、加载。
// 影像地图
var layers = viewer.scene.imageryLayers;
var satelliteMap = layers.addImageryProvider(new Cesium.UrlTemplateImageryProvider({
url: 'http://localhost:9010/stl_data/{z}/{x}/{y}.png',
fileExtension: 'png'
}));
http://localhost:9010/stl_data:这是本地web服务的地址,工具有很多,可以用nginx、tomcat、node等;stl_data是地图切片数据在web服务资源路径下的目录名称。
//tomcat发布服务
// 加载地形服务
viewer.terrainProvider = terrainProvider;
var terrainProvider = new Cesium.CesiumTerrainProvider({
url: "http://localhost:9005/treeian"
});
viewer.terrainProvider = terrainProvider;