BIGEMPA Js API示例中心
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<!--
以下CSS地址請在安裝軟件了替換成本地的地址
CSS地址請使用:
http://localhost:9000/bigemap.js/v2.1.0/bigemap.css
軟件下載地址 http://www.bt68f.cn/reader/download/detail201802017.html
-->
<link href='http://www.bt68f.cn:9000/bigemap.js/v2.1.0/bigemap.css' rel='stylesheet' />
<!--
JS地址請使用:
http://localhost:9000/bigemap.js/v2.1.0/bigemap.js
-->
<script src='http://www.bt68f.cn:9000/bigemap.js/v2.1.0/bigemap.js'></script>
<script src="http://www.bt68f.cn/Public/common/js/jquery.min.js"></script>
<script src="http://www.bt68f.cn/Public/js/d3.min.js"></script>
</head>
<style>
body {
margin: 0;
padding: 0;
}
#map {
position: absolute;
top: 0;
bottom: 0;
width: 100%;
}
.pulse-icon {
display: inline-block;
width: 15px;
height: 15px;
border-radius: 100%;
background-color: #2f8;
position: relative;
box-shadow: 1px 1px 8px 0 rgba(0, 0, 0, 0.75);
}
.pulse-icon:after {
content: "";
box-shadow: 0 0 6px 2px #2f8;
animation: pulsate 1s ease-out;
animation-iteration-count: infinite;
animation-delay: 1.1s;
-webkit-border-radius: 100%;
border-radius: 100%;
height: 300%;
width: 300%;
animation: pulsate 2s infinite;
position: absolute;
margin: -100% 0 0 -100%;
}
@keyframes pulsate {
0% {
transform: scale(0.1, 0.1);
opacity: 0;
-ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=0)";
filter: alpha(opacity=0);
}
50% {
opacity: 1;
-ms-filter: none;
filter: none;
}
100% {
transform: scale(1.2, 1.2);
opacity: 0;
-ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=0)";
filter: alpha(opacity=0);
}
}
.d3 {
position: absolute;
top: 7px;
}
.dataname {
display: flex;
}
.dataname h4 {
flex: 2;
color: red;
padding-top: 104px;
text-align: center;
padding-right: 33px;
}
#left {
position: absolute;
z-index: 10;
width: 300px;
height: 100%;
background-color: black;
opacity: .7;
top: 0px;
}
#right {
position: absolute;
z-index: 10;
width: 300px;
height: 100%;
background-color: black;
opacity: .7;
right: 0px;
top: 0px;
}
</style>
<body>
<div id="map"> </div>
<div id="left">
<div class="ld3"></div>
</div>
<div style="position: absolute;
color: white;
z-index: 99;
left: 120px;">
<h4 style="margin-top: 199px;">A數據</h4>
<h4 class="B" style="margin-top:200px">B數據</h4>
<h4 class="C" style="margin-top:200px">C數據</h4>
</div>
<div id="right">
<div class="rd3"></div>
</div>
<div style="position: absolute;
color: white;
z-index: 99;
right: 120px;">
<h4 class="D" style="margin-top: 199px;">D數據</h4>
<h4 class="E" style="margin-top:200px">E數據</h4>
<h4 class="F" style="margin-top:200px">F數據</h4>
</div>
</body>
<script>
//軟件配置信息地址,軟件安裝完成之后使用本地地址,如:http://localhost:9000
BM.Config.HTTP_URL = 'http://www.bt68f.cn:9000';
// 在ID為map的元素中實例化一個地圖,并設置地圖的ID號為 bigemap.zhongkexingtu,ID號程序自動生成,無需手動配置,并設置地圖的投影為百度地圖 ,中心點,默認的級別和顯示級別控件
var map = BM.map('map', 'bigemap.zhongkexingtu', { center: [30, 104], zoom: 4, zoomControl: true });
var myIcon = BM.divIcon({ className: 'my-div-icon', html: '<div><span class="pulse-icon"></span></div>' });
for (let i = 0; i < 15; i++) {
BM.marker([20 + 20 * Math.random(), 80 + 40 * Math.random()], { icon: myIcon }).addTo(map);
}
//定義畫布高度 寬度
var height = 700
var width = 300
//定義一個接收定時器的數組
var interarr = []
var svg1 = d3.select('.ld3').append('svg').attr('height', height).attr('width', width)
var svg2 = d3.select('.rd3').append('svg').attr('height', height).attr('width', width)
//畫餅圖
setcircle(svg1, 100, 'c1')
setcircle(svg1, 320, 'c2')
setcircle(svg1, 550, 'c3')
setcircle(svg2, 100, 'c4', true, 1000)
setcircle(svg2, 320, 'c5', true)
setcircle(svg2, 550, 'c6', true, 4000)
//定義標記點擊事件
$('.pulse-icon').on('click', function () {
interarr.map(d => {
clearInterval(d)
})
d3.selectAll('.circle').remove()
//畫餅圖
setcircle(svg1, 100, 'c1')
setcircle(svg1, 320, 'c2')
setcircle(svg1, 550, 'c3')
setcircle(svg2, 100, 'c4', true, 1000)
setcircle(svg2, 320, 'c5', true)
setcircle(svg2, 550, 'c6', true, 4000)
})
//-------------------------------------- --------------------------------------------------------------------------
function setcircle(svgname, down, classname = c1, type = false, time = 2000) {
//定義畫布
var picture = svgname.append('g').attr('class', 'circle').attr('transform', `translate(150,${down})`)
//定義餅圖生成器
var arcGenerator = d3.arc().innerRadius(30).outerRadius(80).startAngle(0);
//背景圓
var backGround = picture.append("path")
.datum({ endAngle: 2 * Math.PI })
.style("fill", "snow")
.attr("d", arcGenerator);
//顏色比例尺
var colorLinear = d3.scaleLinear().domain([0, 100]).range(["#EEE685", "#EE3B3B"])
var num
//生產隨機數
setnum()
function setnum() {
num = Math.random()
num = num.toFixed(2) * 100
if (num % 1 === 0) {
return num
} else {
setnum()
}
}
// console.log(num);
//生產圖形
var upperGround = picture.append('path')
.datum({ endAngle: Math.PI * 2 * num / 100 })
.attr('class', classname)
.style('fill', '#FFC125')
.attr('d', arcGenerator)
//生產文字
var dataText = picture.append('text')
.text(num + '%')
.attr('text-anchor', 'middle')
.attr('dominant-baseline', 'middle')
.attr('font-size', '17px')
.attr('fill', 'white')
if (type === true) {
//定時器 定時更新圖形
var aa = setInterval(function () {
d3.select(`.${classname}`).transition().duration(750).attrTween('d', function (d) {
var compute = d3.interpolate(d.endAngle, Math.random() * Math.PI * 2);
return function (t) {
d.endAngle = compute(t);
var data = d.endAngle / Math.PI / 2 * 100;
//設置數值
dataText.text(data.toFixed(0) + '%');
//將新參數傳入,生成新的圓弧構造器
return arcGenerator(d);
}
}).styleTween('fill', function (d) {
return function (t) {
var data = d.endAngle / Math.PI / 2 * 100;
//返回數值對應的色值
return colorLinear(data);
}
})
}, time)
//將計時器添加到數組
interarr.push(aa)
}
}
</script>
</html>