第一个问题,如果你看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。
如果你有一个名为 currentlocation 的实例变量,这将是:
RectangularBounds.newInstance(
getCoordinate(this.currentlocation.getLatitude(), this.currentlocation.getLongitude(), -1000, -1000),
getCoordinate(this.currentlocation.getLatitude(), this.currentlocation.getLongitude(), 1000, 1000))
如果您仍然需要更精确的 1 公里距离并丢弃在该正方形 (bbox) 内但在半径为 1 公里的圆之外的点,您可以在返回结果或显示结果之前通过 checking the distance to the original point 过滤结果。
出于好奇
我能想到的另一种方法是将坐标的投影更改为另一个以使计算更容易,如果将坐标转换为墨卡托,x 值加 1000 会增加 1 公里,y 值加 1000 也会增加1 公里,因为它使用米作为单位,但是你应该转换回 original projection(与 LatLng 一起使用),因为它是 api 正在使用的,所以我认为它不值得,但它应该也可以工作。