Cesium离线切片地图服务器搭建和代码实现

地图数据

我对地图下载器可以下载的几种地图数据进行测试发现可以直接制作离线地图服务器的切片有以下几种:

  1. 高德卫星地图 ,下载切片只能下载到第8级,有文字标注;
  2. 天地图墨卡托版,下载切片国内可以下载到18级,国外大概到12级左右;
  3. ArcGIS瓦片地图 ,可以下载0-16级,无文字标注;
  4. Google卫星切片地图 可以加载0-19级,有文字标注;
  5. Google地形切片地图 可以加载0-19级,无文字标注,无山脉起伏,有山体等高线,城市区域显示为等高线;
  6. ArcGIS离线动态地图切片服务 ,可以对数据样式进行控制,成本较高;
  7. GeoServer 发布地图服务数据,可以对数据样式进行控制,开源免费。

搭建地图服务器

  1. 上述数据中ArcGIS数据发布出来即可使用。

  2. GeoServer发布的地图服务器在Cesium加载数据不出现,需做跨域处理:
    1)cesium加载资源都不允许跨越,所有需要配置下需要跨越的站点,如geoserver等,
    跨域设置:
    2)将cors-filter-2.4.jar和java-property-utils-1.9.1.jar,两个jar包文件放入geoserver目录下webapps\geoserver\web-inf\lib中。

    3)打开geoserver目录下webapps\geoserver\web-inf中的web.xml

    4)添加过滤器代码:

    <filter>
     	<filter-name>CORS</filter-name>
     	<filter-class>com.thetransactioncompany.cors.CORSFilter</filter-class>
     </filter>
    

    5)添加过滤器路由代码:

<filter-mapping>
            <filter-name>CORS</filter-name>
            <url-pattern>/*</url-pattern>
    </filter-mapping>

6)添加完毕后,重启geoserver

7)如果目录中存在maven,需要在pom.xml中,添加

<dependency>
	<groupId>com.thetransactioncompany</groupId>
	<artifactId>cors-filter</artifactId>
	<version>[ version ]</version>
</dependency>

以上方法参考网友说明,具体作者忘记,如有侵权联系删除内容
3. 使用Tomcat搭建虚拟路径也需要对Tomcat做以上跨域处理,处理后制作Tomcat虚拟服务地址参考tomcat创建虚拟路径

Jar包地址

Jar包地址

加载离线谷歌瓦片地图数据

<!DOCTYPE html>
<html>
	<head>
		<meta charset="UTF-8">
		<title>谷歌地图离线切片</title>
	<link rel="stylesheet" href="../Build/Widgets/widgets.css" />
	<script src="../Build/Cesium.js"></script>
	</head>
	<body style="margin: 0px;padding: 0px;">
		<div  id="cesiumContainer" style="width: 100%;height: 900px;background-color: rosybrown;"></div>
	</body>
	<script>
	   	var viewer = new Cesium.Viewer('cesiumContainer',{ 
	   		//需要进行可视化的数据源的集合
           animation: false, //是否显示动画控件
            shouldAnimate : true,
            homeButton: false, //是否显示Home按钮
            fullscreenButton: false, //是否显示全屏按钮
            baseLayerPicker: false , //是否显示图层选择控件
            geocoder: false, //是否显示地名查找控件
            timeline: false, //是否显示时间线控件
            sceneModePicker: false, //是否显示投影方式控件
            navigationHelpButton: false, //是否显示帮助信息控件
            infoBox: false, //是否显示点击要素之后显示的信息
            requestRenderMode: true, //启用请求渲染模式
            scene3DOnly: false, //每个几何实例将只能以3D渲染以节省GPU内存
            sceneMode: 3, //初始场景模式 1 2D模式 2 2D循环模式 3 3D模式  Cesium.SceneMode
            //fullscreenElement: document.body, //全屏时渲染的HTML元素 暂时没发现用处
		    imageryProvider:new Cesium.createTileMapServiceImageryProvider({  
		     url : '127.0.0.1:8080/googleTile',
		     credit:"googleTile",
			})
		});
		var layers = viewer.imageryLayers;  
		viewer._cesiumWidget._creditContainer.style.display="none";  //屏蔽loge广告
	</script>
</html>

效果图

在这里插入图片描述

  • 4
    点赞
  • 42
    收藏
    觉得还不错? 一键收藏
  • 27
    评论
要在Cesium中加载天地图离线切片,你需要执行以下步骤: 1. 下载离线切片数据:首先,你需要从天地图官网或其他渠道下载离线切片数据。确保下载的数据是符合天地图切片规范的。 2. 将切片数据转换为Cesium可用的格式:Cesium使用切片数据格式是TMS(Tiled Map Service)或WMTS(Web Map Tile Service)。如果你下载的切片数据不是这两种格式,你需要将其转换为相应格式。你可以使用GDAL或其他切片转换工具来完成这个步骤。 3. 创建Cesium Viewer对象:在Cesium中,你需要创建一个Viewer对象来显示地图。你可以使用以下代码创建一个基本的Viewer对象: ```javascript var viewer = new Cesium.Viewer('cesiumContainer'); ``` 这里的 'cesiumContainer' 是一个HTML元素的ID,它将用于显示Cesium地图。 4. 添加离线切片图层:接下来,你需要将离线切片图层添加到Cesium Viewer中。你可以使用以下代码切片图层添加到Viewer中: ```javascript var offlineLayer = new Cesium.UrlTemplateImageryProvider({ url: 'path/to/your/tiles/{z}/{x}/{y}.png', }); viewer.imageryLayers.addImageryProvider(offlineLayer); ``` 这里的 'path/to/your/tiles/{z}/{x}/{y}.png' 是你离线切片数据的路径。确保将路径正确指向离线切片数据的存储位置。 5. 设置初始视图:最后,你可以使用以下代码设置地图的初始视图: ```javascript viewer.camera.setView({ destination : Cesium.Cartesian3.fromDegrees(lon, lat, height), orientation : { heading : Cesium.Math.toRadians(heading), pitch : Cesium.Math.toRadians(pitch), roll : Cesium.Math.toRadians(roll), } }); ``` 在上面的代码中,lon、lat和height是地图的经度、纬度和高度,heading、pitch和roll是地图的视角。 完成这些步骤后,你应该能够在Cesium中加载并显示天地图离线切片数据了。记得根据你的实际情况调整代码中的路径和初始视图参数。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 27
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值