Android 如何在google map v2上显示仅在特定位置半径范围内的标记?
比如说,我在地图上做了很多制造商。 但是,当我单击一个按钮时,我只想显示当前位置半径(1公里)内的标记,并忽略其他所有内容。可能吗?Android 如何在google map v2上显示仅在特定位置半径范围内的标记?,android,google-maps,Android,Google Maps,比如说,我在地图上做了很多制造商。 但是,当我单击一个按钮时,我只想显示当前位置半径(1公里)内的标记,并忽略其他所有内容。可能吗? 我只是不想从SQLite中提取每一个标记,并验证它们是否包含在1公里之内,因为验证数百万个标记会降低我认为的应用程序性能。因此,如果可能的话,我只想在视图层中进行操作。是的,当然这是完全可能的。一个可能的解决方案是,当按下按钮时,遍历标记数组并计算从当前位置到标记的距离。如果大于1km,则将标记设置为false,如下所示: marker.setVisible(fa
我只是不想从SQLite中提取每一个标记,并验证它们是否包含在1公里之内,因为验证数百万个标记会降低我认为的应用程序性能。因此,如果可能的话,我只想在视图层中进行操作。是的,当然这是完全可能的。一个可能的解决方案是,当按下按钮时,遍历标记数组并计算从当前位置到标记的距离。如果大于1km,则将标记设置为false,如下所示:
marker.setVisible(false)代码>
查看此网页以了解单击时隐藏标记的示例(原理相同,但您必须稍微调整逻辑):您可以像这样检查可见区域
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;
}
现在只在该区域添加标记,然后从阵列中删除其余标记,这样会更快。我认为您无法从视图层执行此操作。
所有解决方案将在所有标记集上进行完整迭代
最好通过特定查询从sqlite获取它们。
比如:
select * from markers
where lat between 35.45 and 35.46
and lng between 55.11 and 55.13
当然,这会找到正方形区域,但您理解这一点。
如果有适当的索引,它将比所有标记检查好得多
不管怎样,如果您找到任何解决方案,请将其张贴在这里。因此,我需要检查所有标记,好吗?正如我之前所说,标记可能有近百万个。只有普通的移动处理器才能满足这么多制造商的需求吗?我不需要整个地区。我只需要1公里半径。然后检查这个链接没有尝试,但可能会帮助你。好的,我会发布它。现在我正在做该项目的另一部分。我知道这是一个旧线程,但你有什么结果吗?@Red m,没有,我让我的老板从服务器端(即drupal7)计算它,因为我无法解决这个问题。我只需要向REST Api发送一个位置。您是否尝试过使用location.distanceBetween()或SphereCalutil.ComputedDistancebetween()?不,以前从未听说过。