下载地形、矢量图层、卫星影像到本地并geoserver发布为服务,后使用Cesium加载

教程应用场景:要求项目数据全部本地化,无需链接互联网使用,所以要把地形、遥感影像、矢量数据都下载到本地,然后在本地离线发布,并用Cesium加载。

0.Cesium的离线

Cesium.js在不设置的情况下,会默认访问AccessToken并访问在线数据,如果不做另外设置,在没联网的情况下Cesium.js是会启动失败的。参考官方demo已经显示了如何离线使用该api: 官方demo演示如何离线调用cesium.js

1 下载数据

1.1 下载离线影像

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

1.2 下载离线矢量图层

方法一: 在 https://www.openstreetmap.org/ 下载*.osm格式的文件,然后拖到QGIS里面,然后导出为*.shp(缺点:中文会有乱码)

方法二: 在 https://extract.bbbike.org 下载*.shp文件,2~7分钟会发到邮箱里面(除了慢了点,其他没有缺点)。

【坑:天地图里面的地名注记是单独一个服务图层,但是实际下载时候就是下载一个矢量图层,有name字段标注了该geometry的名称】

1.3 下载离线地形

http://www.gscloud.cn/ 里面去下载 :

高级检索 => 数据集 => DEM => 选范围 => 下载 => DEM数据一般都是.tif格式,如果下载下来是.img就在QGIS或者ArcGIS里面另存为导出成.tif格式,方便后续的使用。

2 本地发布地形、影像、矢量图层服务

2.1 发布影像

① cesiumlab里面“影像切片” → 离散型 → 输出

② 静态文件形式发布,nginx tomcat iis等等都可以

2.2 发布矢量图层

两种方法,第一种用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 CachingApplication/*的选项都勾选 → 图层预览,即可看到发布的图层

(2)制作成geojson / topojson格式静态发布
① qgis里面把*.shp 另存为 *.geojson
② 放到tomcat、nginx、iss等服务器静态发布即可

2.3 发布离线地形

① 先切片:cesiumlab → 地形切片 → 输入文件(如果是.img格式的DEM,用qgis或者arcgis转成 *.tif格式)、存储类型(散列文件)→ 输出

② 发布:放到tomcat、nginx、iss等服务器静态发布即可

3 Cesium加载离线服务

3.1 加载本地影像

假设把影像放到服务器的/satellite/clips 路径下,就如下加载

viewer.imageryLayers.addImageryProvider(
    new Cesium.UrlTemplateImageryProvider({
        url:'http://localhost:8080/satellite/clips/{z}/{x}/{y}.png' 
    })
)

3.2 加载本地矢量数据

① 加载用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
}))

3.3 加载本地地形

viewer.terrainProvider = new Cesium.CesiumTerrainProvider({
    url: 'http://localhost:8080/terrain/clips'   // url就是文件在服务器的路径,参考上面加载本地影像
})

————————————完结撒花——————————————

你可能感兴趣的:(Cesium,gis)