"use script"; //开发环境建议开启严格模式
(function (window, mars3d) {
var cityPosition = [
{ name: "亳州", jwd: [116.203602, 33.496075] },
{ name: "商丘", jwd: [115.871509, 34.297084] },
{ name: "淮北", jwd: [116.688413, 33.689214] },
{ name: "宿州", jwd: [117.234682, 33.740035] },
{ name: "徐州", jwd: [117.70509, 34.350708] },
{ name: "宿迁", jwd: [118.559349, 33.807355] },
{ name: "连云港", jwd: [118.875445, 34.619808] },
{ name: "临沂", jwd: [118.026908, 35.262767] },
{ name: "枣庄", jwd: [117.320268, 35.072555] },
{ name: "济宁", jwd: [116.856599, 35.500232] },
{ name: "菏泽", jwd: [115.716086, 35.05629] },
];
/**
* 根据名称获取坐标
*/
function getJWDByName(name) {
for (let i = 0; i < cityPosition.length; i += 1) {
const item = cityPosition[i];
if (item.name === name) {
return item.jwd;
}
}
return [];
}
//创建widget类,需要继承BaseWidget
class MyWidget extends mars3d.widget.BaseWidget {
//初始化[仅执行1次]
create() {
this.geoJsonLayer = new mars3d.layer.GeoJsonLayer({
pid: 99, //图层管理 中使用,父节点id
name: "淮海经济区11市",
url: "//data.mars3d.cn/file/geojson/huaihai.json",
symbol: {
styleOptions: {
materialType: mars3d.MaterialType.PolyGradient,
color: "#3388cc",
opacity: 0.7,
alphaPower: 1.3,
length: "{gdp}",
},
styleField: "Name",
styleFieldOptions: {
济宁市: { color: "#D4AACE" },
临沂市: { color: "#8DC763" },
菏泽市: { color: "#F7F39A" },
枣庄市: { color: "#F7F39A" },
徐州市: { color: "#96F0F1" },
宿迁市: { color: "#EAC9A8" },
连云港市: { color: "#F7F39A" },
商丘市: { color: "#D4AACE" },
宿州市: { color: "#8DC763" },
亳州市: { color: "#96F0F1" },
淮北市: { color: "#EAC9A8" },
},
},
});
//创建Graphic图层
this.graphicLayer = new mars3d.layer.GraphicLayer({
name: this.config.name,
pid: 99, //图层管理 中使用,父节点id
});
}
//打开激活
activate() {
this._last_basemap = this.map.basemap?.uuid;
this.map.basemap = 2017; //切换底图到深色底图
this.map.setCameraView({ lat: 31.338093, lng: 117.856434, alt: 284453, heading: 352, pitch: -38 });
this.map.addLayer(this.geoJsonLayer);
this.map.addLayer(this.graphicLayer);
//加载数据
$.ajax({
type: "GET",
url: "//data.mars3d.cn/file/apidemo/huaihai-jj.json",
success: (res) => {
this.showCityEconomyData(res.data);
},
error: (err) => {
haoutil.msg("实时查询气象信息失败,请稍候再试");
},
});
}
//关闭释放
disable() {
if (this._last_basemap) {
this.map.basemap = this._last_basemap; //还原底图
this._last_basemap = null;
}
this.map.removeLayer(this.geoJsonLayer);
this.map.removeLayer(this.graphicLayer);
}
showCityEconomyData(data) {
const yearArr = Object.keys(data);
this.showYearZT(data[yearArr[0]]);
}
/**
* 展示某年的椎体
*/
showYearZT(arr) {
for (let i = 0; i < arr.length; i += 1) {
const attr = arr[i];
const jwd = getJWDByName(attr["name"]);
const num1 = attr["第一产业"];
const num2 = attr["第二产业"];
const num3 = attr["第三产业"];
const numall = Number(num1 + num2 + num3).toFixed(2);
const html = `${attr["name"]}
第一产业:${num1}
第二产业:${num2}
第三产业:${num3}`;
var height1 = Math.floor(num1 * 10);
var height2 = Math.floor(num2 * 10);
var height3 = Math.floor(num3 * 10);
var p1 = Cesium.Cartesian3.fromDegrees(jwd[0], jwd[1], height3 / 2);
var p2 = Cesium.Cartesian3.fromDegrees(jwd[0], jwd[1], height3 + height2 / 2);
var p3 = Cesium.Cartesian3.fromDegrees(jwd[0], jwd[1], height3 + height2 + height1 / 2);
// 添加柱体
this.createZT(p1, height3, Cesium.Color.fromCssColorString("#63AEFF"), html);
this.createZT(p2, height2, Cesium.Color.fromCssColorString("#FFB861"), html);
this.createZT(p3, height1, Cesium.Color.fromCssColorString("#FF6D5D"), html);
// 添加文字
var primitive = new mars3d.graphic.LabelPrimitive({
position: Cesium.Cartesian3.fromDegrees(jwd[0], jwd[1], height1 + height2 + height3),
style: {
text: numall,
font_size: 18,
font_family: "楷体",
style: Cesium.LabelStyle.FILL_AND_OUTLINE,
fillColor: Cesium.Color.fromCssColorString("#00ff00"),
outlineColor: Cesium.Color.BLACK,
outlineWidth: 1,
horizontalOrigin: Cesium.HorizontalOrigin.CENTER,
verticalOrigin: Cesium.VerticalOrigin.BOTTOM,
pixelOffset: new Cesium.Cartesian2(0, -20),
},
});
this.graphicLayer.addGraphic(primitive);
primitive.bindTooltip(html);
}
}
/** 创建柱体 */
createZT(position, len, color, html) {
var graphic = new mars3d.graphic.CylinderEntity({
position: position,
style: {
length: len,
topRadius: 6000.0,
bottomRadius: 6000.0,
material: color,
},
});
this.graphicLayer.addGraphic(graphic);
graphic.bindTooltip(html);
// graphic._position_show = position
// graphic._length_show = len
return graphic;
}
}
//注册到widget管理器中。
mars3d.widget.bindClass(MyWidget);
//每个widet之间都是直接引入到index.html中,会存在彼此命名冲突,所以闭包处理下。
})(window, mars3d);