在没有目的地的 Google 地图上 x 公里后获取经纬度?
Get Latitude Longitude after x kilometer on Google Map without destination?
我正在创建一个 Android
应用程序,它需要在 X 公里后找到同一路线上的坐标。
我在一条路上有两个坐标 x1,y1
和 x2,y2
。现在,我的要求是在同一条道路上大约 3 公里后找到坐标 x3,y3
(即 x2,y2
之后而不是 x1,y1
和 x2,y2
之间的坐标)。
如何实现?
如果知道bearing,就可以算出目的地坐标
示例代码:
private LatLng getDestinationPoint(LatLng source, double brng, double dist) {
dist = dist / 6371;
brng = Math.toRadians(brng);
double lat1 = Math.toRadians(source.latitude), lon1 = Math.toRadians(source.longitude);
double lat2 = Math.asin(Math.sin(lat1) * Math.cos(dist) +
Math.cos(lat1) * Math.sin(dist) * Math.cos(brng));
double lon2 = lon1 + Math.atan2(Math.sin(brng) * Math.sin(dist) *
Math.cos(lat1),
Math.cos(dist) - Math.sin(lat1) *
Math.sin(lat2));
if (Double.isNaN(lat2) || Double.isNaN(lon2)) {
return null;
}
return new LatLng(Math.toDegrees(lat2), Math.toDegrees(lon2));
}
示例用法:
double radiusInKM = 10.0;
double bearing = 90;
LatLng destinationPoint = getDestinationPoint(new LatLng((25.48, -71.26), bearing, radiusInKM);
或者您可以在 pointA 和 pointB 之间使用航向而不是方位:
LatLng destinationPoint = getDestinationPoint(new LatLng(37.4038194,-122.081267), SphericalUtil.computeHeading(new LatLng(37.7577,-122.4376), new LatLng(37.4038194,-122.081267)), radiusInKM);
SphericalUtil.computeHeading(p1, p2);
方法来自 Android Google Maps Utility library.
这是基于 this Whosebug answer 中的 Javascript 方法。
如果你想要在同一条路上的点,你可以检查this PHP answer。
我正在创建一个 Android
应用程序,它需要在 X 公里后找到同一路线上的坐标。
我在一条路上有两个坐标 x1,y1
和 x2,y2
。现在,我的要求是在同一条道路上大约 3 公里后找到坐标 x3,y3
(即 x2,y2
之后而不是 x1,y1
和 x2,y2
之间的坐标)。
如何实现?
如果知道bearing,就可以算出目的地坐标
示例代码:
private LatLng getDestinationPoint(LatLng source, double brng, double dist) {
dist = dist / 6371;
brng = Math.toRadians(brng);
double lat1 = Math.toRadians(source.latitude), lon1 = Math.toRadians(source.longitude);
double lat2 = Math.asin(Math.sin(lat1) * Math.cos(dist) +
Math.cos(lat1) * Math.sin(dist) * Math.cos(brng));
double lon2 = lon1 + Math.atan2(Math.sin(brng) * Math.sin(dist) *
Math.cos(lat1),
Math.cos(dist) - Math.sin(lat1) *
Math.sin(lat2));
if (Double.isNaN(lat2) || Double.isNaN(lon2)) {
return null;
}
return new LatLng(Math.toDegrees(lat2), Math.toDegrees(lon2));
}
示例用法:
double radiusInKM = 10.0;
double bearing = 90;
LatLng destinationPoint = getDestinationPoint(new LatLng((25.48, -71.26), bearing, radiusInKM);
或者您可以在 pointA 和 pointB 之间使用航向而不是方位:
LatLng destinationPoint = getDestinationPoint(new LatLng(37.4038194,-122.081267), SphericalUtil.computeHeading(new LatLng(37.7577,-122.4376), new LatLng(37.4038194,-122.081267)), radiusInKM);
SphericalUtil.computeHeading(p1, p2);
方法来自 Android Google Maps Utility library.
这是基于 this Whosebug answer 中的 Javascript 方法。
如果你想要在同一条路上的点,你可以检查this PHP answer。