gpt4 book ai didi

php - 服务器端集群谷歌地图标记

转载 作者:可可西里 更新时间:2023-11-01 07:33:40 25 4
gpt4 key购买 nike

我想知道在 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 数组包含所有标记数据,我想知道我如何有效地简单地设置纬度、经度和大小,而不必在每次添加新标记时重新计算资源需求。

最佳答案

$clusterMarkers 数组基本上是一组聚类标记,因此您可以简单地获取包含标记的质心,而不是返回所有标记。在返回结果之前,做:

foreach($clusterMarkers as $key => $cluster) {
$centroid = array('lat' => 0, 'lng' => 0, 'count' => 0);
foreach($cluster as $marker) {
$centroid['lat'] += $marker['lat']; // Sum up the Lats
$centroid['lng'] += $marker['lng']; // Sum up the Lngs
$centroid['count']++;
}
$centroid['lat'] /= $centroid['count']; // Average Lat
$centroid['lng'] /= $centroid['count']; // Average Lng
$clusterMarkers[$key] = $centroid; // Overwrite the cluster with the single point.
}

关于php - 服务器端集群谷歌地图标记,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4862978/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com