 const Cesium=require("cesium")



var myImageryProvider = new Cesium.UrlTemplateImageryProvider({
    url: "http://www.google.cn/maps/vt?lyrs=s@168&amp;x={x}&amp;y={y}&amp;z={z}",
    credit: new Cesium.Credit("Google Map Earth"),
    tilingScheme: new Cesium.WebMercatorTilingScheme(),
    maxmumLevel: 23
})

var viewer = new Cesium.Viewer('cesiumContainer', {
    terrainProvider: Cesium.createWorldTerrain(),
    imageryProvider: myImageryProvider,
    shouldAnimate: true
    //,
    // geocoder: false,
    // animation: false, //是否显示动画控件            
    // shouldAnimate: true,
    // homeButton: false, //是否显示Home按钮            
    // fullscreenButton: false, //是否显示全屏按钮            
    // baseLayerPicker: false, //是否显示图层选择控件            
    // geocoder: false, //是否显示地名查找控件            
    // timeline: false, //是否显示时间线控件            
    // sceneModePicker: false, //是否显示投影方式控件            
    // navigationHelpButton: false //是否显示帮助信息控件
})

viewer.scene.debugShowFramesPerSecond = true;

var point=new Cesium.PointGraphics({
   
})
var point=viewer.entities.add({
    name:"point",
    position:Cesium.Cartesian3.fromDegrees(113.8991806721,22.5540300263,1.0),
    point:{
        pixelSize:100,
        heightReference:Cesium.HeightReference.RELATIVE_TO_GROUND,
        color:Cesium.Color.RED
    }
})
var label=viewer.entities.add({
    name:"point",
    position:Cesium.Cartesian3.fromDegrees(113.8991806721,22.5540300263,1.0),
    label:{
        text:"good",
        fillColor:Cesium.Color.BLACK,
        scale:5,
        heightReference:Cesium.HeightReference.RELATIVE_TO_GROUND,
        color:Cesium.Color.RED
    }
})
// var blueBox = viewer.entities.add({
//     name : 'Blue box',
//     position: Cesium.Cartesian3.fromDegrees(113.8991806721,22.5540300263, 300000.0),
//     box : {
//         dimensions : new Cesium.Cartesian3(400000.0, 300000.0, 500000.0),
//         material : Cesium.Color.BLUE
//     }
// });

// var redBox = viewer.entities.add({
//     name : 'Red box with black outline',
//     position: Cesium.Cartesian3.fromDegrees(-107.0, 40.0, 300000.0),
//     box : {
//         dimensions : new Cesium.Cartesian3(400000.0, 300000.0, 500000.0),
//         material : Cesium.Color.RED.withAlpha(0.5),
//         outline : true,
//         outlineColor : Cesium.Color.BLACK
//     }
// });

// var outlineOnly = viewer.entities.add({
//     name : 'Yellow box outline',
//     position: Cesium.Cartesian3.fromDegrees(-100.0, 40.0, 300000.0),
//     box : {
//         dimensions : new Cesium.Cartesian3(400000.0, 300000.0, 500000.0),
//         fill : false,
//         outline : true,
//         outlineColor : Cesium.Color.YELLOW
//     }
// });

viewer.zoomTo(viewer.entities);


var box=viewer.entities.add({
    name:"myBox",
    position:Cesium.Cartesian3.fromDegrees(113.8991806721,22.5540300263, 300000.0),
    box:{
       dimensions:Cesium.Cartesian3(400000.0, 300000.0, 500000.0),
       material:Cesium.Color.RED.withAlpha(0.5),
       outline:true,
       outlineColor:Cesium.Color.BLUE
    }
})
viewer.zoomTo(viewer.entities)



// //Cesium.scene.



// // var options = {
// //     camera: viewer.scene.camera,
// //     canvas: viewer.scene.canvas,
// //     clampToGround: true //开启贴地
// // };




// // var a = viewer.dataSources.add(Cesium.KmlDataSource.load('mypolygon.kml', options))
// // a.then(viewer.flyTo(a))
// // a.then(function (dataSource) {
// //     var entities = dataSource.entities.values
// //     for (var i = 0; i < entities.length; i++) {
// //         var entity = entities[i];
// //         // 设置每个entity的样式
// //         //entity.billboard.disableDepthTestDistance = Number.POSITIVE_INFINITY; //去掉地形遮挡
// //         entity.billboard.color =new Cesium.Color(0.0, 1.0, 1.0, 0.7)

// //         //entity.billboard.image = '../data/kml/img.jpg';
// //     }
// // })




// // var handler = new Cesium.ScreenSpaceEventHandler(viewer.scene._imageryLayerCollection);
// // var ray, position1, cartographic1, lon, lat, height;
// // handler.setInputAction(function (event) {
// //     ray = viewer.scene.camera.getPickRay(event.endPosition);
// //     position1 = viewer.scene.globe.pick(ray, viewer.scene);
// //     if (position1) {
// //         cartographic1 = Cesium.Ellipsoid.WGS84.cartesianToCartographic(position1);
// //         var feature = viewer.scene.pick(event.endPosition);
// //         // console.info("move")
// //         if (feature == undefined) {
// //             lon = Cesium.Math.toDegrees(cartographic1.longitude);
// //             lat = Cesium.Math.toDegrees(cartographic1.latitude);
// //             height = cartographic1.height;
// //             console.info("lon:" + lon + ",lat:" + lat + ",height:" + height)
// //         }
// //         else if (feature instanceof Cesium.Cesium3DTileFeature) {
// //             var cartesian = viewer.scene.pickPosition(event.endPosition);
// //             if (Cesium.defined(cartesian)) {
// //                 var cartographic = Cesium.Cartographic.fromCartesian(cartesian);
// //                 lng = Cesium.Math.toDegrees(cartographic.longitude);
// //                 lat = Cesium.Math.toDegrees(cartographic.latitude);
// //                 height = cartographic.height;
// //                 console.info(height)

// //             }
// //         }
// //     }


// function viewerflyToLonLat(lon, lat, alt) {
//     if (entity)
//         viewer.entities.remove(entity);
//     var entity = new Cesium.Entity({
//         id: 'flyTmp',
//         position: Cesium.Cartesian3.fromDegrees(lon, lat),
//         point: {
//             pixelSize: 0,
//             color: Cesium.Color.WHITE.withAlpha(0.9),
//             outlineColor: Cesium.Color.WHITE.withAlpha(0.9),
//             outlineWidth: 0
//         }
//     });
//     viewer.entities.add(entity);
//     viewer.flyTo(entity, {
//         offset: {
//             heading: Cesium.Math.toRadians(0.0),
//             pitch: Cesium.Math.toRadians(-90),
//             range: alt
//         }
//     });
// }

// // getLocation(function (position) {
// //     var longitude = position.coords.longitude;
// //     //纬度
// //     var latitude = position.coords.latitude;
// //     viewerflyToLonLat(longitude,latitude, 1000)
// // })

// // }, Cesium.ScreenSpaceEventType.MOUSE_MOVE);

// //22.5347563753,113.9107131958
// // var modelMatrix = Cesium.Transforms.eastNorthUpToFixedFrame(
// //     Cesium.Cartesian3.fromDegrees(113.9107131958, 22.5347563753, 100.0));
// // var model = viewer.scene.primitives.add(Cesium.Model.fromGltf({
// //     url: 'D200_good.glb',
// //     modelMatrix: modelMatrix,
// //     // scale: 10.0,
// //     // orientation : orientation,
// //     minimumPixelSize : 128,
// //     maximumScale : 20000
// // }))
// // var height = 120
// // var lon = 113.9107131958
// // var lat = 22.5347563753
// // Cesium.when(model.readyPromise).then(function (model) {
// //     // setInterval(() => {
// //     //     console.info("update height")
// //     //     height += 1
// //     //     lon -= 0.00001
// //     //     lat -= 0.00001
// //     //     let hpRoll = new Cesium.HeadingPitchRoll();

// //     //     let fixedFrameTransforms =  Cesium.Transforms.localFrameToFixedFrameGenerator('north', 'west');
// //     //     var position = Cesium.Cartesian3.fromDegrees(lon, lat, height)
// //     //     Cesium.Transforms.headingPitchRollToFixedFrame(position, hpRoll, Cesium.Ellipsoid.WGS84, fixedFrameTransforms, model.modelMatrix);

// //     // }, 10)
// //     // model.activeAnimations.addAll({
// //     //     loop: Cesium.ModelAnimationLoop.REPEAT,
// //     //     speedup:10,
// //     //     reverse : true
// //     // })
// //     // viewer.trackEntity=model
// // })


// var FeimaCesiumTool = {
//     "viewer": viewer,
//     //画点
//     drawPoint: function (callback) {




//         var _this = this;
        
//         //坐标存储
//         var positions = [];


       


//         var handler = new Cesium.ScreenSpaceEventHandler(_this.viewer.scene.canvas);
//         //单击鼠标左键画点
//         handler.setInputAction(function (movement) {
//             var cartesian = _this.viewer.scene.camera.pickEllipsoid(movement.position, _this.viewer.scene.globe.ellipsoid);
//             positions.push(cartesian);
//             // _this.viewer.entities.add({
//             //     position: cartesian,
//             //     point: {
//             //         outlineWidth: 3,
//             //         outlineColor: new Cesium.Color(1,1,1,1),
//             //         color: new Cesium.Color(1,0,0,0.8),
//             //         pixelSize: 100,
//             //         heightReference: Cesium.HeightReference.RELATIVE_TO_GROUND
//             //     }
//             // });
//             //var location=_this.Cartesian3_to_WGS84(cartesian)
//             // _this.viewer.entities.add({
//             //     id : 'Blue rectangle, zIndex 1',
//             //     rectangle : {
//             //         coordinates : Cesium.Rectangle.fromDegrees(location.lng, location.lat, location.lng-0.0001, location.lat-0.0002),
//             //         material :new Cesium.Color(1,0,0,0.3),
//             //         zIndex: 1
//             //     }
//             // })

//         }, Cesium.ScreenSpaceEventType.LEFT_CLICK);
//         //单击鼠标右键结束画点
//         handler.setInputAction(function (movement) {
//             handler.destroy();
//             callback(positions);
//         }, Cesium.ScreenSpaceEventType.RIGHT_CLICK);
//     },
//     //画线
//     drawLineString: function (callback) {
//         var _this = this;
//         var PolyLinePrimitive = (function () {
//             function _(positions) {
//                 this.options = {
//                     polyline: {
//                         show: true,
//                         positions: [],
//                         material: Cesium.Color.RED,
//                         width: 3
//                     }
//                 };
//                 this.positions = positions;
//                 this._init();
//             }

//             _.prototype._init = function () {
//                 var _self = this;
//                 var _update = function () {
//                     return _self.positions;
//                 };
//                 //实时更新polyline.positions
//                 this.options.polyline.positions = new Cesium.CallbackProperty(_update, false);
//                 _this.viewer.entities.add(this.options);
//             };
//             return _;
//         })();

//         var handler = new Cesium.ScreenSpaceEventHandler(_this.viewer.scene.canvas);
//         var positions = [];
//         var poly = undefined;
//         //鼠标左键单击画点
//         handler.setInputAction(function (movement) {
//             var cartesian = _this.viewer.scene.camera.pickEllipsoid(movement.position, _this.viewer.scene.globe.ellipsoid);
//             if (positions.length == 0) {
//                 positions.push(cartesian.clone());
//             }
//             positions.push(cartesian);
//         }, Cesium.ScreenSpaceEventType.LEFT_CLICK);
//         //鼠标移动
//         handler.setInputAction(function (movement) {
//             var cartesian = _this.viewer.scene.camera.pickEllipsoid(movement.endPosition, _this.viewer.scene.globe.ellipsoid);
//             if (positions.length >= 2) {
//                 if (!Cesium.defined(poly)) {
//                     poly = new PolyLinePrimitive(positions);
//                 } else {
//                     if (cartesian != undefined) {
//                         positions.pop();
//                         cartesian.y += (1 + Math.random());
//                         positions.push(cartesian);
//                     }
//                 }
//             }
//         }, Cesium.ScreenSpaceEventType.MOUSE_MOVE);
//         //单击鼠标右键结束画线
//         handler.setInputAction(function (movement) {
//             handler.destroy();
//             callback(positions);
//         }, Cesium.ScreenSpaceEventType.RIGHT_CLICK);
//     },
//     //画面
//     drawPolygon: function (callback) {
//         var _this = this;
//         var PolygonPrimitive = (function () {
//             function _(positions) {
//                 this.options = {
//                     name: '多边形',
//                     polygon: {
//                         hierarchy: [],
                       
//                         material: Cesium.Color.RED.withAlpha(0.4)
//                     }
//                 };
//                 this.hierarchy = positions;
//                 this._init();
//             }

//             _.prototype._init = function () {
//                 var _self = this;
//                 var _update = function () {
//                     return _self.hierarchy;
//                 };
//                 //实时更新polygon.hierarchy
//                 this.options.polygon.hierarchy = new Cesium.CallbackProperty(_update, false);
//                 _this.viewer.entities.add(this.options);
//             };
//             return _;
//         })();

//         var handler = new Cesium.ScreenSpaceEventHandler(_this.viewer.scene.canvas);
//         var positions = [];
//         var poly = undefined;

//         //鼠标单击画点
//         handler.setInputAction(function (movement) {
//             var cartesian = _this.viewer.scene.camera.pickEllipsoid(movement.position, _this.viewer.scene.globe.ellipsoid);
//             if (positions.length == 0) {
//                 positions.push(cartesian.clone());
//             }
//             positions.push(cartesian);
//         }, Cesium.ScreenSpaceEventType.LEFT_CLICK);
//         //鼠标移动
//         handler.setInputAction(function (movement) {
//             var cartesian = _this.viewer.scene.camera.pickEllipsoid(movement.endPosition, _this.viewer.scene.globe.ellipsoid);
//             if (positions.length >= 2) {
//                 if (!Cesium.defined(poly)) {
//                     poly = new PolygonPrimitive(positions);
//                 } else {
//                     if (cartesian != undefined) {
//                         positions.pop();
//                         cartesian.y += (1 + Math.random());
//                         positions.push(cartesian);
//                     }
//                 }
//             }
//         }, Cesium.ScreenSpaceEventType.MOUSE_MOVE);
//         //鼠标右键单击结束绘制
//         handler.setInputAction(function (movement) {
//             handler.destroy();
//             callback(positions);
//         }, Cesium.ScreenSpaceEventType.RIGHT_CLICK);
//     },
//     //画圆
//     circleDraw(_callBack) {
//         let _self = this;
//         _self.viewer.scene.globe.depthTestAgainstTerrain = true;
//         _self.circle = {
//             points: []
//             , rect: null
//             , entity: null
//             , r: 1
//         };
//         var tempPosition;
//         let cartographic1;
//         let p;
//         let tempLon;
//         let tempLat;
//         var ShapeEventHandler = new Cesium.ScreenSpaceEventHandler(_self.viewer.scene.canvas);
//         common.handlerList.push(ShapeEventHandler);
//         ShapeEventHandler.setInputAction(function (click) {
//             tempPosition = _self.getPointFromWindowPoint(click.position);
//             //选择的点在球面上
//             if (tempPosition) {
//                 function callBackPos() {
//                     const minlon = Cesium.Math.toDegrees(_self.circle.points[0].longitude);
//                     const minlat = Cesium.Math.toDegrees(_self.circle.points[0].latitude);
//                     const maxlon = Cesium.Math.toDegrees(_self.circle.points[1].longitude);
//                     const maxlat = Cesium.Math.toDegrees(_self.circle.points[1].latitude);
//                     const r = _self.getFlatternDistance(minlat, minlon, maxlat, maxlon);
//                     if (r) {
//                         return r;
//                     }
//                     return 1;
//                 };
//                 if (_self.circle.points.length == 0) {
//                     p = click.position;
//                     cartographic1 = Cesium.Ellipsoid.WGS84.cartesianToCartographic(tempPosition);
//                     _self.circle.points.push(_self.viewer.scene.globe.ellipsoid.cartesianToCartographic(tempPosition));
//                     _self.circle.points.push(_self.viewer.scene.globe.ellipsoid.cartesianToCartographic(tempPosition));
//                     tempLon = Cesium.Math.toDegrees(cartographic1.longitude);
//                     tempLat = Cesium.Math.toDegrees(cartographic1.latitude);
//                     _self.circle.entity = _self.viewer.entities.add({
//                         position: Cesium.Cartesian3.fromDegrees(tempLon, tempLat),
//                         ellipse: {
//                             semiMinorAxis: new Cesium.CallbackProperty(callBackPos, false),
//                             semiMajorAxis: new Cesium.CallbackProperty(callBackPos, false),
//                             //条形材质
//                             material: Cesium.Color.RED.withAlpha(0.3)
//                         }
//                     });
//                 } else {
//                     ShapeEventHandler.removeInputAction(Cesium.ScreenSpaceEventType.MOUSE_MOVE);
//                     ShapeEventHandler.removeInputAction(Cesium.ScreenSpaceEventType.LEFT_CLICK);
//                     var tempCircle = new Cesium.CircleOutlineGeometry({
//                         center: Cesium.Cartesian3.fromDegrees(tempLon, tempLat),
//                         radius: callBackPos(),
//                         granularity: Math.PI / 2
//                     });
//                     var geometry = Cesium.CircleOutlineGeometry.createGeometry(tempCircle);
//                     var float64ArrayPositionsIn = geometry.attributes.position.values;
//                     var positionsIn = [].slice.call(float64ArrayPositionsIn);
//                     _callBack(positionsIn);
//                 }
//             }
//         }, Cesium.ScreenSpaceEventType.LEFT_CLICK);
//         ShapeEventHandler.setInputAction(function (movement) {
//             if (_self.circle.points.length == 0) {
//                 return;
//             }
//             var moveEndPosition = _self.getPointFromWindowPoint(movement.endPosition);
//             //选择的点在球面上
//             if (moveEndPosition) {
//                 _self.circle.points.pop();
//                 _self.circle.points.push(_self.viewer.scene.globe.ellipsoid.cartesianToCartographic(moveEndPosition));
//             }
//         }, Cesium.ScreenSpaceEventType.MOUSE_MOVE);
//     },
//     //画矩形
//     drawRect: function (callback) {
//         let _self = this;
//         let pointsArr = [];
//         _self.shape = {
//             points: [],
//             rect: null,
//             entity: null
//         };
//         var tempPosition;
//         var handle = new Cesium.ScreenSpaceEventHandler(_self.viewer.scene.canvas);
//         //鼠标左键单击画点
//         handle.setInputAction(function (click) {
//             tempPosition = _self.getPointFromWindowPoint(click.position);
//             //选择的点在球面上
//             if (tempPosition) {
//                 if (_self.shape.points.length == 0) {
//                     pointsArr.push(tempPosition);
//                     _self.shape.points.push(_self.viewer.scene.globe.ellipsoid.cartesianToCartographic(tempPosition));
//                     _self.shape.rect = Cesium.Rectangle.fromCartographicArray(_self.shape.points);
//                     _self.shape.rect.east += 0.000001;
//                     _self.shape.rect.north += 0.000001;
//                     _self.shape.entity = _self.viewer.entities.add({
//                         rectangle: {
//                             coordinates: _self.shape.rect,
//                             material: Cesium.Color.RED.withAlpha(0.5),
//                             outline: true,
//                             outlineWidth: 2,
//                             outlineColor: Cesium.Color.RED,
//                         }
//                     });
//                     _self.bufferEntity = _self.shape.entity;
//                 }
//                 else {
//                     handle.removeInputAction(Cesium.ScreenSpaceEventType.MOUSE_MOVE);
//                     handle.removeInputAction(Cesium.ScreenSpaceEventType.LEFT_CLICK);
//                     callback(pointsArr);
//                 }
//             }
//         }, Cesium.ScreenSpaceEventType.LEFT_CLICK);
//         //鼠标移动
//         handle.setInputAction(function (movement) {
//             if (_self.shape.points.length == 0) {
//                 return;
//             }
//             var moveEndPosition = _self.getPointFromWindowPoint(movement.endPosition);
//             //选择的点在球面上
//             if (moveEndPosition) {
//                 pointsArr[1] = moveEndPosition;
//                 _self.shape.points[1] = _self.viewer.scene.globe.ellipsoid.cartesianToCartographic(moveEndPosition);
//                 _self.shape.rect = Cesium.Rectangle.fromCartographicArray(_self.shape.points);
//                 if (_self.shape.rect.west == _self.shape.rect.east)
//                     _self.shape.rect.east += 0.000001;
//                 if (_self.shape.rect.south == _self.shape.rect.north)
//                     _self.shape.rect.north += 0.000001;
//                 _self.shape.entity.rectangle.coordinates = _self.shape.rect;
//             }
//         }, Cesium.ScreenSpaceEventType.MOUSE_MOVE);
//     },
//     //清除所有Entity和ImageryLayers
//     clearHandle: function () {
//         //移除所有实体Entity
//         this.viewer.entities.removeAll();
//         //移除cesium加载的ImageryLayer
//         for (var i = 0; i < this.removeImageryLayers.length; i++) {
//             this.viewer.imageryLayers.remove(this.removeImageryLayers[i]);
//         }
//     },
//     getPointFromWindowPoint(point) {
//         if (this.viewer.scene.terrainProvider.constructor.name == "EllipsoidTerrainProvider") {
//             return this.viewer.camera.pickEllipsoid(point, this.viewer.scene.globe.ellipsoid);
//         } else {
//             var ray = this.viewer.scene.camera.getPickRay(point);
//             return this.viewer.scene.globe.pick(ray, this.viewer.scene);
//         }
//     },
//     //笛卡尔坐标系转WGS84坐标系
//     Cartesian3_to_WGS84: function (point) {
//         var cartesian33 = new Cesium.Cartesian3(point.x, point.y, point.z);
//         var cartographic = Cesium.Cartographic.fromCartesian(cartesian33);
//         var lat = Cesium.Math.toDegrees(cartographic.latitude);
//         var lng = Cesium.Math.toDegrees(cartographic.longitude);
//         var alt = cartographic.height;
//         return { lat: lat, lng: lng, alt: alt };
//     },
//     //WGS84坐标系转笛卡尔坐标系
//     WGS84_to_Cartesian3: function (point) {
//         var car33 = Cesium.Cartesian3.fromDegrees(point.lng, point.lat, point.alt);
//         var x = car33.x;
//         var y = car33.y;
//         var z = car33.z;
//         return { x: x, y: y, z: z };
//     },

//     //计算两点间距离
//     getFlatternDistance(lat1, lng1, lat2, lng2) {
//         var EARTH_RADIUS = 6378137.0;    //单位M
//         var PI = Math.PI;

//         function getRad(d) {
//             return d * PI / 180.0;
//         }
//         var f = getRad((lat1 + lat2) / 2);
//         var g = getRad((lat1 - lat2) / 2);
//         var l = getRad((lng1 - lng2) / 2);

//         var sg = Math.sin(g);
//         var sl = Math.sin(l);
//         var sf = Math.sin(f);

//         var s, c, w, r, d, h1, h2;
//         var a = EARTH_RADIUS;
//         var fl = 1 / 298.257;

//         sg = sg * sg;
//         sl = sl * sl;
//         sf = sf * sf;

//         s = sg * (1 - sl) + (1 - sf) * sl;
//         c = (1 - sg) * (1 - sl) + sf * sl;

//         w = Math.atan(Math.sqrt(s / c));
//         r = Math.sqrt(s * c) / w;
//         d = 2 * w * a;
//         h1 = (3 * r - 1) / 2 / c;
//         h2 = (3 * r + 1) / 2 / s;

//         return d * (1 + fl * (h1 * sf * (1 - sg) - h2 * (1 - sf) * sg));
//     }
// }