1. 程式人生 > >百度地圖之標註物聚合

百度地圖之標註物聚合

//cluster聚合器類 package com.zhl.map; import java.util.ArrayList; import java.util.List; import android.graphics.Bitmap; import android.graphics.Point; import android.graphics.drawable.BitmapDrawable; import android.util.Log; import android.view.LayoutInflater; import android.view.View; import android.widget.TextView; import baidumapsdk.demo.R; import com.baidu.mapapi.cloud.Bounds; import com.baidu.mapapi.map.MapView; import com.baidu.mapapi.map.OverlayItem; import com.baidu.mapapi.utils.DistanceUtil; import com.baidu.platform.comapi.basestruct.GeoPoint; import com.zhl.activity.MarkerClusterActivity; import com.zhl.util.MapUtils; public class Cluster{ private MarkerClusterActivity mMarkCluster; private MapView mMapView; private int mMinClusterSize; private Boolean isAverageCenter; private int mGridSize; private double mDistance; private List<ClusterMarker> mMarkers; public Cluster(MarkerClusterActivity markCluster,MapView mapView ,int minClusterSize,Boolean isAverageCenter ,int mGridSize,double mDistance) { this.mMarkCluster = markCluster; this.mMapView = mapView; this.mMinClusterSize = minClusterSize; this.isAverageCenter = isAverageCenter; this.mGridSize = mGridSize; this.mDistance = mDistance; mMarkers = new ArrayList<ClusterMarker>(); } public List<OverlayItem> createCluster(List<OverlayItem> markerList){ this.mMarkers.clear(); List<OverlayItem> itemList = new ArrayList<OverlayItem>(); for(int i=0;i<markerList.size();i++){ addCluster(markerList.get(i)); } for(int i=0;i<mMarkers.size();i++){ ClusterMarker cm = mMarkers.get(i); setClusterDrawable(cm); OverlayItem oi = new OverlayItem(cm.getmCenter(),cm.getTitle(),cm.getSnippet()); oi.setMarker(cm.getMarker()); itemList.add(oi); } return itemList; } private void addCluster(OverlayItem marker){ GeoPoint markGeo = marker.getPoint(); if(mMarkers.size()==0){ ClusterMarker clusterMarker = new ClusterMarker(marker.getPoint(), marker.getTitle(), marker.getSnippet()); clusterMarker.setMarker(marker.getMarker()); clusterMarker.AddMarker(marker, isAverageCenter); Bounds bound = new Bounds(markGeo.getLatitudeE6(),markGeo.getLongitudeE6(),markGeo.getLatitudeE6(),markGeo.getLongitudeE6()); bound = MapUtils.getExtendedBounds(mMapView, bound, mGridSize); clusterMarker.setmGridBounds(bound); mMarkers.add(clusterMarker); }else{ ClusterMarker clusterContain = null; double distance = mDistance; for(int i=0;i<mMarkers.size();i++){ ClusterMarker clusterMarker = mMarkers.get(i); GeoPoint center = clusterMarker.getmCenter(); double d = DistanceUtil.getDistance(center, marker.getPoint()); if(d<distance){ distance = d; clusterContain = clusterMarker; } } if(clusterContain == null||!isMarkersInCluster(markGeo, clusterContain.getmGridBounds())){ ClusterMarker clusterMarker = new ClusterMarker(marker.getPoint(), marker.getTitle(), marker.getSnippet()); clusterMarker.AddMarker(marker, isAverageCenter); clusterMarker.AddMarker(marker, isAverageCenter); Bounds bound = new Bounds(markGeo.getLatitudeE6(),markGeo.getLongitudeE6(),markGeo.getLatitudeE6(),markGeo.getLongitudeE6()); bound = MapUtils.getExtendedBounds(mMapView, bound, mGridSize); clusterMarker.setmGridBounds(bound); mMarkers.add(clusterMarker); }else{ clusterContain.AddMarker(marker, isAverageCenter); } } } private void setClusterDrawable(ClusterMarker clusterMarker){ View drawableView = LayoutInflater.from(mMarkCluster).inflate( R.layout.drawable_mark, null); TextView text = (TextView) drawableView.findViewById(R.id.drawble_mark); int markNum = clusterMarker.getmMarkers().size(); if(markNum>=2){ text.setText(markNum+""); if(markNum<11){ text.setBackgroundResource(R.drawable.m0); }else if(markNum>10&&markNum<21){ text.setBackgroundResource(R.drawable.m1); }else if(markNum>20&&markNum<31){ text.setBackgroundResource(R.drawable.m2); }else if(markNum>30&&markNum<41){ text.setBackgroundResource(R.drawable.m3); }else{ text.setBackgroundResource(R.drawable.m4); } Bitmap bitmap = MapUtils.convertViewToBitmap(drawableView); clusterMarker.setMarker(new BitmapDrawable(bitmap)); }else{ } } private Boolean isMarkersInCluster(GeoPoint markerGeo,Bounds bound){ if(markerGeo.getLatitudeE6()>bound.leftBottom.getLatitudeE6() &&markerGeo.getLatitudeE6()<bound.rightTop.getLatitudeE6() &&markerGeo.getLongitudeE6()>bound.rightTop.getLongitudeE6() &&markerGeo.getLongitudeE6()<bound.leftBottom.getLongitudeE6()){ return true; } return false; } }

相關推薦

地圖標註聚合

//cluster聚合器類 package com.zhl.map; import java.util.ArrayList; import java.util.List; import android.graphics.Bitmap; import android.graphics.Point; impo

地圖自動提示--autoComplete

esp lan length aid time 下拉 html style log <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8">

地圖API 重新生成點聚合的功能

library RKE doc clu bsp htm net com tail 百度地圖API 重新生成點聚合的功能 學習了:https://blog.csdn.net/u012463017/article/details/53507385 clearMarkers()

地圖九如何在一個地圖上顯示多條導航路線

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!        

地圖在一個地圖上顯示多條導航路線

                package com.njupt.bmap_helloworld;import com.baidu.mapapi.BMapManager;import com.baidu.mapapi.GeoPoint;import com.baidu.mapapi.MKAddrInfo;i

點選地圖新增標註並獲取當前地理名稱

html部分: <div id="allmap"></div> <style type="text/css"> body, html{width: 100%;height: 100%;overflow: hidden;margi

地圖商家標註,查詢附近3000米內的商家並標到地圖

效果圖 <script type="text/javascript" src="http://api.map.baidu.com/api?v=2.0&ak=KEY"></script> <script type="text/javas

地圖定位功能,註冊祕鑰

1.1     百度地圖定位GPS  + WIFI  +  基站1.     GPS定位:是美國軍方提供全球定位系統。5~15米        北斗:中國研發定位系統。目前最先進的定位系統,精度能達到幾釐米        格洛納斯:俄羅斯定位系統,已交於北斗維護。     

地圖鷹眼軌跡

1.1     鷹眼軌跡百度鷹眼是一套集軌跡追蹤、儲存、運算、查詢的完整軌跡開放服務,可幫助開發者管理多達100萬人/車軌跡。使用百度鷹眼,您可以輕鬆開發出適用於車隊監控、車聯網、專車計費、外業人員監管

地圖新增覆蓋物

前面我們關於百度地圖的SDK的部落格已經寫了不少了,不過為了把地圖這個功能做的更完善一些,同時也為了提高自己的技術,我們還是可以在目前所具有的功能之上再新增一些功能。 今天這篇部落格,我就講講如何在地圖上新增覆蓋物。 一,和實現顯示導航的圖示一樣,我們需要例

地圖jsonp獲取位置座標

var lng,lat; var address = "靜安寺"; var url = "http://api.map.baidu.com/geocoder/v2/?address="+address+

地圖鷹眼軌跡V3初探

前言 最近專案中在使用這個,我也才開始接觸這個,所有算是一個分享吧,網上V3的資料又少的可憐,我使用的是MAC,所有以mac為平臺來記錄。其他環境 我會給予連結地址,方便傳送,廢話不多說,開始幹 1.環境搭建 1.1 下載原生的demo

地圖key建立方法

百度地圖 Android SDK是一套基於Android 2.1及以上版本裝置的應用程式介面。 您可以使用該套 SDK開發適用於Android系統移動裝置的地圖應用,通過呼叫地圖SDK介面,您可以輕鬆訪問百度地圖服務和資料,構建功能豐富、互動性強的地圖類應用程式。 百度

Android 地圖sdk 標註圖marker中可以切換顯示不同內容

記錄一個前段時間解決的功能需求 先直接上圖片看看實現後的效果: 具體需求為,在地圖頁上顯示出所有的場站marker之後,點選左側的按鈕可以實現動態切換場站marker中顯示的資料。 實現思路為:構造marker時,icon方法中傳入的引數Bit

地圖API 重新生成點聚合的功能

百度點聚合用來解決載入大量點要素到地圖上產生覆蓋現象的問題,並提高效能。 http://api.map.baidu.com/library/MarkerClusterer/1.2/docs/symbols/BMapLib.MarkerClusterer.html 最基本的

地圖覆蓋物

今天熟悉了一下百度地圖有關覆蓋物的知識,首先,大家來看一下做出來的效果: 我們來看程式碼 一、佈局檔案 <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:androi

怎麼在網頁中插入地圖標註某個地點(簡單版)

注: 1.從本篇開始,我就把這些年積攢的技術都分享出來,有些可能已經過時,但是還是希望能幫到一些人。 2.程式設計師成長之路小說,還是籌備中,敬請期待。 3.這些文章都會和新浪部落格同步。 先看

地圖定自己當前的位置

}/**** 第一步,初始化LocationClient類 此處需要注意:LocationClient類必須在主執行緒中宣告,需要Context型別的引數。 Context需要時全程序有效的Context,推薦用getApplicationConext獲取全程序有效的Context。* */public vo

地圖建立標註marker,最優縮放級別

 百度地圖建立marker座標,新增自定義標註: //首先要引入百度api <script type="text/javascript" src="http://api.map.baidu.com/api?v=2.0& ak=你的金鑰&s=1">

地圖API詳解地圖標註(一)

本文將向大家介紹百度地圖API的標註(Marker)的使用方法和一些實現細節。 標註概述 標註(Marker)是用來表示一個點位置的可見元素,每個標註自身都包含地理資訊。比如你在西單商場位置添加了一個標註,不論地圖移動、縮放,標註都會跟隨一起移動,保證其始終指向正確的地理位置。 從上面的圖可以看