[自动完成矩形边界中的Android位置偏差

问题描述 投票:0回答:1

我希望自动填充结果仅显示距离用户位置1公里。RectangularBounds有办法:

setLocationBias(RectangularBounds.newInstance(
new LatLng(-33.880490, 151.184363),
new LatLng(-33.858754, 151.229596)))
  1. 这里只有2分。它如何形成矩形?

  2. 例如,如果用户Latlng是32.0000000,30.0000000,我如何在他周围做1公里的RectangularBounds?

java android autocomplete location
1个回答
0
投票

关于第一个问题,如果您查看docs

RectangularBounds newInstance(LatLng西南,LatLng东北)

是矩形的,因为它表示两个坐标:西南和东北,通常称为边界框(或简称为bbox),是这两个坐标内的区域。

第二个问题不那么简单,并且有多种解决方法。

一种方法是找出一种向坐标添加距离的方法,该方法始终是近似的。对于此LatLng地理坐标,您可以使用:

public static LatLng getCoordinate(double lat0, double lng0, long dy, long dx) {
    double lat = lat0 + (180 / Math.PI) * (dy / 6378137);
    double lng = lng0 + (180 / Math.PI) * (dx / 6378137) / Math.cos(lat0);
    return new LatLng(lat, lng);
}

其中lat0和long0是原始坐标,dx和dy是以米为单位的距离(因为地球半径以米6378137为单位设置。]]

现在您可以创建一个原始点+-1000米的近似边界框。假设您设置为起点的点是纬度-33.869622和经度151.206979,则bbox为:

RectangularBounds.newInstance(
    getCoordinate(-33.869622, 151.206979, 1000, 1000),
    getCoordinate(-33.869622, 151.206979, -1000, -1000))

这是您可以用于api调用的bbox。

如果您仍然需要更精确的1km距离并丢弃该正方形(bbox)内但不在1km半径的圆内的点,则可以在返回结果或显示结果之前用checking the distance to the original point过滤结果。] >

© www.soinside.com 2019 - 2024. All rights reserved.