我正在创建一个Android
应用,需要在X公里后找到同一路线上的坐标。
我有两个坐标x1,y1
& x2,y2
在路上行驶。现在,我的要求是在同一条道路上约3公里(即x3,y3
之后的坐标,而不是x2,y2
和x1,y1
之间的坐标)找到坐标x2,y2
。
如何实现这一目标?
答案 0 :(得分:8)
如果您知道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 Stackoverflow answer的Javascript方法。
如果您希望点在同一条路上,则可以结帐this PHP answer。