javascript - 单击googlemap javascript上的相应标记时如何在mysql中显示特定ID的实时图表
问题描述
我是一名电气专业的学生,我的毕业论文是“使用 GOOGLE MAP JAVASCRIPT API 实时监控建筑电力”</p>
所以我想问的是我应该使用什么代码,这样每次我点击一个标记(在MYSQL中有一个特定的键为“STT”,它会在旁边准确显示该ID标记的实时chartjs地图
这是它应该是的
下面的图表是实时的,带有设置间隔函数(),但我只能用 1 'STT' 在此处输入图像描述
我一直坚持找到点击时调用每个制造商的实时图表的方法......我希望像点击标记一样显示图表,以在“信息窗口”中显示他们自己的信息,使用AJAX…</p>
这是(ajax.php),每次我单击具有特定 STT(已声明)的制造商时,它都会在该标记的信息窗口中显示信息
enter code here <?php
$sql = mysqli_connect('localhost','root','','viethuynh');
$db = mysqli_select_db($sql,'THONGSO');
mysqli_query($sql,"SET NAMES 'utf8'");
if($_GET['stt']){
$result=array();
$ajax = mysqli_query($sql,"SELECT * FROM THONGSO WHERE STT={$_GET['stt']} ORD ER BY THOIGIAN Desc");
$row = $ajax->fetch_array(MYSQLI_ASSOC);
echo json_encode(array('status'=>1, 'hi'=>$row));
}
else{
echo json_encode(array('status'=>0, 'hi'=>null));
}
exit;?>
这是 INDEX.php 的一部分,Responsecontainer div 将包含地图并设置间隔以从 data.php 加载
enter code here<script type="text/javascript">
var refreshId = setInterval(function()
{
$('#responsecontainer').load('data.php');
$('#alarmcontainer').load('alarm.php');
}, 2000);
</script>
<div class="container">
<div id="responsecontainer"> </div>
</div>
<script>
var chitiet23 = [
{lat: 10.794700166183983, lng: 106.72211611533994, stt:1 },//landmark 1
{lat: 10.794039928032047, lng: 106.72119507244005, stt: 2},//landmark 2
{lat: 10.794965423476151, lng: 106.7205907214612, stt: 3},//landmark 3
{lat: 10.795388608948297, lng: 106.72033981464217, stt: 4},//landmark 4
{lat: 10.796284577174639, lng: 106.72045262550873, stt: 5},//landmark 5
{lat: 10.796435865523902, lng: 106.72181569793783, stt: 6},//landmark 6
];
function getInfor2(marker, map, init) {
var list=[];
$.ajax({
url: "ajax.php?stt="+init.stt,
type: "GET",
dataType: "json",
success: function(temp)
{
if(temp.status==1){
var result= temp.hi;
list[init.stt] = '<div id="test">' +
'<h4 style="color:blue;">Thông Tin Chi Tiết: </h4>' +
'<ul style="color:black; font-weight:bold;">' +
'<li> TÊN TÒA NHÀ: '+result.ID+'</li>' +
'<li> STT : ' +result.STT+'</li>' +
'<li> Thời gian ghi: '+result.THOIGIAN+'</li>' +
'<li> Điện năng tiêu thụ (KWh): '+result.DIENNANG+'</li>' +
'<li> Tổng tiền điện (VND): '+result.DIENNANG*5000+'</li>' +
'</ul>' + '</div>' ;
}
else{alert('dữ liệu không tồn tại trong hệ thống');}
}
});
google.maps.event.addListener(marker, 'click', function ()
{
infowindow.setContent(list[init.stt]);
infowindow.open(map, marker);
var string = '<div id="responsecontainer"></div>';
document.getElementById('after').innerHTML = (list[init.stt] + string);
});
}
</script>
这是获取chartjs数据的data.php
<?php
include "config.php";
$x_thoigian= mysqli_query($conn, 'SELECT THOIGIAN FROM ( SELECT * FROM THONGSO WHERE STT= 1 ORDER BY THOIGIAN DESC LIMIT 5) Var1 ORDER BY THOIGIAN ASC');
$y_FRE= mysqli_query($conn, 'SELECT FRE FROM( SELECT * FROM THONGSO WHERE STT= 1 ORDER BY THOIGIAN DESC LIMIT 5) Var1 ORDER BY THOIGIAN ASC');
$y_VOL= mysqli_query($conn, 'SELECT VOL FROM( SELECT * FROM THONGSO WHERE STT= 1 ORDER BY THOIGIAN DESC LIMIT 5) Var1 ORDER BY THOIGIAN ASC');
$y_AMP= mysqli_query($conn, 'SELECT AMP FROM ( SELECT * FROM THONGSO WHERE STT= 1 ORDER BY THOIGIAN DESC LIMIT 5) Var1 ORDER BY THOIGIAN ASC');
?>
<div class="panel panel-primary" style="position: relative; height: 50vh; width:40vw;">
<div class="panel-heading">
<h3 class="panel-title"><center>BIỂU ĐỒ REALTIME</h3>
</div>
<canvas id="myChart" > </canvas>
<script>
var canvas = document.getElementById('myChart').getContext('2d');
var data = {
labels: [<?php while ($b = mysqli_fetch_array($x_thoigian)) { echo '"' . $b['THOIGIAN'] . '",';}?>],
datasets: [
{
label: "TẦN SỐ",
fill: false,
lineTension: 0.1,
backgroundColor: "rgba(105, 0, 132, .2)",
borderColor: "rgba(200, 99, 132, .7)",
borderCapStyle: 'butt',
borderDash: [],
borderDashOffset: 0.0,
borderJoinStyle: 'miter',
pointBorderColor: "rgba(200, 99, 132, .7)",
pointBackgroundColor: "#fff",
pointBorderWidth: 1,
pointHoverRadius: 5,
pointHoverBackgroundColor: "rgba(200, 99, 132, .7)",
pointHoverBorderColor: "rgba(200, 99, 132, .7)",
pointHoverBorderWidth: 2,
pointRadius: 5,
pointHitRadius: 10,
data: [<?php while ($b = mysqli_fetch_array($y_FRE)) { echo $b['FRE'] . ',';}?>],
},
]
};
var option =
{
showLines: true,
animation: {duration: 0}
};
var myLineChart = Chart.Line(canvas,{
data:data,
options:option
});
</script>
</div>
多谢
解决方案
我假设您使用最新的 ChartJS 版本。您需要一个函数来更新Chartjs 实例中的数据。然后将其传递setInterval
给实时更新。
const updateChartData = (chart, ajaxData) => {
const data = chart.data;
if (data.datasets.length > 0) {
//data.labels.push(<<LABEL YOUR WANT TO DISPLAY>>)
for (var index = 0; index < data.datasets.length; ++index) {
// data.datasets[index].data.push(<<PUSH DATA YOU WANT TO DISPLAY FROM ajaxData>>);
}
chart.update();
}
}
setInterval(() => {
const ajaxData = $.ajax(dataUrl).then(res => {
... // handle response
})
updateRealTime(myChart, ajaxData);
}, 1000);
推荐阅读
- javascript - React Side bar - 导航类似于提供的链接
- python - 我正在编写一个 Python 加密程序,它会随着时间改变符号的值,任何想法如何开始
- c# - How to read binary files until EOF in C#
- c++ - How to increase the exponents using loops?
- jquery - JqGrid 获取列值
- javascript - 如何创建一个在不同时间执行 3 种不同功能的下一个按钮?
- sql-server - 如何在.net中执行动态SQL?
- .htaccess - htaccess 中的简单 rewritecond 无法按预期工作
- vba - 计算 TO 字段中的 VBA 收件人数
- c++ - qglwidget 顶部的添加按钮