php – 服务器端群集谷歌地图标记
发布时间:2020-12-13 17:05:57 所属栏目:PHP教程 来源:网络整理
导读:我想知道 PHP中聚类标记的最快算法是什么? 我只需要集群函数需要的是带有集群obj的输出,它具有属性:lat,lng和size. 然后当然没有聚集的标记,但我似乎无法找到这个的PHP代码,并且必须有一些? 我正在寻找会产生这种结果的代码隐藏? (或者表现得更好). http
我想知道
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); } 然后我的数据被jsonized,但是clustermarkers数组包含所有的markerdata,我想知道如何有效地简单地设置lat,lng和size,而不必在每次添加新标记时重新计算资源需求. 解决方法
基本上$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. } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |