我正在使用新的Android地方Api在用户输入时获得自动填充预测。
从我看到的到目前为止,API采用了一个使用两个位置创建的LatLngBounds对象。
有没有办法使用一个LatLng作为中心点和半径来生成LatLngBounds对象?
谢谢。
答案 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上寻找的方法。
以下是我正在寻找的方法:
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对象。