目录
主要内容
矢量数据借助postgis上传到postgre数据库,连同栅格数据发布到geoserver;
构建web项目,引入相关拓展库,使用的jsp仅为展示前端功能
前端借助cesium调用地图服务加载地图
环境配置
以下为用到的环境配置,版本号为本文所用版本,仅供参考
Cesium-1.95
jdk-17
apache-tomcat-9
geoserver-2.21.0
可选:
postgresql-14.4-1及其postGIS插件(仅用于矢量数据管理发布)
IDE选用IntelliJ IDEA 2022,可自选其他便于编译web前端的工具
技术流程
创建web项目
1、创建空项目
2、添加Web框架
右击项目>Add Framework Support(添加框架支撑)
选中Java EE栏Web Application
3、配置tomcat
通过Run > Edit Configurations点击上面的+号,选择Tomcat Server
设置好tomcat以及jre
默认启动的地址
端口号这里设置为8082,不与geoserver冲突
4、构建完成
右上部启动后 打开看到测试网页
测试页
地图服务发布
主要借助geoserver发布地图服务,结合postGIS发布矢量数据
栅格
新建数据源,将本地栅格影像数据源创建,设置相应参数发布
矢量
将矢量存入空间数据库,之后geoserver发布成地图服务,
1、创建postgre空间数据库
使用pgAdmin 4来完成创建,打开创建的普通数据库,在扩展插件列表中右键 ->创建 -> 插件,在添加PostGis空间数据库相关插件
2、上传矢量数据
打开PostGIS Shapefile and DBF Loader Exporter(需安装PostGIS插件)图形化界面工具来完成Shapefile空间数据的导入与导出
连接数据库
导入矢量文件,设置SRID(从shp文件的.prj查看,对比pg数据库中的spatial_ref_sys确定空间数据的SRID)
3、发布
设置好连接空间数据库参数,之后发布即可
服务查看
geoserver管理页面,点击图层预览查看
地址栏可见类似的URL:
http://localhost:8080/geoserver/test/wms?service=WMS
页面编码测试
配置拓展库
将cesium以及vue(便于cesium开发)相关文件复制到文件目录
测试页
web文件夹下创建index.html,也可直接使用原有jsp文件
由于用到官方在线底图,需要官网申请账号获取使用密钥
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<script src="js/vue.js"></script>
<!-- Include the CesiumJS JavaScript and CSS files -->
<script src="js/Cesium/Cesium.js"></script>
<link href="js/Cesium/Widgets/widgets.css" rel="stylesheet">
</head>
<body>
<button onclick="upmap()"> 加载栅格</button>
<button onclick="upmap2()"> 加载矢量 </button>
<button onclick="upmap3()"> 加载多波段 </button>
<div id="cesiumContainer" style="height: 90%;width: 90%"></div>
<script>
// Your access token can be found at: https://cesium.com/ion/tokens.
// 从cesium官网申请账号Replace `your_access_token` with your Cesium ion access token.
Cesium.Ion.defaultAccessToken = '替换密钥';
// Initialize the Cesium Viewer in the HTML element with the `cesiumContainer` ID.
const viewer = new Cesium.Viewer('cesiumContainer', {
terrainProvider: Cesium.createWorldTerrain(),
sceneMode : Cesium.SceneMode.SCENE2D,
animation : false,
// baseLayerPicker : false,
fullscreenButton : false,
// vrButton : false,
// geocoder : false,
// homeButton : false,
// infoBox : false,
// sceneModePicker : false,
// selectionIndicator : false,
timeline : false,
// navigationHelpButton : false,
// skyBox : false
});
// 去除logo
viewer.cesiumWidget.creditContainer.style.display = "none";
// // Add Cesium OSM Buildings, a global 3D buildings layer.
// const buildingTileset = viewer.scene.primitives.add(Cesium.createOsmBuildings());
// Fly the camera to San Francisco at the given longitude, latitude, and height.
// viewer.camera.flyTo({
// destination : Cesium.Cartesian3.fromDegrees(120.4175, 40.655, 400),
// orientation : {
// heading : Cesium.Math.toRadians(0.0),
// pitch : Cesium.Math.toRadians(-15.0),
// }
// });
viewer.camera.setView({
destination : Cesium.Cartesian3.fromDegrees(122, 41, 1000000)
})
// var viewer = new Cesium.Viewer('cesiumContainer');
var wmsImageryProvider = new Cesium.WebMapServiceImageryProvider({
url : 'http://localhost:8080/geoserver/test/wms?service=WMS',
layers : 'test:result2010',
parameters : {
transparent : true, //是否透明
format : 'image/png',
srs: 'EPSG:4326',
styles:''
}
});
var wmsImageryProvider2 = new Cesium.WebMapServiceImageryProvider({
url : 'http://localhost:8080/geoserver/test/wms?service=WMS',
layers : 'test:shi',
parameters : {
transparent : true, //是否透明
format : 'image/png',
srs: 'EPSG:4326',
styles:''
}
});
var wmsImageryProvider3 = new Cesium.WebMapServiceImageryProvider({
url : 'http://localhost:8080/geoserver/test/wms?service=WMS',
layers : 'test:2020LC8',
parameters : {
transparent : true, //是否透明
format : 'image/png',
srs: 'EPSG:4326',
styles:''
}
});
// viewer.imageryLayers.addImageryProvider(wmsImageryProvider2);
function upmap(){
console.log('hello world');
viewer.imageryLayers.addImageryProvider(wmsImageryProvider);
console.log(viewer.imageryLayers);
}
function upmap2(){
console.log('hello world');
viewer.imageryLayers.addImageryProvider(wmsImageryProvider2);
console.log(viewer.imageryLayers);
}
function upmap3(){
console.log('hello world');
viewer.imageryLayers.addImageryProvider(wmsImageryProvider3);
console.log(viewer.imageryLayers);
}
</script>
</body>
</html>
结果
底图加载
cesium自带多种地图 还有三维显示等诸多丰富功能
栅格加载
矢量加载
附录
jsp代码,与html类似
<%--
Created by IntelliJ IDEA.
User: run
Date: 2022/8/23
Time: 10:00
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<script src="js/vue.js"></script>
<!-- Include the CesiumJS JavaScript and CSS files -->
<script src="js/Cesium/Cesium.js"></script>
<link href="js/Cesium/Widgets/widgets.css" rel="stylesheet">
</head>
<body>
<button onclick="upmap()"> 加载栅格</button>
<button onclick="upmap2()"> 加载矢量 </button>
<button onclick="upmap3()"> 加载多波段 </button>
<div id="cesiumContainer" style="height: 90%;width: 90%"></div>
<script>
// Your access token can be found at: https://cesium.com/ion/tokens.
// 从cesium官网申请账号Replace `your_access_token` with your Cesium ion access token.
Cesium.Ion.defaultAccessToken = '替换秘钥';
// Initialize the Cesium Viewer in the HTML element with the `cesiumContainer` ID.
const viewer = new Cesium.Viewer('cesiumContainer', {
terrainProvider: Cesium.createWorldTerrain(),
sceneMode : Cesium.SceneMode.SCENE2D,
animation : false,
fullscreenButton : false,
timeline : false,
});
// 去除logo
viewer.cesiumWidget.creditContainer.style.display = "none";
viewer.camera.setView({
destination : Cesium.Cartesian3.fromDegrees(122, 41, 1000000)
})
var wmsImageryProvider = new Cesium.WebMapServiceImageryProvider({
url : 'http://localhost:8080/geoserver/test/wms?service=WMS',
layers : 'test:result2010',
parameters : {
transparent : true, //是否透明
format : 'image/png',
srs: 'EPSG:4326',
styles:''
}
});
var wmsImageryProvider2 = new Cesium.WebMapServiceImageryProvider({
url : 'http://localhost:8080/geoserver/test/wms?service=WMS',
layers : 'test:shi',
parameters : {
transparent : true, //是否透明
format : 'image/png',
srs: 'EPSG:4326',
styles:''
}
});
var wmsImageryProvider3 = new Cesium.WebMapServiceImageryProvider({
url : 'http://localhost:8080/geoserver/test/wms?service=WMS',
layers : 'test:2020LC8',
parameters : {
transparent : true, //是否透明
format : 'image/png',
srs: 'EPSG:4326',
styles:''
}
});
// viewer.imageryLayers.addImageryProvider(wmsImageryProvider2);
function upmap(){
console.log('hello world');
viewer.imageryLayers.addImageryProvider(wmsImageryProvider);
console.log(viewer.imageryLayers);
}
function upmap2(){
console.log('hello world');
viewer.imageryLayers.addImageryProvider(wmsImageryProvider2);
console.log(viewer.imageryLayers);
}
function upmap3(){
console.log('hello world');
viewer.imageryLayers.addImageryProvider(wmsImageryProvider3);
console.log(viewer.imageryLayers);
}
</script>
</body>
</html>