我在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根据半径坐标返回该地图的子集。
谢谢。
答案 0 :(得分:0)
通常对于这种类型的问题,R-Tree工作得非常好。基本数据结构描述为on wikipedia
有一些Java实现,请查看java spatial index或this one