加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

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.
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读