問題描述
我正在創建一個 Android
應用程序,它需要在 X 公里后在同一條路線上找到一個坐標.
I am creating an Android
app which requires finding a coordinate on the same route after X kilometers.
我有兩個坐標 x1,y1
&x2,y2
在路上.現在,我的要求是在大約 3 公里后找到坐標 x3,y3
(即,在 x2,y2
之后的坐標不在 x1,y1
和; x2,y2
) 在同一條路上.
I have two coordinates x1,y1
& x2,y2
on a road. Now, my requirement is to find coordinate x3,y3
after some 3 kilometers (i.e., coordinate after x2,y2
not between x1,y1
& x2,y2
) on the same road.
如何做到這一點?
推薦答案
如果你知道 軸承,可以計算出目的地坐標.
If you know the bearing, you can calculate the destination coordinate.
示例代碼:
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 之間使用航向而不是方位:
Or you can use heading between your pointA and pointB instead of bearing:
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 地圖實用程序庫.
這是基于 this Stackoverflow answer 中的 Javascript 方法.
This is based on the Javascript method from this Stackoverflow answer.
如果您想在同一條道路上找到該點,您可以查看此 PHP 答案.
If you want the point on same road, you might checkout this PHP answer.
這篇關于在沒有目的地的谷歌地圖上獲取 x 公里后的緯度經度?的文章就介紹到這了,希望我們推薦的答案對大家有所幫助,也希望大家多多支持html5模板網!