我在java / andrdoid上有一个Map <coordinates,=“”markers =“”>。给定一个坐标,有没有办法在半径范围内返回标记

时间:2015-06-05 09:56:19

标签: java android google-maps-markers google-maps-android-api-2 google-maps-api-2

我在java / andrdoid上有一个Map。给定一个坐标,有没有办法在半径范围内返回所有标记。

我解析一个KML文件并以字符串格式获取坐标并将它们转换为

NavigableMap<double[], Marker> map = new TreeMap();
double[] coordinates = ... 
Marker m = ...
map.put(coordinates, googleMap.addMarker(m));

最终我会得到一堆地图,其坐标为键,标记为值。

但这给了我一个

java.lang.ClassCastException: [D is not Comparable
    at java.util.TreeMap.find(TreeMap.java:254)
    at java.util.TreeMap.putInternal(TreeMap.java:240)
    at java.util.TreeMap.put(TreeMap.java:186)

我正在寻找类似于NavigableSet的subMap函数来返回所有标记,给定一个点+半径。

我意识到我可以拥有一个ArrayList并逐一进行比较

 if(distance(Coordinates ,marker.getCoordinates())<=radius)
        marker.setVisbile(true);
..etc..

但我的问题是,是否有这样的Map或HashMap根据半径坐标返回该地图的子集。

谢谢。

1 个答案:

答案 0 :(得分:0)

通常对于这种类型的问题,R-Tree工作得非常好。基本数据结构描述为on wikipedia

有一些Java实现,请查看java spatial indexthis one