首先,您需要为您的地图选择一个提供商。
我会说谷歌地图是一个好的开始,正如你在标签中建议的那样,但要注意,它可能在一些没有播放服务的中国设备上不可用。
您可以按照此处的文档快速入门
https://developers.google.com/maps/documentation/android/
关于您想在地图上放置的图钉数量,我认为显示很多图钉没有问题,您只需在用户缩小时对标记进行分组,这样您就不会有 10 个图钉重叠。
因此,如果在相当放大的状态下,用户单击一组标记,您可以显示一个对话框来选择城市。
如果用户放大很多并单击特定图钉,则您可以开始活动。
您主要关心的是监听缩放级别的变化,如下所示:
mMap.setOnCameraChangeListener(new OnCameraChangeListener() {
private float currentZoom = -1;
@Override
public void onCameraChange(CameraPosition pos) {
if (pos.zoom != currentZoom){
currentZoom = pos.zoom;
// do you action here
}
}
});
致谢:https://stackoverflow.com/a/15046761/689710
然后,您可以创建列表地图,地图的键将是自定义纬度/经度对象。我们称它为 Pin。 Pin 为其提供了一个自定义 isCloseTo 方法(在 params 中获取缩放级别和其他 Pin 对象)。
For each city you want to add on the map
For each key in the map
If the Pin object of your city isCloseTo the Pin key of the map
Add it to the list for that key
Else
Add a new Map entry with you city Pin as key and a list with your city as value
你的 Pin.isCloseTo 方法会有点类似:
https://stackoverflow.com/a/18170277/689710
根据“dist”返回和您的缩放级别返回真或假。
处理完所有城市后,您可以浏览地图并为每个 Pin 键创建一个标记。
在放大状态下,您将拥有一个包含仅包含一项的列表的地图,但我认为这不是什么大问题。