我在Timemap(https://github.com/datadesk/timemap/blob/master/examples/progressive.html)中的渐进式加载示例遇到了一些麻烦,我将其用作项目的基础。 所以我有一个超过6k行的数据文件,所以我想我每次向服务器发出请求时都不想浏览所有文件,所以我创建了一个索引文件,映射每年开始的行,所以我可以快速跳转到大文件上的相应开头和结尾。
这是服务文件:
<?php
// get timestamps
$start = strtotime($_GET['start']);
$end = strtotime($_GET['end']);
$cb = $_GET['callback'];
//index file
$ifile = "../indexfile.txt";
if(file_exists($ifile)){
$ihandler = fopen($ifile, "r");
}
$index = array();
while (($line = fgetcsv($ihandler, 50, " ")) !== FALSE) {
if ($line[0] != "1"){
$index[] = array($line[0],strtotime($line[3]."-".$line[1]."-".$line[2]));
}
}
$startline = 0;
$endline = 0;
$flag = true;
foreach($index as $k => $v){
if($flag == true){
if($v[1] >= strtotime($_GET['start'])){
$startline = $v[0];
$flag = false;
}
}
if($v[1] >= strtotime($_GET['end'])){
$endline = $v[0];
break;
}
}
//load file
$file = "../file.txt";
if(file_exists($file)){
$handler = file($file);
}
// start data
echo "$cb([";
for($i=$startline-1;$i<=$endline-1;$i++){
$line = explode("\t", $handler[$i]);
if(strlen($line[2]) == 1){$line[2] = "0".$line[2];}
if(strlen($line[3]) == 1){$line[3] = "0".$line[3];}
if($i>$startline-1){echo ',';}
echo '{';
echo 'title:"'.rtrim($line[6]).'",';
echo 'start:"'.$line[4].'-'.$line[2].'-'.$line[3].'T12:00:00-0100",';
echo 'point:{lat:'.$line[1].',lon:'.$line[0].'},';
echo 'options:{theme:"theme_'.iconsize(rtrim($line[6])).'",infoHtml:"<div>'.$line[5].' - '.rtrim($line[6]).' Lorem ipsum... bla bla bla...</div>"}';
echo '}';
}
// end data
echo "])";
//function to calculate the size of the icon in percentage of the maximum size
function iconsize($size){
$min = 169;
$max = 577214;
$isize = ceil(($size/$max)*10);
return $isize;
}
?>
索引文件有一对/年; 正确的文件是一组标签值,例如lon / lat,month,day,year,date和value 时间图使用开放层而不是original之类的谷歌地图,除了它类似之外。
现在问题:我在时间轴上出现了一些重复数据(而不是地图),但json响应绝对正确。如果我减少请求的间隔,则复制(或三次或*复制)增加,如果我增加间隔,则减少。 我的理论是时间映射将加载结果保存在同一个数组中,但不检查服务器后续响应中的重复结果。是这样的吗?我怎么能纠正这个?
谢谢:)