假设我在地图上制作了很多制作者。 但是当我点击一个按钮时,我想只显示当前位置半径(1km)的标记并忽略其他所有内容。那可能吗? 我只是不想从SQLite中提取每个标记并验证它们是否包含在1km以内,因为验证数百万个标记会降低我认为的应用程序性能。所以,如果可能的话,我只想在视图层中进行。
答案 0 :(得分:1)
我认为你不能从视图层做到这一点 所有解决方案都将对所有标记集进行完全迭代。
更好的方法是通过特定查询从sqlite中获取它们 类似的东西:
select * from markers
where lat between 35.45 and 35.46
and lng between 55.11 and 55.13
当然,这会找到方形区域,但你明白这个想法 使用适当的索引,它将比所有标记检查要好得多。
无论如何,如果你发现任何解决方案,请点击此处。
答案 1 :(得分:0)
是的,当然这是完全可能的。一个可能的解决方案是通过您的标记数组并计算按下按钮时从当前位置到标记的距离。如果它大于1km,则将标记设置为false,如下所示:
marker.setVisible(false);
请参阅此网页,了解在点击时隐藏标记的示例(原理相同,但您必须稍微调整一下逻辑):http://googlemapapitutorial.com/hidemarker.jsp
答案 2 :(得分:0)
您可以检查这样的可见区域
private VisibleArea getVisibleRegion() {
if(mMap!=null){
VisibleRegion region = mMap.getProjection().getVisibleRegion();
LatLngBounds bounds = region.latLngBounds;
VisibleArea visibleArea = new VisibleArea(bounds.northeast.latitude, bounds.northeast.longitude, bounds.southwest.latitude, bounds.southwest.longitude);
return visibleArea;}
return null;
}
现在只在这个区域添加标记,并通过这种方式从数组中删除其余标记,它会更快..