123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395 |
- window.CESIUM_BASE_URL = '../../Source/';
- // import {
- // Cartesian3,
- // createWorldTerrain,
- // defined,
- // formatError,
- // Math as CesiumMath,
- // objectToQuery,
- // queryToObject,
- // CzmlDataSource,
- // GeoJsonDataSource,
- // KmlDataSource,
- // TileMapServiceImageryProvider,
- // Viewer,
- // viewerCesiumInspectorMixin,
- // viewerDragDropMixin,
- // UrlTemplateImageryProvider,
- // WebMapTileServiceImageryProvider,
- // GeographicTilingScheme
- // } from '../../Source/Cesium.js';
- import * as Cesium from '../../Source/Cesium.js';
- import{drawRectangle} from './rectangle.js'
- window.Cesium = Cesium
- var defined = Cesium.defined
- var formatError = Cesium.formatError
- var CesiumMath = Cesium.Math
- var objectToQuery = Cesium.objectToQuery
- var queryToObject = Cesium.queryToObject
- var TileMapServiceImageryProvider = Cesium.TileMapServiceImageryProvider
- var Viewer = Cesium.Viewer
- var viewerCesiumInspectorMixin = Cesium.viewerCesiumInspectorMixin
- var viewerDragDropMixin = Cesium.viewerDragDropMixin
- var UrlTemplateImageryProvider = Cesium.UrlTemplateImageryProvider
- var WebMapTileServiceImageryProvider = Cesium.WebMapTileServiceImageryProvider
- var GeographicTilingScheme = Cesium.GeographicTilingScheme
- // 创建热力图
- function createHeatMap(max, data) {
- // 创建元素
- var heatDoc = document.createElement("div");
- heatDoc.setAttribute("style", "width:1000px;height:1000px;margin: 0px;display: none;");
- document.body.appendChild(heatDoc);
- // 创建热力图对象
- var heatmap = h337.create({
- container: heatDoc,
- radius: 20,
- maxOpacity: .5,
- minOpacity: 0,
- blur: .75,
- gradient: {
- '0.9': 'red',
- '0.8': 'orange',
- '0.7': 'yellow',
- '0.5': 'blue',
- '0.3': 'green',
- },
- });
- // 添加数据
- heatmap.setData({
- max: max,
- data: data
- });
- return heatmap;
- }
- // 创建正方形 绑定热力图
- function createRectangle(viewer, coordinate, heatMap) {
- viewer.entities.add({
- name: 'Rotating rectangle with rotating texture coordinate',
- show: true,
- rectangle: {
- coordinates:new Cesium.Rectangle(coordinate[0], coordinate[1], coordinate[2], coordinate[3]), //Cesium.Rectangle.fromDegrees(coordinate[0], coordinate[1], coordinate[2], coordinate[3]),
- material: heatMap._renderer.canvas // 核心语句,填充热力图
- }
- });
- }
- // 生成len个随机数据
- function getData(len) {
- //构建一些随机数据点
- var points = [];
- var max = 0;
- var width = 1000;
- var height = 1000;
- while (len--) {
- var val = Math.floor(Math.random() * 500);
- max = Math.max(max, val);
- var point = {
- x: Math.floor(Math.random() * width),
- y: Math.floor(Math.random() * height),
- value: val
- };
- points.push(point);
- }
- return {
- max: max,
- data: points
- }
- }
- function main() {
- /*
- Options parsed from query string:
- source=url The URL of a CZML/GeoJSON/KML data source to load at startup.
- Automatic data type detection uses file extension.
- sourceType=czml/geojson/kml
- Override data type detection for source.
- flyTo=false Don't automatically fly to the loaded source.
- tmsImageryUrl=url Automatically use a TMS imagery provider.
- lookAt=id The ID of the entity to track at startup.
- stats=true Enable the FPS performance display.
- inspector=true Enable the inspector widget.
- debug=true Full WebGL error reporting at substantial performance cost.
- theme=lighter Use the dark-text-on-light-background theme.
- scene3DOnly=true Enable 3D only mode.
- view=longitude,latitude,[height,heading,pitch,roll]
- Automatically set a camera view. Values in degrees and meters.
- [height,heading,pitch,roll] default is looking straight down, [300,0,-90,0]
- saveCamera=false Don't automatically update the camera view in the URL when it changes.
- */
- var endUserOptions = queryToObject(window.location.search.substring(1));
- var imageryProvider;
- if (defined(endUserOptions.tmsImageryUrl)) {
- imageryProvider = new TileMapServiceImageryProvider({
- url: endUserOptions.tmsImageryUrl
- });
- }
- var loadingIndicator = document.getElementById('loadingIndicator');
- var viewer;
- try {
- // var hasBaseLayerPicker = !defined(imageryProvider);
- // viewer = new Viewer('cesiumContainer', {
- // imageryProvider : imageryProvider,
- // baseLayerPicker : hasBaseLayerPicker,
- // scene3DOnly : endUserOptions.scene3DOnly,
- // requestRenderMode : true
- // });
- // if (hasBaseLayerPicker) {
- // var viewModel = viewer.baseLayerPicker.viewModel;
- // viewModel.selectedTerrain = viewModel.terrainProviderViewModels[1];
- // } else {
- // viewer.terrainProvider = createWorldTerrain({
- // requestWaterMask: true,
- // requestVertexNormals: true
- // });
- // }
- var Google = new UrlTemplateImageryProvider({
- url: "http://mt3.google.cn/vt/lyrs=y@110&hl=zh-CN&gl=cn&src=app&x={x}&y={y}&z={z}&s=Ga",
- })
- var TianDiTu = new WebMapTileServiceImageryProvider({
- url: "http://{s}.tianditu.gov.cn/img_c/wmts?tk=4bbbafdfeca49cb6fb5efb1a40164445&service=wmts&request=GetTile&version=1.0.0" +
- "&LAYER=img&tileMatrixSet=c&TileMatrix={TileMatrix}&TileRow={TileRow}&TileCol={TileCol}" +
- "&style=default&format=tiles",
- layer: "tdtImg_c",
- style: "default",
- format: "tiles",
- tileMatrixSetID: "c",
- subdomains: ["t0", "t1", "t2", "t3", "t4", "t5", "t6", "t7"],
- tilingScheme: new GeographicTilingScheme(),
- tileMatrixLabels: ["1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15", "16", "17", "18", "19"],
- maximumLevel: 50,
- show: false
- })
- TianDiTu = new WebMapTileServiceImageryProvider({
- url: 'http://t0.tianditu.gov.cn/img_w/wmts?tk=4bbbafdfeca49cb6fb5efb1a40164445',
- layer: 'img',
- style: 'default',
- tileMatrixSetID: 'w',
- format: 'tiles',
- maximumLevel: 18
- });
- var PBF = createMVTWithStyle(Cesium, ol, createMapboxStreetsV6Style, {
- //url: '/static/poi/{z}/{x}/{y}.pbf',
- url: 'http://localhost:8080/wts/poi/{z}/{x}/{y}',
- //url:"https://a.tiles.mapbox.com/v4/mapbox.mapbox-streets-v6/{z}/{x}/{y}.vector.pbf?access_token={k}",
- key: "pk.eyJ1IjoibXV5YW8xOTg3IiwiYSI6ImNpcm9ueHd6cjAwNzZoa20xazY1aWlubjIifQ.5tLtC5j1rh8Eqjlyrq3OaA"
- });
- viewer = window.viewer = new Viewer('cesiumContainer', {
- resolutionScale: 1,
- terrainProviderViewModels: [],
- animation: false, //动画控制不显示
- baseLayerPicker: false,
- fullscreenButton: false, //全屏按钮,默认显示true
- geocoder: false, //地名查找,默认true
- timeline: false, //时间线,默认true
- vrButton: false, //双屏模式,默认不显示false
- homeButton: true, //主页按钮,默认true
- infoBox: false, //点击要素之后显示的信息,默认true
- selectionIndicator: false, //选中元素显示,默认true
- sceneModePicker: false, //是否显示投影方式控件
- navigationHelpButton: true, //是否显示帮助信息控件
- maximumRenderTimeChange: Infinity,
- requestRenderMode: true,
- imageryProvider: Google,
- });
- viewer.scene.debugShowFramesPerSecond = true;
- viewer.scene.screenSpaceCameraController.enableTranslate = false;
- viewer.scene.screenSpaceCameraController.enableTilt = false;
- viewer.scene.screenSpaceCameraController.enableLook = false;
- viewer.scene.screenSpaceCameraController.enableCollisionDetection = false;
- //var imageryLayers = viewer.imageryLayers;
- //imageryLayers.addImageryProvider(PBF);
- viewer.camera.setView({
- destination: Cesium.Cartesian3.fromDegrees(113.07242100, 22.58652789, 1000.0),
- orientation: {
- heading: 5.205384767667713,
- pitch: -1.0220630084744524,
- roll: 6.27919703978724
- }
- })
- // 第一个热力图
- // var coordinate1 = [1.9733857532084744, 0.39425835263667813, 1.9733970408057608, 0.39426568435545245];
- // var heatMap1 = createHeatMap(getData(1000).max, getData(1000).data);
- // createRectangle(viewer, coordinate1, heatMap1);
- // 第二个热力图
- // var coordinate2 = [-109.0, 30.0, -80.0, 41.0];
- // var heatMap2 = createHeatMap(getData(3000).max, getData(3000).data);
- // createRectangle(viewer, coordinate2, heatMap2);
- // // 第三个热力图
- // var coordinate3 = [-109.0, 41.0, -80.0, 50.0];
- // var heatMap3 = createHeatMap(getData(5000).max, getData(5000).data);
- // createRectangle(viewer, coordinate3, heatMap3);
- var handler = new Cesium.ScreenSpaceEventHandler(viewer.scene.canvas);
-
- drawRectangle(Cesium,viewer,handler,function(coords){
- console.log(coords)
- var heatMap1 = createHeatMap(getData(1000).max, getData(1000).data);
- createRectangle(viewer, [coords.west,coords.south,coords.east,coords.north], heatMap1);
- })
- } catch (exception) {
- loadingIndicator.style.display = 'none';
- var message = formatError(exception);
- console.error(message);
- if (!document.querySelector('.cesium-widget-errorPanel')) {
- window.alert(message); //eslint-disable-line no-alert
- }
- return;
- }
- viewer.extend(viewerDragDropMixin);
- if (endUserOptions.inspector) {
- viewer.extend(viewerCesiumInspectorMixin);
- }
- var showLoadError = function (name, error) {
- var title = 'An error occurred while loading the file: ' + name;
- var message = 'An error occurred while loading the file, which may indicate that it is invalid. A detailed error report is below:';
- viewer.cesiumWidget.showErrorPanel(title, message, error);
- };
- viewer.dropError.addEventListener(function (viewerArg, name, error) {
- showLoadError(name, error);
- });
- var scene = viewer.scene;
- var context = scene.context;
- if (endUserOptions.debug) {
- context.validateShaderProgram = true;
- context.validateFramebuffer = true;
- context.logShaderCompilation = true;
- context.throwOnWebGLError = true;
- }
- // var view = endUserOptions.view;
- // var source = endUserOptions.source;
- // if (defined(source)) {
- // var sourceType = endUserOptions.sourceType;
- // if (!defined(sourceType)) {
- // // autodetect using file extension if not specified
- // if (/\.czml$/i.test(source)) {
- // sourceType = 'czml';
- // } else if (/\.geojson$/i.test(source) || /\.json$/i.test(source) || /\.topojson$/i.test(source)) {
- // sourceType = 'geojson';
- // } else if (/\.kml$/i.test(source) || /\.kmz$/i.test(source)) {
- // sourceType = 'kml';
- // }
- // }
- // var loadPromise;
- // if (sourceType === 'czml') {
- // loadPromise = CzmlDataSource.load(source);
- // } else if (sourceType === 'geojson') {
- // loadPromise = GeoJsonDataSource.load(source);
- // } else if (sourceType === 'kml') {
- // loadPromise = KmlDataSource.load(source, {
- // camera: scene.camera,
- // canvas: scene.canvas
- // });
- // } else {
- // showLoadError(source, 'Unknown format.');
- // }
- // if (defined(loadPromise)) {
- // viewer.dataSources.add(loadPromise).then(function (dataSource) {
- // var lookAt = endUserOptions.lookAt;
- // if (defined(lookAt)) {
- // var entity = dataSource.entities.getById(lookAt);
- // if (defined(entity)) {
- // viewer.trackedEntity = entity;
- // } else {
- // var error = 'No entity with id "' + lookAt + '" exists in the provided data source.';
- // showLoadError(source, error);
- // }
- // } else if (!defined(view) && endUserOptions.flyTo !== 'false') {
- // viewer.flyTo(dataSource);
- // }
- // }).otherwise(function (error) {
- // showLoadError(source, error);
- // });
- // }
- // }
- if (endUserOptions.stats) {
- scene.debugShowFramesPerSecond = true;
- }
- var theme = endUserOptions.theme;
- if (defined(theme)) {
- if (endUserOptions.theme === 'lighter') {
- document.body.classList.add('cesium-lighter');
- viewer.animation.applyThemeChanges();
- } else {
- var error = 'Unknown theme: ' + theme;
- viewer.cesiumWidget.showErrorPanel(error, '');
- }
- }
- // if (defined(view)) {
- // var splitQuery = view.split(/[ ,]+/);
- // if (splitQuery.length > 1) {
- // var longitude = !isNaN(+splitQuery[0]) ? +splitQuery[0] : 0.0;
- // var latitude = !isNaN(+splitQuery[1]) ? +splitQuery[1] : 0.0;
- // var height = ((splitQuery.length > 2) && (!isNaN(+splitQuery[2]))) ? +splitQuery[2] : 300.0;
- // var heading = ((splitQuery.length > 3) && (!isNaN(+splitQuery[3]))) ? CesiumMath.toRadians(+splitQuery[3]) : undefined;
- // var pitch = ((splitQuery.length > 4) && (!isNaN(+splitQuery[4]))) ? CesiumMath.toRadians(+splitQuery[4]) : undefined;
- // var roll = ((splitQuery.length > 5) && (!isNaN(+splitQuery[5]))) ? CesiumMath.toRadians(+splitQuery[5]) : undefined;
- // viewer.camera.setView({
- // destination: Cartesian3.fromDegrees(longitude, latitude, height),
- // orientation: {
- // heading: heading,
- // pitch: pitch,
- // roll: roll
- // }
- // });
- // }
- // }
- var camera = viewer.camera;
- function saveCamera() {
- var position = camera.positionCartographic;
- var hpr = '';
- if (defined(camera.heading)) {
- hpr = ',' + CesiumMath.toDegrees(camera.heading) + ',' + CesiumMath.toDegrees(camera.pitch) + ',' + CesiumMath.toDegrees(camera.roll);
- }
- endUserOptions.view = CesiumMath.toDegrees(position.longitude) + ',' + CesiumMath.toDegrees(position.latitude) + ',' + position.height + hpr;
- history.replaceState(undefined, '', '?' + objectToQuery(endUserOptions));
- }
- var timeout;
- if (endUserOptions.saveCamera !== 'false') {
- camera.changed.addEventListener(function () {
- window.clearTimeout(timeout);
- timeout = window.setTimeout(saveCamera, 1000);
- });
- }
- loadingIndicator.style.display = 'none';
- }
- main();
|