簡體   English   中英

按路線旋轉osmdroid中的MapView

[英]Rotate MapView in osmdroid by route

我需要像導航器一樣從osmdroid制作MapView。 駕駛員按照從服務器上走的路線開車。 應該為他旋轉地圖,因為路線始終在他在地圖上的點之前。 問題是我每次旋轉都無法獲得直角。 有時有效,有時無效。 以及如何定義旋轉將以1米為例? 也許,osmdroid中的某些庫或類可以幫助我解決這些問題嗎?

我認為您最好要做的是根據設備指南針和/或gps方向確定地圖的方向。 Osmdroid沒有內置任何東西。

從服務器獲取路線時,可以計算出您正在走哪條路嗎? 如果是這樣,您應該能夠找出何時旋轉地圖。

我找到了解決方案。 此方法為我計算出旋轉地圖的正確度。 我把路線切成直線。 當當前位置在下一行附近時,我調用此方法

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;
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM