addPoint: function(point, options) { var pointObject = convertPointCoordinate(point); var cartographicPosition = Cesium.Cartographic.fromDegrees( pointObject.longitude, pointObject.latitude, pointObject.altitude ); var billboardRef = billboardCollection.add({ image: DrawingUtility.getPin({ fillColor: options.color, icon: options.icon }), position: map.scene.globe.ellipsoid.cartographicToCartesian(cartographicPosition), id: options.id, eyeOffset: eyeOffset, pixelOffset: pixelOffset, verticalOrigin: Cesium.VerticalOrigin.BOTTOM, horizontalOrigin: Cesium.HorizontalOrigin.CENTER }); //if there is a terrain provider and no altitude has been specified, sample it from the configured terrain provider if (!pointObject.altitude && map.scene.terrainProvider) { var promise = Cesium.sampleTerrain(map.scene.terrainProvider, 5, [cartographicPosition]); Cesium.when(promise, function(updatedCartographic) { if (updatedCartographic[0].height && !options.view.isDestroyed) { billboardRef.position = map.scene.globe.ellipsoid.cartographicToCartesian(updatedCartographic[0]); } }); } return billboardRef; },
addLine: function(line, options) { var lineObject = line.map(function(coordinate) { return convertPointCoordinate(coordinate); }); var cartPoints = _.map(lineObject, function(point) { return Cesium.Cartographic.fromDegrees(point.longitude, point.latitude, point.altitude); }); var cartesian = map.scene.globe.ellipsoid.cartographicArrayToCartesianArray(cartPoints); var polylineCollection = new Cesium.PolylineCollection(); var polyline = polylineCollection.add({ width: 8, material: Cesium.Material.fromType('PolylineOutline', { color: determineCesiumColor(options.color), outlineColor: Cesium.Color.WHITE, outlineWidth: 4 }), id: options.id, positions: cartesian }); if (map.scene.terrainProvider) { var promise = Cesium.sampleTerrain(map.scene.terrainProvider, 5, cartPoints); Cesium.when(promise, function(updatedCartographic) { var positions = map.scene.globe.ellipsoid.cartographicArrayToCartesianArray(updatedCartographic); if (updatedCartographic[0].height && !options.view.isDestroyed) { polyline.positions = positions; } }); } map.scene.primitives.add(polylineCollection); return polylineCollection; },
addPointWithText: function(point, options) { var pointObject = convertPointCoordinate(point); var cartographicPosition = Cesium.Cartographic.fromDegrees( pointObject.longitude, pointObject.latitude, pointObject.altitude ); var cartesianPosition = map.scene.globe.ellipsoid.cartographicToCartesian(cartographicPosition); var billboardRef = billboardCollection.add({ image: DrawingUtility.getCircleWithText({ fillColor: options.color, text: options.id.length, }), position: cartesianPosition, id: options.id, eyeOffset: eyeOffset }); //if there is a terrain provider and no altitude has been specified, sample it from the configured terrain provider if (!pointObject.altitude && map.scene.terrainProvider) { var promise = Cesium.sampleTerrain(map.scene.terrainProvider, 5, [cartographicPosition]); Cesium.when(promise, function(updatedCartographic) { if (updatedCartographic[0].height && !options.view.isDestroyed) { cartesianPosition = map.scene.globe.ellipsoid.cartographicToCartesian(updatedCartographic[0]); billboardRef.position = cartesianPosition; } }); } return billboardRef; },
addPolygon: function(polygon, options) { var polygonObject = polygon.map(function(coordinate) { return convertPointCoordinate(coordinate); }); var cartPoints = _.map(polygonObject, function(point) { return Cesium.Cartographic.fromDegrees(point.longitude, point.latitude, point.altitude); }); var cartesian = map.scene.globe.ellipsoid.cartographicArrayToCartesianArray(cartPoints); var unselectedPolygonRef = map.entities.add({ polygon: { hierarchy: cartesian, material: new Cesium.GridMaterialProperty({ color: Cesium.Color.WHITE, cellAlpha: 0.0, lineCount: new Cesium.Cartesian2(2, 2), lineThickness: new Cesium.Cartesian2(2.0, 2.0), lineOffset: new Cesium.Cartesian2(0.0, 0.0) }), perPositionHeight: true }, show: true, resultId: options.id, showWhenSelected: false }); var selectedPolygonRef = map.entities.add({ polygon: { hierarchy: cartesian, material: new Cesium.GridMaterialProperty({ color: Cesium.Color.BLACK, cellAlpha: 0.0, lineCount: new Cesium.Cartesian2(2, 2), lineThickness: new Cesium.Cartesian2(2.0, 2.0), lineOffset: new Cesium.Cartesian2(0.0, 0.0) }), perPositionHeight: true }, show: false, resultId: options.id, showWhenSelected: true }); if (map.scene.terrainProvider) { var promise = Cesium.sampleTerrain(map.scene.terrainProvider, 5, cartPoints); Cesium.when(promise, function(updatedCartographic) { cartesian = map.scene.globe.ellipsoid.cartographicArrayToCartesianArray(updatedCartographic); if (updatedCartographic[0].height && !options.view.isDestroyed) { unselectedPolygonRef.polygon.hierarchy.setValue(cartesian); selectedPolygonRef.polygon.hierarchy.setValue(cartesian); } }); } return [unselectedPolygonRef, selectedPolygonRef]; },