Android 如何将对象与Google Maps标记关联?
我正在构建一个Android GPS应用程序,根据用户当前位置显示最近的位置。我使用的是MapFragment,我将标记放在地图上,就像在异步任务中一样:Android 如何将对象与Google Maps标记关联?,android,object,location,google-maps-markers,google-maps-android-api-2,Android,Object,Location,Google Maps Markers,Google Maps Android Api 2,我正在构建一个Android GPS应用程序,根据用户当前位置显示最近的位置。我使用的是MapFragment,我将标记放在地图上,就像在异步任务中一样: protected void onPostExecute(Void result) { super.onPostExecute(result); for(int i = 0; i < list.size(); i++) { HashMap<String,String> locati
protected void onPostExecute(Void result) {
super.onPostExecute(result);
for(int i = 0; i < list.size(); i++)
{
HashMap<String,String> location = new HashMap<String,String>();
location = list.get(i);
String type = location.get("type");
int marker = getTypeDrawable(type);
LatLng position = new LatLng(Float.parseFloat(location.get("lat")), Float.parseFloat(location.get("long")));
map.addMarker(new MarkerOptions()
.position(position)
.title(location.get("name"))
.snippet(location.get("distance") + location.get("type"))
.icon(BitmapDescriptorFactory.fromResource(marker)));
System.out.println(list.get(i));
}
Toast.makeText(MainActivity.this, "Finished retrieving nearby locations",
Toast.LENGTH_SHORT).show();
}
您需要选择能够唯一标识标记和位置的内容。也许这就是您在标记上设置的标题(您的位置中会有一些对应的字符串)或Lat/Lng组合。当用户点击一个标记时,您将在您的方法中收到该标记,您从标记读取标题或lat/lng,并从您的位置查找相应的位置。例如,您可以遍历位置的HashMap并检查该位置是否与标记具有相同的lat/lng,然后您就拥有了与标记对应的位置
当然有更有效的方法,但你知道了 给定所需方法的格式,我认为您可以使用标记的哈希代码作为访问位置的键。我自己还没有试过,但我下面的想法应该行得通(而且更有效)。 首先,您必须更改添加标记的方式,以:
Marker locationMarker = map.addMarker(new MarkerOptions()
.position(position)
.title(location.get("name"))
.snippet(location.get("distance") + location.get("type"))
.icon(BitmapDescriptorFactory.fromResource(marker)));
这确保您可以访问添加的标记对象。然后,使用整数作为键的HashMap
,以及位置作为结果对象。使用标记的hashcode键存储位置,您可以使用:marker.hashcode()访问该位置代码>
我通常使用getTag()
/setTag()
方法来保存对象引用,但遗憾的是Marker类没有标记:(
这种方法的一个可能的警告是,哈希代码可能会在两个标记之间发生冲突。我不知道这种情况的可能性有多大,这将是一个需要研究/测试的问题。是的,我考虑过这一点,但它似乎非常有效。不必如此,为保存两个字符串的位置和类abov创建一个小POJO制作一个HashMap,然后你可以用LatLng键直接查找该位置。嗯,这两个字符串应该是什么?我来试一试我不知道你的位置到底是什么样的,我想你有一些名字,一些文本,一个Id,Lat和Lon或者其他什么。我想说的是有一个HashMap,1.一个识别键和2.你的位置在对象上,这样您可以在点击标记时轻松查找对象。好的,那么如果执行marker.getId()然后执行hashmap.put(markerID,locationObject)?
Marker locationMarker = map.addMarker(new MarkerOptions()
.position(position)
.title(location.get("name"))
.snippet(location.get("distance") + location.get("type"))
.icon(BitmapDescriptorFactory.fromResource(marker)));