|
|
@@ -1,72 +1,189 @@
|
|
|
<!DOCTYPE html>
|
|
|
-<html lang="en" id="htmlRoot">
|
|
|
+<html lang="en">
|
|
|
|
|
|
<head>
|
|
|
- <meta charset="UTF-8" />
|
|
|
- <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1" />
|
|
|
- <meta name="renderer" content="webkit" />
|
|
|
- <meta name="keywords" content="空间数据管理平台" />
|
|
|
- <meta name="description" content="空间数据管理平台" />
|
|
|
- <meta http-equiv="Expires" content="0" />
|
|
|
- <meta http-equiv="Cache-control" content="no-cache" />
|
|
|
- <meta http-equiv="Cache" content="no-cache" />
|
|
|
- <title>空间数据管理平台</title>
|
|
|
- <link rel="icon" href="/favicon.ico" />
|
|
|
+ <meta charset="UTF-8">
|
|
|
+ <title>场景浏览</title>
|
|
|
+ <!-- <script src="/build/grant.js"></script> -->
|
|
|
+ <script src="http://localhost:4001/build/grant.js"></script>
|
|
|
+</head>
|
|
|
+
|
|
|
+<body>
|
|
|
<style>
|
|
|
+ html,
|
|
|
body {
|
|
|
+ font-size: 14px;
|
|
|
margin: 0;
|
|
|
padding: 0;
|
|
|
- overflow: hidden;
|
|
|
- -ms-overflow-style: none;
|
|
|
- scrollbar-width: none;
|
|
|
}
|
|
|
|
|
|
- body::-webkit-scrollbar {
|
|
|
- display: none;
|
|
|
+ #map {
|
|
|
+ width: 100vw;
|
|
|
+ height: 100vh;
|
|
|
}
|
|
|
</style>
|
|
|
-</head>
|
|
|
+ <div id="map"></div>
|
|
|
+</body>
|
|
|
+<script type="text/javascript">
|
|
|
+ window.onload = function () {
|
|
|
+ var url = sessionStorage.getItem('mapViewUrl');
|
|
|
+ if (url) {
|
|
|
+ var type = getType(url);
|
|
|
+ initMap({
|
|
|
+ servicetype: type,
|
|
|
+ mapingurl: url
|
|
|
+ })
|
|
|
+ } else {
|
|
|
+ var obj = JSON.parse(JSON.stringify(location.href));
|
|
|
+ var arr = obj.split("?")
|
|
|
+ if (arr.length && arr[1]) {
|
|
|
+ var url = arr[1];
|
|
|
+ var type = getType(url);
|
|
|
+ initMap({
|
|
|
+ servicetype: type,
|
|
|
+ mapingurl: url
|
|
|
+ })
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
|
|
|
-<body>
|
|
|
- <script>
|
|
|
- new BroadcastChannel('myChannel').onmessage = function (event) {
|
|
|
- console.log('Message received:', event.data);
|
|
|
- sessionStorage.clear();
|
|
|
- localStorage.clear();
|
|
|
- window.close();
|
|
|
- };
|
|
|
- window.onload = function () {
|
|
|
- var t1 = sessionStorage.getItem('tokenSpace');
|
|
|
- var t2 = sessionStorage.getItem('tokenV2');
|
|
|
- if (t1 && t2) {
|
|
|
- var obj = JSON.parse(JSON.stringify(window.location.href));
|
|
|
- var arr = obj.split("?")
|
|
|
- if (arr.length && arr[1]) {
|
|
|
- if (arr[1].indexOf("onlineIde_") > -1) {
|
|
|
- creteIframe(`http://106.12.170.138:4001/examples/onlineIde.html#${arr[1].replace("onlineIde_", "")}`)
|
|
|
- // creteIframe(`http://127.0.0.1:8080/examples/webgl/onlineIde.html#${arr[1].replace("onlineIde_", "")}`)
|
|
|
- // creteIframe(`http://192.168.119.143/examples/webgl/onlineIde.html#${arr[1].replace("onlineIde_", "")}`)
|
|
|
- } else {
|
|
|
- // creteIframe(arr[1])
|
|
|
- // creteIframe(`http://192.168.119.143:8080/onemapV5.0/sceneview.html?${arr[1]}`)
|
|
|
- creteIframe(`http://106.12.170.138:8080/onemapV5.0/sceneview.html?${arr[1]}`)
|
|
|
+ function getType(url) {
|
|
|
+ return url.indexOf('realspace') > -1 ? 'SuperMap_realspace' : 'SuperMap';
|
|
|
+ }
|
|
|
+
|
|
|
+ function initMap(obj) {
|
|
|
+ var viewer = new Cesium.Viewer('map', {
|
|
|
+ animation: false,
|
|
|
+ timeline: false,
|
|
|
+ shadows: true,
|
|
|
+ infoBox: false,
|
|
|
+ geocoder: false,
|
|
|
+ homeButton: false,
|
|
|
+ navigation: true
|
|
|
+ });
|
|
|
+ var scene = viewer.scene;
|
|
|
+ var widget = viewer.cesiumWidget;
|
|
|
+ try {
|
|
|
+ //场景
|
|
|
+ switch (obj.servicetype) {
|
|
|
+ case "SuperMap_realspace": {
|
|
|
+ var url = obj.mapingurl.split('realspace')[0] + 'realspace'
|
|
|
+ //添加S3M图层服务
|
|
|
+ var promise = scene.open(url);
|
|
|
+ //***为场景名称
|
|
|
+ //定位到场景
|
|
|
+ Cesium.loadJson(url + '/scenes.json').then(function (scenes) {
|
|
|
+ var sname = scenes[0].name;
|
|
|
+ Cesium.loadJson(url + '/scenes/' + sname + '.json').then(function (jsonData) {
|
|
|
+ var cameraPosition = jsonData.camera;
|
|
|
+ var tilt = Cesium.Math.toRadians(cameraPosition.tilt - 90);
|
|
|
+ Cesium.when(promise, function (layer) {
|
|
|
+ //设置相机位置、视角,便于观察场景
|
|
|
+ var dest = new Cesium.Cartesian3.fromDegrees(cameraPosition.longitude, cameraPosition.latitude, cameraPosition.altitude);
|
|
|
+ var ori = { heading: cameraPosition.heading, pitch: tilt, roll: 0 };
|
|
|
+ scene.camera.setView({
|
|
|
+ destination: dest,
|
|
|
+ orientation: ori
|
|
|
+ });
|
|
|
+ });
|
|
|
+ });
|
|
|
+ });
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ case "SuperMap_terrain": {
|
|
|
+ var url = obj.mapingurl + "/config";
|
|
|
+ var config = sendRequestWithResponse(url, "GET");
|
|
|
+ viewer.terrainProvider = new Cesium.CesiumTerrainProvider({
|
|
|
+ url: obj.mapingurl,
|
|
|
+ isSct: true
|
|
|
+ });
|
|
|
+ var left = parseFloat(config.substring(config.indexOf("<sml:Left>") + "<sml:Left>".length, config.indexOf("</sml:Left>")));
|
|
|
+ var right = parseFloat(config.substring(config.indexOf("<sml:Right>") + "<sml:Right>".length, config.indexOf("</sml:Right>")));
|
|
|
+ var top = parseFloat(config.substring(config.indexOf("<sml:Top>") + "<sml:Top>".length, config.indexOf("</sml:Top>")));
|
|
|
+ var bottom = parseFloat(config.substring(config.indexOf("<sml:Bottom>") + "<sml:Bottom>".length, config.indexOf("</sml:Bottom>")));
|
|
|
+ var x = (left + right) / 2;
|
|
|
+ var y = (top + bottom) / 2;
|
|
|
+ var z = parseFloat(config.substring(config.indexOf("<sml:MaxHeight>") + "<sml:MaxHeight>".length, config.indexOf("</sml:MaxHeight>"))) || 2000;
|
|
|
+ scene.camera.setView({
|
|
|
+ destination: new Cesium.Cartesian3.fromDegrees(x, y, z)
|
|
|
+ });
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ case "SuperMap_s3m": {
|
|
|
+ var url = obj.mapingurl + "/config";
|
|
|
+ var config = sendRequestWithResponse(url, "GET");
|
|
|
+ scene.addS3MTilesLayerByScp(url, { name: 1 });
|
|
|
+ if (config.indexOf("<sml:OSGFiles>") != -1) {//s3m
|
|
|
+ var x = parseFloat(config.substring(config.indexOf("<sml:X>") + 7, config.indexOf("</sml:X>")));
|
|
|
+ var y = parseFloat(config.substring(config.indexOf("<sml:Y>") + 7, config.indexOf("</sml:Y>")));
|
|
|
+ var z = parseFloat(config.substring(config.indexOf("<sml:Z>") + 7, config.indexOf("</sml:Z>")));
|
|
|
+ if (Math.abs(z - 0.0) < 0.000001) {
|
|
|
+ z = 2000;
|
|
|
+ }
|
|
|
+ scene.camera.setView({
|
|
|
+ destination: new Cesium.Cartesian3.fromDegrees(x, y, z)
|
|
|
+ });
|
|
|
+ } else {//s3mb
|
|
|
+ var configJSON = JSON.parse(config);
|
|
|
+ var x = configJSON.position.x;
|
|
|
+ var y = configJSON.position.y;
|
|
|
+ var z = configJSON.position.z;
|
|
|
+ if (Math.abs(z - 0.0) < 0.000001) {
|
|
|
+ z = 2000;
|
|
|
+ }
|
|
|
+ scene.camera.setView({
|
|
|
+ destination: new Cesium.Cartesian3.fromDegrees(x, y, z)
|
|
|
+ });
|
|
|
}
|
|
|
+ break;
|
|
|
}
|
|
|
- } else {
|
|
|
- window.location.href = '/spatialDataMng/index.html#/login?redirect=/dashboard/workbench'
|
|
|
- }
|
|
|
+ case "ArcGISRestMap": {
|
|
|
+ var config = JSON.parse(sendRequestWithResponse(obj.mapingurl + "?f=pjson", "GET"));
|
|
|
+ var fullExtent = config.fullExtent
|
|
|
+ var provider = new Cesium.ArcGisMapServerImageryProvider({
|
|
|
+ url: obj.mapingurl //'https://services.arcgisonline.com/ArcGIS/rest/services/World_Imagery/MapServer'
|
|
|
+ });
|
|
|
+ fullExtentToGeographicSR(fullExtent)
|
|
|
+ viewer.imageryLayers.addImageryProvider(provider);
|
|
|
+ viewer.camera.setView({
|
|
|
+ destination: Cesium.Rectangle.fromDegrees(fullExtent.xmin, fullExtent.ymin, fullExtent.xmax, fullExtent.ymax)
|
|
|
+ })
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ case "ArcGISTiledMap": {
|
|
|
+ var config = JSON.parse(sendRequestWithResponse(obj.mapingurl + "?f=pjson", "GET"));
|
|
|
+ var fullExtent = config.fullExtent
|
|
|
+ fullExtentToGeographicSR(fullExtent)
|
|
|
|
|
|
- }
|
|
|
+ var provider = new Cesium.CGCS2000MapServerImageryProvider({
|
|
|
+ //token,
|
|
|
+ suggest: config.spatialReference.wkid === 4490 ? true : undefined,//4490坐标系,按照suggest切片方案切的瓦片,需要设置该参数
|
|
|
+ url: obj.mapingurl //'https://services.arcgisonline.com/ArcGIS/rest/services/World_Imagery/MapServer'
|
|
|
+ })
|
|
|
+ viewer.imageryLayers.addImageryProvider(provider);
|
|
|
+ viewer.camera.setView({
|
|
|
+ destination: Cesium.Rectangle.fromDegrees(fullExtent.xmin, fullExtent.ymin, fullExtent.xmax, fullExtent.ymax)
|
|
|
+ })
|
|
|
+ break;
|
|
|
+ }
|
|
|
|
|
|
- function creteIframe(url) {
|
|
|
- const iframe = document.createElement('iframe');
|
|
|
- iframe.style.width = '100vw';
|
|
|
- iframe.style.height = '100vh';
|
|
|
- iframe.style.border = '0px';
|
|
|
- iframe.src = url;
|
|
|
- document.body.appendChild(iframe);
|
|
|
+ case "SuperMap": {
|
|
|
+ var provider = new Cesium.SuperMapImageryProvider({
|
|
|
+ url: obj.mapingurl
|
|
|
+ });
|
|
|
+ var imagery = viewer.imageryLayers.addImageryProvider(provider);
|
|
|
+ viewer.zoomTo(imagery);
|
|
|
+ }
|
|
|
+ default:
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ } catch (e) {
|
|
|
+ if (widget._showRenderLoopErrors) {
|
|
|
+ var title = '渲染时发生错误,已停止渲染。';
|
|
|
+ widget.showErrorPanel(title, undefined, e);
|
|
|
+ }
|
|
|
}
|
|
|
- </script>
|
|
|
-</body>
|
|
|
+ }
|
|
|
+</script>
|
|
|
|
|
|
</html>
|