<!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 src="http://www.bt68f.cn/Public/common/js/jquery.min.js"></script>
<link href="http://www.bt68f.cn/Public/common/css/bootstrap.min.css" rel="stylesheet">
<style>
body {
margin: 0;
padding: 0;
}
#container {
position: absolute;
top: 0;
bottom: 0;
width: 100%
}
#control {
user-select: none;
position: absolute;
bottom: 20px;
right: 0;
width: 380px;
background: #f1f1f1;
}
#control .panel {
margin-bottom: 0;
}
#control .panel input[type=range] {
width: calc(100% - 30px);
margin-left: 10px;
}
#control .minus, #control .plus {
position: absolute;
text-align: center;
line-height: 16px;
font-size: 20px;
display: inline-block;
height: 20px;
cursor: pointer;
width: 20px;
border-radius: 100%;
border: 1px solid #29d2ff;
}
#control .minus {
left: 0;
top: -1px;
}
#control .plus {
right: 4px;
top: -1px;
}
</style>
<title>part_test</title>
</head>
<body>
<div id='container'></div>
<div id="control">
<div class="panel panel-info">
<div class="panel-heading">
位置校正
</div>
<div class="panel-body">
<div class="form-group row">
<div class="col-sm-4">
<label>
<span>縮放</span>
<span class="value">1</span>
</label>
</div>
<div class="col-sm-8">
<span class="minus mi">-</span>
<input name="scale" type="range" value="1" min="0.01" max="3" step="0.1">
<span class="plus mi">+</span>
</div>
</div>
<div class="form-group row">
<div class="col-sm-4">
<label>
<span>經度</span>
<span class="value">93.946</span>
</label>
</div>
<div class="col-sm-8">
<span class="minus mi">-</span>
<input name="longitude" type="range" value="93.946" min="93.3" max="94.2" step="0.0001">
<span class="plus mi">+</span>
</div>
</div>
<div class="form-group row">
<div class="col-sm-4">
<label>
<span>緯度</span>
<span class="value">36.6878</span>
</label>
</div>
<div class="col-sm-8">
<span class="minus mi">-</span>
<input name="latitude" type="range" value="36.6878" min="36.2" max="36.9" step="0.0001">
<span class="plus mi">+</span>
</div>
</div>
<div class="form-group row">
<div class="col-sm-4">
<label>
<span>高度</span>
<span class="value">-380</span>
</label>
</div>
<div class="col-sm-8">
<span class="minus mi">-</span>
<input name="height" type="range" value="-380" min="-2000" max="2000" step="1">
<span class="plus mi">+</span>
</div>
</div>
<div class="form-group row">
<div class="col-sm-4">
<label>
<span>X旋轉</span>
<span class="value">0</span>
</label>
</div>
<div class="col-sm-8">
<span class="minus mi">-</span>
<input name="rx" type="range" value="0" min="-360" max="360" step="1">
<span class="plus mi">+</span>
</div>
</div>
<div class="form-group row">
<div class="col-sm-4">
<label>
<span>Y旋轉</span>
<span class="value">0</span>
</label>
</div>
<div class="col-sm-8">
<span class="minus mi">-</span>
<input name="ry" type="range" value="0" min="-360" max="360" step="1">
<span class="plus mi">+</span>
</div>
</div>
<div class="form-group row">
<div class="col-sm-4">
<label>
<span>Z旋轉</span>
<span class="value">-4.5</span>
</label>
</div>
<div class="col-sm-8">
<span class="minus mi">-</span>
<input name="rz" type="range" value="-4.5" min="-360" max="360" step="1">
<span class="plus mi">+</span>
</div>
</div>
</div>
</div>
</div>
<script>
bmgl.Config.HTTP_URL = 'http://ua.bigemap.com:30081/bmsdk/';
var viewer = new bmgl.Viewer('container', {mapId: 'bigemap.dc-tian-w-satellite',requestRenderMode:false});
var tilesets = new bmgl.BM3DTileset({url: '/bmgl/data/road2/tileset.json', maximumScreenSpaceError: 1});
var tileData;
tilesets.readyPromise.then(function (tileset) {
viewer.scene.primitives.add(tileset);
// var default_HeadingPitchRange = new bmgl.HeadingPitchRange(0.0, -0.5, tileset.boundingSphere.radius * 2.0);
// viewer.zoomTo(tileset, default_HeadingPitchRange);
viewer.camera.setView({
"destination": bmgl.Cartesian3.fromDegrees(93.70850968438515, 36.678872101477836,3155.311533),
"orientation": {"heading":1.541920544673033,"roll":0.003466896409897835,"pitch":-0.3847566214148632}
});
var cartographic = bmgl.Cartographic.fromCartesian(tileset.boundingSphere.center);
var delta_lng = 0, delta_lat = 0;
console.log(bmgl.Math.toDegrees(cartographic.longitude), bmgl.Math.toDegrees(cartographic.latitude));
var surface = bmgl.Cartesian3.fromRadians(cartographic.longitude + delta_lng, cartographic.latitude + delta_lat, 0.0);
var offset = bmgl.Cartesian3.fromRadians(cartographic.longitude + delta_lng - bmgl.Math.toRadians(23), cartographic.latitude - bmgl.Math.toRadians(4.5), 0);
var translation = bmgl.Cartesian3.subtract(offset, surface, new bmgl.Cartesian3());
// tileset.modelMatrix = bmgl.Matrix4.fromTranslation(translation);
// tileset.modelMatrix=update3dtilesMaxtrix(params);
tileData = tileset;
tileset._root.transform = update3dtilesMaxtrix();
// console.log(tileset._root.transform);
}).otherwise(function (error) {
console.log(error);
});
$('#control').on('change', 'input[type=range]', function () {
$(this).parent().parent().find('.value').html($(this).val());
var name = $(this).prop('name');
tileModelTool[name] = parseFloat($(this).val());
tileData._root.transform = update3dtilesMaxtrix();
console.log('aaa');
});
$('#control').on('click', '.mi', function () {
var input = $(this).parent().find('input');
var name = input.prop('name');
var step = input.prop('step');
if ($(this).hasClass('minus')) {
tileModelTool[name] -= parseFloat(step);
} else {
tileModelTool[name] += parseFloat(step);
}
if (parseFloat(input.prop('min')) > tileModelTool[name]) {
tileModelTool[name] = parseFloat(input.prop('min'));
}
if (parseFloat(input.prop('max')) < tileModelTool[name]) {
tileModelTool[name] = parseFloat(input.prop('max'));
}
input.val(tileModelTool[name]);
$(this).parent().parent().find('.value').html(tileModelTool[name].toString().substr(0, 7));
tileData._root.transform = update3dtilesMaxtrix();
});
var tileModelTool = {
scale: 1,
longitude: 93.9435,
latitude: 36.6613,
height: -380, //修改高度
rx: 0,
ry: 0,
rz: -3.5, //修改旋轉
alpha: 0.5
}
function update3dtilesMaxtrix() {
var mx = bmgl.Matrix3.fromRotationX(
bmgl.Math.toRadians(tileModelTool.rx)
);
var my = bmgl.Matrix3.fromRotationY(
bmgl.Math.toRadians(tileModelTool.ry)
);
var mz = bmgl.Matrix3.fromRotationZ(
bmgl.Math.toRadians(tileModelTool.rz)
);
var rotationX = bmgl.Matrix4.fromRotationTranslation(mx);
var rotationY = bmgl.Matrix4.fromRotationTranslation(my);
var rotationZ = bmgl.Matrix4.fromRotationTranslation(mz);
//平移 修改經緯度
var position = bmgl.Cartesian3.fromDegrees(
tileModelTool.longitude,
tileModelTool.latitude,
tileModelTool.height
);
var m = bmgl.Transforms.eastNorthUpToFixedFrame(position);
//旋轉、平移矩陣相乘
bmgl.Matrix4.multiply(m, rotationX, m);
bmgl.Matrix4.multiply(m, rotationY, m);
bmgl.Matrix4.multiply(m, rotationZ, m);
//縮放 修改縮放比例
var scale = bmgl.Matrix4.fromUniformScale(tileModelTool.scale);
bmgl.Matrix4.multiply(m, scale, m);
return m;
}
</script>
</body>
</html>