来自LatLng和Radius的Google Places API LatLngBounds

时间:2015-04-09 23:42:09

标签: android google-places-api

我正在使用新的Android地方Api在用户输入时获得自动填充预测。

从我看到的到目前为止,API采用了一个使用两个位置创建的LatLngBounds对象。

有没有办法使用一个LatLng作为中心点和半径来生成LatLngBounds对象?

谢谢。

2 个答案:

答案 0 :(得分:1)

正如Promwo所承诺的,这就是我如何基于单个纬度和经度创建视口。我想要这样做的原因是我的商店定位器脚本从Places API返回的视口中进行搜索,因此如果没有返回视口(很少见,但它会发生)我继续从lat和lng创建一个由地方归来。请注意,我没有使用Android应用程序,这是用于常规网络查看。

console.log("no viewport found so lets spherically compute the bounds");
var sw = google.maps.geometry.spherical.computeOffset(place.geometry.location, 1609, 225);
var ne = google.maps.geometry.spherical.computeOffset(place.geometry.location, 1609, 45);
swlat = sw.lat().toFixed(6);
swlng = sw.lng().toFixed(6);
nelat = ne.lat().toFixed(6);
nelng = ne.lng().toFixed(6);

不确定这对您有用。在我的情况下,半径是固定的,但在你的情况下它听起来虽然它是一个变量,因此你必须将它称为变量。

确定如此编辑:我已将1423更改为1000,表示半径为lilometer。如果你使用公里数,那么1000就是要使用的数字,但如果你使用里程,那么请使用“1609.3440006”。

答案 1 :(得分:0)

感谢@luke_mclachlan,我找到了我在Google地图github上寻找的方法。

https://github.com/googlemaps/android-maps-utils/blob/master/library/src/com/google/maps/android/SphericalUtil.java

以下是我正在寻找的方法:

public static LatLng computeOffset(LatLng from, double distance, double heading) {
        distance /= EARTH_RADIUS;
        heading = toRadians(heading);
        // http://williams.best.vwh.net/avform.htm#LL
        double fromLat = toRadians(from.latitude);
        double fromLng = toRadians(from.longitude);
        double cosDistance = cos(distance);
        double sinDistance = sin(distance);
        double sinFromLat = sin(fromLat);
        double cosFromLat = cos(fromLat);
        double sinLat = cosDistance * sinFromLat + sinDistance * cosFromLat * cos(heading);
        double dLng = atan2(
                sinDistance * cosFromLat * sin(heading),
                cosDistance - sinFromLat * sinLat);
        return new LatLng(toDegrees(asin(sinLat)), toDegrees(fromLng + dLng));
    }

请注意,此处的心脏半径预计为米。

使用此方法,我找到西南(航向= 225)和东北(航向= 45)坐标,然后创建我的LatLongBounds对象。