教程应用场景:要求项目数据全部本地化,无需链接互联网使用,所以要把地形、遥感影像、矢量数据都下载到本地,然后在本地离线发布,并用Cesium加载。
Cesium.js在不设置的情况下,会默认访问AccessToken并访问在线数据,如果不做另外设置,在没联网的情况下Cesium.js是会启动失败的。参考官方demo已经显示了如何离线使用该api: 官方demo演示如何离线调用cesium.js
QGIS里面加载一个卫星影像(天地图、谷歌都可以) => 工具箱(上方蓝色齿轮的图标) => 栅格工具 => 将地图转为栅格 => 渲染最小范围(要下载的范围)=> 每像素地图单位数,一般是0.5(精度:米/像素) => 运行 => 导出
天地图、谷歌等比较好找,这里提供一个第一次全国风险普查的成果卫星影像服务,添加WMTS服务即可获得,网址如下:https://fxpc.mem.gov.cn/data_preparation/39699eaf-2ebd-42fe-8553-de3ac44cac9b/161ba32a-106e-4197-a4e3-cd9f1ac5a6db/img08/wmts/AB0EC656D56BD380345A16C87D539C6C/WMTSCapabilities.xml
方法一: 在 https://www.openstreetmap.org/ 下载*.osm格式的文件,然后拖到QGIS里面,然后导出为*.shp(缺点:中文会有乱码)
方法二: 在 https://extract.bbbike.org 下载*.shp文件,2~7分钟会发到邮箱里面(除了慢了点,其他没有缺点)。
【坑:天地图里面的地名注记是单独一个服务图层,但是实际下载时候就是下载一个矢量图层,有name字段标注了该geometry的名称】
http://www.gscloud.cn/ 里面去下载 :
高级检索 => 数据集 => DEM => 选范围 => 下载 => DEM数据一般都是.tif格式,如果下载下来是.img就在QGIS或者ArcGIS里面另存为导出成.tif格式,方便后续的使用。
① cesiumlab里面“影像切片” → 离散型 → 输出
② 静态文件形式发布,nginx tomcat iis等等都可以
两种方法,第一种用geoserver发布wms服务;第二种切好片后用tomcat、nignx等常规服务器发布静态文件,具体如下:
(1) GeoServer发布WMS服务
教程参考:https://www.cnblogs.com/lqqgis/p/14699712.html,关键步骤简述如下:
① 下载geoserver(下载地址http://geoserver.org/ )和 矢量切片插件(下载地址:https://www.cnblogs.com/lqqgis/p/14699712.html) 。 把下好的插件扔到\geoserver-2.20.1-bin\webapps\geoserver\WEB-INF\lib
中
② 进入geoserver界面
新建工作区
(字符集选UTF-8) → 新建数据存储
(字符集选UTF-8) → 新建图层
(坐标系和边框计算一下 Compute from *) → 图层
找到并进入刚才新建的图层,点击Tile Caching
把Application/*
的选项都勾选 → 图层预览,即可看到发布的图层
(2)制作成geojson / topojson格式静态发布
① qgis里面把*.shp 另存为 *.geojson
② 放到tomcat、nginx、iss等服务器静态发布即可
① 先切片:cesiumlab → 地形切片 → 输入文件(如果是.img格式的DEM,用qgis或者arcgis转成 *.tif格式)、存储类型(散列文件)→ 输出
② 发布:放到tomcat、nginx、iss等服务器静态发布即可
假设把影像放到服务器的/satellite/clips 路径下,就如下加载
viewer.imageryLayers.addImageryProvider(
new Cesium.UrlTemplateImageryProvider({
url:'http://localhost:8080/satellite/clips/{z}/{x}/{y}.png'
})
)
① 加载用geoserver发布的WMS服务
viewer.imageryLayers.addImageryProvider(
new Cesium.WebMapServiceImageryProvider({
url:'http://localhost:8080/geoserver/wuran/wms', // wuran是你geoserver里面数据的名字,需要改
// 图层预览里面的名称
layers:'wuran:roads', // wuran:roads 是你geoserver里面数据的名字,也需要改
parameters: {
service: "WMS",
format: "image/png",
transparent: true,
},
})
);
② 加载静态发布的geojson, topojson格式
viewer.dataSources.add(new Cesium.GeoJsonDatasource.load(
url, // url就是文件在服务器的路径,参考上面加载本地影像
{
clampToGround: true
}))
viewer.terrainProvider = new Cesium.CesiumTerrainProvider({
url: 'http://localhost:8080/terrain/clips' // url就是文件在服务器的路径,参考上面加载本地影像
})
————————————完结撒花——————————————