export default {
|
/**
|
*
|
* 地图参数
|
*
|
*/
|
mapOption: {},
|
/**
|
*
|
* 初始化地图
|
*
|
*/
|
initMap() {
|
let option = {
|
url: SmartEarthRootUrl + "Workers/image/earth.jpg",
|
fullscreenButton: true,
|
contextOptions: {
|
failIfMajorPerformanceCaveat: false,
|
webgl: {
|
alpha: true,
|
preserveDrawingBuffer: true,
|
},
|
},
|
};
|
|
window.sgworld = new SmartEarth.SGWorld("sdkContainer", Cesium, option, null, function() {});
|
var dx = {
|
url: "https://services.arcgisonline.com/ArcGIS/rest/services/World_Imagery/MapServer",
|
enablePickFeatures: false,
|
};
|
sgworld.Creator.createArcGisImageryLayer("ARCGIS", dx, "0", undefined, true, "");
|
|
window.Viewer = sgworld._Viewer;
|
Viewer.shadows = false;
|
//fps
|
Viewer.scene.debugShowFramesPerSecond = false;
|
},
|
/**
|
*
|
* 切换对象状态
|
*
|
*/
|
toggleObject(object) {},
|
/**
|
*
|
* 隐藏对象
|
*
|
*/
|
hideObject() {},
|
/**
|
*
|
* 显示对象
|
*
|
*/
|
showObject() {},
|
/**
|
*
|
* 创建WMS
|
*
|
*/
|
createWMS() {},
|
/**
|
*
|
* 创建WFS
|
*
|
*/
|
createWFS() {},
|
parseDefines(shader) {
|
let defines = [];
|
for (const key in shader.defines) {
|
if (shader.defines.hasOwnProperty(key)) {
|
const val = shader.defines[key];
|
defines.push("#define " + key + " " + val);
|
}
|
}
|
defines = defines.join("\n") + "\n";
|
if (shader.fragmentShader) {
|
shader.fragmentShader = defines + shader.fragmentShader;
|
}
|
if (shader.vertexShader) {
|
shader.vertexShader = defines + shader.vertexShader;
|
}
|
return shader;
|
},
|
/**
|
*
|
* 创建发光
|
*
|
*/
|
setLuminosity() {
|
const { Cartesian2, PostProcessStage, PostProcessStageComposite, PostProcessStageSampleMode } = Cesium;
|
|
let fShader = `uniform sampler2D colorTexture;
|
uniform vec3 defaultColor;
|
uniform float defaultOpacity;
|
uniform float luminosityThreshold;
|
uniform float smoothWidth;
|
|
varying vec2 v_textureCoordinates;
|
void main() {
|
vec4 texel = texture2D(colorTexture, v_textureCoordinates);
|
|
#ifdef CZM_SELECTED_FEATURE
|
if(!czm_selected()) {
|
texel = vec4(0.);
|
}
|
#endif
|
|
vec3 luma = vec3(0.299, 0.587, 0.114);
|
float v = dot(texel.xyz, luma);
|
vec4 outputColor = vec4(defaultColor.rgb, defaultOpacity);
|
float alpha = smoothstep(luminosityThreshold, luminosityThreshold + smoothWidth, v);
|
gl_FragColor = mix(outputColor, texel, alpha);
|
}`;
|
|
let highlight = new PostProcessStage({
|
name: "highlight",
|
fragmentShader: fShader,
|
uniforms: {
|
defaultColor: [0.1, 0.1, 0.1],
|
luminosityThreshold: 0.5,
|
defaultOpacity: 0.5,
|
smoothWidth: 0.01,
|
},
|
});
|
|
let kernelFShader = `varying vec2 v_textureCoordinates;
|
uniform sampler2D colorTexture;
|
uniform vec2 colorTextureDimensions;
|
uniform vec2 direction;
|
|
float gaussianPdf(in float x, in float sigma) {
|
return 0.39894 * exp( -0.5 * x * x/( sigma * sigma))/sigma;
|
}
|
void main() {
|
|
vec2 invSize = 1.0 / colorTextureDimensions;
|
float fSigma = float(SIGMA);
|
float weightSum = gaussianPdf(0.0, fSigma);
|
vec3 diffuseSum = texture2D( colorTexture, v_textureCoordinates).rgb * weightSum;
|
for( int i = 1; i < KERNEL_RADIUS; i ++ ) {
|
float x = float(i);
|
float w = gaussianPdf(x, fSigma);
|
vec2 uvOffset = direction * invSize * x;
|
vec3 sample1 = texture2D( colorTexture, v_textureCoordinates + uvOffset).rgb;
|
vec3 sample2 = texture2D( colorTexture, v_textureCoordinates - uvOffset).rgb;
|
diffuseSum += (sample1 + sample2) * w;
|
weightSum += 2.0 * w;
|
}
|
gl_FragColor = vec4(diffuseSum/weightSum, 1.0);
|
}`;
|
let blurDirectionX = new Cartesian2(1.0, 0.0);
|
|
let separableBlurShader = {
|
defines: {
|
KERNEL_RADIUS: 11,
|
SIGMA: 1,
|
},
|
fragmentShader: kernelFShader,
|
};
|
this.parseDefines(separableBlurShader);
|
|
let kernel1 = new PostProcessStage({
|
name: "kernel1",
|
|
fragmentShader: separableBlurShader.fragmentShader,
|
uniforms: {
|
direction: blurDirectionX,
|
},
|
});
|
|
// const blurCompositeStage = new PostProcessStageComposite({
|
// name: "BlurComposite",
|
// stages: [highlight, blurStage1, blurStage2],
|
// inputPreviousStageTexture: true
|
// })
|
|
sgworld._Viewer.scene.postProcessStages.add(kernel1);
|
},
|
/**
|
*
|
* 创建热力图
|
*
|
*/
|
createHeatMap(response, attr) {
|
let that = this;
|
|
let features = response.data.features;
|
let heatmapData = [];
|
for (let i = 0; i < features.length; i++) {
|
let geom = features[i].geometry.coordinates;
|
let pre = features[i].properties;
|
//var position = { X: geom[0], Y: geom[1], Altitude: 100 };
|
let value = pre[attr] ? pre[attr] : 1;
|
value = Math.sqrt(value);
|
// value = 1;
|
heatmapData.push({
|
x: geom[0],
|
y: geom[1],
|
value: value,
|
});
|
}
|
let heatmapLayer = sgworld.Creator.addHeatMap("热力图1", {
|
type: "Heatmap3D", // 热力图类型
|
sourceData: heatmapData,
|
radius: 100,
|
minHeight: 0, // 底部高度
|
TIN_X: 300,
|
TIN_Y: 300,
|
colorScale: 1, //色值转换高度的比例
|
//showTIN: true, //显示三角网
|
//tooltip: true // tooltip显示数值
|
});
|
return heatmapLayer;
|
},
|
/**
|
*
|
* 创建地图柱状图
|
*
|
*/
|
createMapBar(response, attr) {
|
let features = response.data.features;
|
let entityData = [];
|
let groupId = sgworld.ProjectTree.createGroup("柱状图", true, 0);
|
var StartColor = "#2222c6";
|
var EndColor = "#a5dc0e";
|
//获取填充颜色
|
var colorArr = sgworld.Core.gradientColor(StartColor, EndColor, 10);
|
var maxVal = -99999;
|
var minVal = 99999;
|
for (let i = 0; i < features.length; i++) {
|
let pre = features[i].properties;
|
let value = pre[attr] ? pre[attr] : 1;
|
if (value > maxVal) {
|
maxVal = value;
|
}
|
if (value < minVal) {
|
minVal = value;
|
}
|
}
|
|
for (let i = 0; i < features.length; i++) {
|
let geom = features[i].geometry.coordinates;
|
let pre = features[i].properties;
|
//var position = { X: geom[0], Y: geom[1], Altitude: 100 };
|
let value = pre[attr] ? pre[attr] : 1;
|
let labelVal = pre[attr] ? pre[attr] : 0;
|
var num = Math.floor(((value - minVal) / (maxVal - minVal)) * 10);
|
var ysk = colorArr[num];
|
|
let scale = 10;
|
let Histogramwidth = 100;
|
|
var position = sgworld.Creator.CreatePosition(geom[0], geom[1], (value * scale) / 2, 1, 0, 0, 0, 300);
|
let cylinder = sgworld.Creator.CreateCylinder(position, Histogramwidth, value * scale, "", ysk, 100, groupId, "柱" + i);
|
|
//let label = sgworld.Creator.CreateLabel(position,value,"",{},groupId, "文本" + i);
|
let label = sgworld.Creator.addSimpleGraphic("label", {
|
position: Cesium.Cartesian3.fromDegrees(geom[0], geom[1], (value * scale)),
|
removeEdit: true,
|
text: labelVal.toFixed(2) + " ",
|
heightReference: 0,
|
font: "42px 宋体",
|
outlineWidth: 2,
|
GroupID:groupId,
|
});
|
}
|
return groupId;
|
},
|
/**
|
*
|
* 创建模型
|
*
|
*/
|
createModel(url) {
|
window.sceneObj.tiltLowModel = sgworld.Creator.create3DTilesets(
|
"",
|
url,
|
{
|
skipLevelOfDetail: true,
|
preferLeaves: true,
|
},
|
{},
|
0,
|
true,
|
(data) => {
|
sgworld.Navigate.flyToObj(data);
|
}
|
);
|
},
|
/**
|
*
|
* 创建发光线
|
*
|
*/
|
createFlyLine() {},
|
/**
|
*
|
* 创建扫描
|
*
|
*/
|
createScanLight() {},
|
/**
|
*
|
* 创建圆形扫描
|
*
|
*/
|
createCircleLight() {},
|
};
|