【发布时间】:2011-06-19 06:39:56
【问题描述】:
我想知道PHP中最快的聚类标记算法是什么?
我只需要集群函数的输出是带有集群 obj 的输出,它具有以下属性:lat、lng 和 size。
当然还有那些没有聚类的标记,但我似乎找不到这个的php代码,一定有一些?
我正在寻找会产生这种结果的代码隐藏? (或者也许表现更好)。 http://maps.forum.nu/server_side_clusterer/
到目前为止,我已经尝试过:
function ClusterMarkers($markers,$ZOOM)
{
$this->load->library('firephp');
$singleMarkers = array();
$clusterMarkers = array();
// Minimum distance between markers to be included in a cluster, at diff. zoom levels
$DISTANCE = (10000000 >> $ZOOM);
// Loop until all markers have been compared.
while (count($markers)) {
$marker = array_pop($markers);
$cluster = array();
// Compare against all markers which are left.
foreach ($markers as $key => $target) {
$pixels = abs($marker['lat']-$target['lat']) + abs($marker['lng']-$target['lng']);
$this->firephp->log('pix :'.$pixels);
if ($pixels < $DISTANCE) {
unset($markers[$key]);
$cluster[] = $target;
}
}
// If a marker has been added to cluster, add also the one we were comparing to.
if (count($cluster) > 0) {
$cluster[] = $marker;
$clusterMarkers[] = $cluster;
} else {
$singleMarkers[] = $marker;
}
}
return array('singlemarkers' => $singleMarkers, 'clustermarkers' => $clusterMarkers);
}
然后我的数据被 json 化,但 clustermarkers 数组包含所有标记数据,我想知道如何有效地简单地设置纬度、经度和大小,而不必在每次添加新标记时重新计算资源需求。
【问题讨论】:
-
@Andy Paton - 我编辑了这个问题 - 好点 =)
-
虽然我不完全理解您要实现的目标,但如果您可以重写您的函数以使其不包含嵌套循环,则效率会更高。
-
@Robin - 我从别人那里拿到了这个 sn-p,所以实际上我自己并不能 100% 理解它。我也更喜欢一种替代解决方案,它会输出带有大小、lat 和 lng 的聚集标记,然后是带有所有数据的非聚集标记。
标签: php mysql google-maps cluster-analysis