Мне нужно сделать MapView от osmdroid, как в навигаторе. Водитель едет по автомобилю по маршруту, который был взят с сервера. Карта должна быть повернута для него, поскольку маршрут всегда находился перед его точкой на карте. Проблема в том, что я не могу получить прямой угол для каждого вращения. Иногда это работает, иногда нет. И как определить поворот будет, например, на 1 метр? Может быть, это какая-то библиотека или классы в osmdroid, которые могут помочь мне решить эти проблемы?Поверните MapView в osmdroid по маршруту
0
A
ответ
0
Я нашел решение. Этот метод вычисляет меня правильно, чтобы повернуть мою карту. Я сократил маршрут до прямых. Когда текущее местоположение находится рядом с следующей строкой, я вызываю этот метод
public double rotateToNextCheckPoint() {
int lineId = OfferPreference.getInstance().getCurrentLineId();
if (rotates != null && lineId >= 0 && road.mRouteHigh.size() > 0) {
if (lineId < (rotates.size() - 1)) {
GeoPoint nextPoint = rotates.get(lineId).getLast();
GeoPoint currPoint = rotates.get(lineId).getFirst();
if (nextPoint == null || currPoint == null) {
return 0;
}
double lat1 = Math.toRadians(currPoint.getLatitude());
double lon1 = Math.toRadians(currPoint.getLongitude());
double lat2 = Math.toRadians(nextPoint.getLatitude());
double lon2 = Math.toRadians(nextPoint.getLongitude());
double cos1 = Math.cos(lat1);
double cos2 = Math.cos(lat2);
double sin1 = Math.sin(lat1);
double sin2 = Math.sin(lat2);
double delta = lon2 - lon1;
double deltaCos = Math.cos(delta);
double deltaSin = Math.sin(delta);
double x = (cos1 * sin2) - (sin1 * cos2 * deltaCos);
double y = deltaSin * cos2;
double z = Math.toDegrees(Math.atan((-y/x)));
if (x < 0) {
z += 180;
}
double z2 = (z + 180) % 360 - 180;
z2 = -Math.toRadians(z2);
double angleRad = z2 - (Math.PI * 2 * Math.floor(z2/(2 * Math.PI)));
double angle = Math.toDegrees(angleRad);
rotationGestureOverlay.onRotate(-(float) angle, false);
return angle;
}
}
return 0;
}
0
Я думаю, что лучшее, что вы собираетесь сделать, это ориентировать карту на основе компаса и/или gps. Для этого Osmdroid не имеет ничего встроенного.
Когда вы получаете маршрут с сервера, можете ли вы рассчитать, на какой ноге вы находитесь? Если это так, вы должны выяснить, когда нужно поворачивать карту.