Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/google-maps/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 如何在google map v2上显示仅在特定位置半径范围内的标记?_Android_Google Maps - Fatal编程技术网

Android 如何在google map v2上显示仅在特定位置半径范围内的标记?

Android 如何在google map v2上显示仅在特定位置半径范围内的标记?,android,google-maps,Android,Google Maps,比如说,我在地图上做了很多制造商。 但是,当我单击一个按钮时,我只想显示当前位置半径(1公里)内的标记,并忽略其他所有内容。可能吗? 我只是不想从SQLite中提取每一个标记,并验证它们是否包含在1公里之内,因为验证数百万个标记会降低我认为的应用程序性能。因此,如果可能的话,我只想在视图层中进行操作。是的,当然这是完全可能的。一个可能的解决方案是,当按下按钮时,遍历标记数组并计算从当前位置到标记的距离。如果大于1km,则将标记设置为false,如下所示: marker.setVisible(fa

比如说,我在地图上做了很多制造商。 但是,当我单击一个按钮时,我只想显示当前位置半径(1公里)内的标记,并忽略其他所有内容。可能吗?
我只是不想从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()?不,以前从未听说过。