我以前从未在地图api上工作过。我想实现如下图所示的地图。我从Web服务获取数据,使用该数据我可以将事件计数显示在标记上。 基本功能是,一旦用户放大,地图标记将会扩展,因此标记会计数。
我的问题是:
请帮忙。提前谢谢。
答案 0 :(得分:0)
您无需执行任何操作来计算标记并显示其在图片中的显示方式。 Google有一个名为Google Maps Android API utility library
的库你需要的那个叫做
标记聚类 - 处理大量点的显示。 video
答案 1 :(得分:0)
Android-Maps-Utils具有Marker Clustering Utility。以下是步骤:
在build.gradle中添加compile 'com.google.maps.android:android-maps-utils:0.4.3'
。
在您的清单中添加以下权限
<uses-permission android:name="your.package.permission.MAPS_RECEIVE"/>
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="com.google.android.providers.gsf.permission.READ_GSERVICES" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
创建一个类,使您可以将标记的位置设置为LatLng Object。
公共类MarkerItem实现ClusterItem {
private final LatLng mPosition;
public MarkerItem (double lat, double lon) {
mPosition = new LatLng(lat, lon);
}
@Override
public LatLng getPosition() {
return mPosition;
}
在Activity / Fragment
中添加ClusterManager公共类MainActivity扩展FragmentActivity实现OnMapReadyCallback {
private GoogleMap mGoogleMap;
// Declare a variable for the cluster manager.
ClusterManager<MarkerItem> mClusterManager;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
SupportMapFragment supportMapFragment =
(SupportMapFragment) getSupportFragmentManager().findFragmentById(R.id.map);
supportMapFragment.getMapAsync(this);
}
@Override
public void onMapReady(GoogleMap googleMap) {
mGoogleMap = googleMap;
setUpClusterer();
}
private void setUpClusterer() {
// Position the map.
mGoogleMap.moveCamera(CameraUpdateFactory.newLatLngZoom(new LatLng(51.503186, -0.126446), 10));
// Initialize the manager with the context and the map.
// (Activity extends context, so we can pass 'this' in the constructor.)
mClusterManager = new ClusterManager<>(this, mGoogleMap);
// Point the map's listeners at the listeners implemented by the cluster
// manager.
mGoogleMap.setOnCameraChangeListener(mClusterManager);
mGoogleMap.setOnMarkerClickListener(mClusterManager);
// Add cluster items (markers) to the cluster manager.
addItems();
}
/**
* Generate dummy coordinates
*/
private void addItems() {
// Set some lat/lng coordinates to start with.
double lat = 51.5145160;
double lng = -0.1270060;
// Add ten cluster items in close proximity, for purposes of this example.
for (int i = 0; i < 10; i++) {
double offset = i / 60d;
lat = lat + offset;
lng = lng + offset;
MarkerItem offsetItem = new MarkerItem(lat, lng);
mClusterManager.addItem(offsetItem);
}
}
此库自动处理群集部分。
我希望这会有所帮助!
详细信息:请关注this link