<!DOCTYPE html>
<html>
<head>
<meta charset='UTF-8'/>
<meta name='viewport' content='initial-scale=1,maximum-scale=1,user-scalable=no'/>
<link rel='stylesheet'/>
<script src='http://ua.bigemap.com:30081/bmsdk/bigemap-gl.js/v1.1.0/bigemap-gl.js'></script>
<script type="text/javascript" src="http://www.bt68f.cn/Public/common/js/jquery.min.js"></script>
<style>
body {
margin: 0;
padding: 0;
}
#container {
position: absolute;
top: 0;
bottom: 0;
width: 100%;
}
.toolbar{
position: absolute;
left:20px;
top:15px;
z-index: 99;
color: #222;
background-color: rgba(220,220,220,0.8);
padding: 0 10px;
}
.bmgl-widget-credits{display:none}
</style>
<title>part_test</title>
</head>
<body>
<div id='container'></div>
<div class="toolbar">
<p>
<label>
<input type="radio" name="type" value="">影像
</label>
<label>
<input type="radio" checked name="type" value="elevation">高程
</label>
<label>
<input type="radio" name="type" value="aspect">方位
</label>
</p>
<p>
<label><input type="checkbox" value="line" checked name="line">等高線</label>
</p>
</div>
<script>
bmgl.Config.HTTP_URL = 'http://ua.bigemap.com:30081/bmsdk/';
var viewer = new bmgl.Viewer('container', {
terrainId: 'bigemap.dc-terrain',
mapId: 'bigemap.dc-tian-w-satellite'
});
$('input').on('click',function () {
var v=$(this).val();
if (v==='line'){
viewModel.enableContour=$(this).prop('checked');
}else{
viewModel.selectedShading=v;
}
updateMaterial();
});
viewer.camera.setView({
destination:new bmgl.Cartesian3(-1233524.2528105492,5342784.449529671,3266300.735257586),
orientation:{
heading:5.737109377827798,
roll:6.281571490802099,
pitch:-0.3089655832119651,
}
})
viewer.scene.globe.enableLighting = true;
function getElevationContourMaterial() {
return new bmgl.Material({
fabric: {
type: 'ElevationColorContour',
materials: {
contourMaterial: {
type: 'ElevationContour'
},
elevationRampMaterial: {
type: 'ElevationRamp'
}
},
components: {
diffuse: 'contourMaterial.alpha == 0.0 ? elevationRampMaterial.diffuse : contourMaterial.diffuse',
alpha: 'max(contourMaterial.alpha, elevationRampMaterial.alpha)'
}
},
translucent: false
});
}
function getSlopeContourMaterial() {
return new bmgl.Material({
fabric: {
type: 'SlopeColorContour',
materials: {
contourMaterial: {
type: 'ElevationContour'
},
slopeRampMaterial: {
type: 'SlopeRamp'
}
},
components: {
diffuse: 'contourMaterial.alpha == 0.0 ? slopeRampMaterial.diffuse : contourMaterial.diffuse',
alpha: 'max(contourMaterial.alpha, slopeRampMaterial.alpha)'
}
},
translucent: false
});
}
function getAspectContourMaterial() {
return new bmgl.Material({
fabric: {
type: 'AspectColorContour',
materials: {
contourMaterial: {
type: 'ElevationContour'
},
aspectRampMaterial: {
type: 'AspectRamp'
}
},
components: {
diffuse: 'contourMaterial.alpha == 0.0 ? aspectRampMaterial.diffuse : contourMaterial.diffuse',
alpha: 'max(contourMaterial.alpha, aspectRampMaterial.alpha)'
}
},
translucent: false
});
}
var elevationRamp = [0.0, 0.045, 0.1, 0.15, 0.37, 0.54, 1.0];
var slopeRamp = [0.0, 0.29, 0.5, Math.sqrt(2)/2, 0.87, 0.91, 1.0];
var aspectRamp = [0.0, 0.2, 0.4, 0.6, 0.8, 0.9, 1.0];
function getColorRamp(selectedShading) {
var ramp = document.createElement('canvas');
ramp.width = 100;
ramp.height = 1;
var ctx = ramp.getContext('2d');
var values;
if (selectedShading === 'elevation') {
values = elevationRamp;
} else if (selectedShading === 'slope') {
values = slopeRamp;
} else if (selectedShading === 'aspect') {
values = aspectRamp;
}
var grd = ctx.createLinearGradient(0, 0, 100, 0);
if (values){
grd.addColorStop(values[0], '#000000'); //black
grd.addColorStop(values[1], '#2747E0'); //blue
grd.addColorStop(values[2], '#D33B7D'); //pink
grd.addColorStop(values[3], '#D33038'); //red
grd.addColorStop(values[4], '#FF9742'); //orange
grd.addColorStop(values[5], '#ffd700'); //yellow
grd.addColorStop(values[6], '#ffffff'); //white
}
ctx.fillStyle = grd;
ctx.fillRect(0, 0, 100, 1);
return ramp;
}
var minHeight = -414.0;
var maxHeight = 8777.0;
var contourColor = bmgl.Color.RED.clone();
var contourUniforms = {};
var shadingUniforms = {};
var viewModel = {
enableContour: true,
contourSpacing: 150.0,
contourWidth: 2.0,
selectedShading: 'elevation',
changeColor: function() {
contourUniforms.color = bmgl.Color.fromRandom({alpha: 1.0}, contourColor);
}
};
function updateMaterial() {
var hasContour = viewModel.enableContour;
var selectedShading = viewModel.selectedShading;
var globe = viewer.scene.globe;
var material;
if (hasContour) {
if (selectedShading === 'elevation') {
material = getElevationContourMaterial();
shadingUniforms = material.materials.elevationRampMaterial.uniforms;
shadingUniforms.minimumHeight = minHeight;
shadingUniforms.maximumHeight = maxHeight;
contourUniforms = material.materials.contourMaterial.uniforms;
} else if (selectedShading === 'slope') {
material = getSlopeContourMaterial();
shadingUniforms = material.materials.slopeRampMaterial.uniforms;
contourUniforms = material.materials.contourMaterial.uniforms;
} else if (selectedShading === 'aspect') {
material = getAspectContourMaterial();
shadingUniforms = material.materials.aspectRampMaterial.uniforms;
contourUniforms = material.materials.contourMaterial.uniforms;
} else {
material = bmgl.Material.fromType('ElevationContour');
contourUniforms = material.uniforms;
}
contourUniforms.width = viewModel.contourWidth;
contourUniforms.spacing = viewModel.contourSpacing;
contourUniforms.color = contourColor;
} else if (selectedShading === 'elevation') {
material = bmgl.Material.fromType('ElevationRamp');
shadingUniforms = material.uniforms;
shadingUniforms.minimumHeight = minHeight;
shadingUniforms.maximumHeight = maxHeight;
} else if (selectedShading === 'slope') {
material = bmgl.Material.fromType('SlopeRamp');
shadingUniforms = material.uniforms;
} else if (selectedShading === 'aspect') {
material = bmgl.Material.fromType('AspectRamp');
shadingUniforms = material.uniforms;
}
if (selectedShading !== 'none') {
shadingUniforms.image = getColorRamp(selectedShading);
}
globe.material = material;
}
updateMaterial();
</script>
</body>
</html>