| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189 |
- <!DOCTYPE html>
- <html lang="en">
- <head>
- <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;
- }
- #map {
- width: 100vw;
- height: 100vh;
- }
- </style>
- <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
- })
- }
- }
- }
- 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;
- }
- 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;
- }
- 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>
- </html>
|