緯度と経度のoverview_pathグーグルマップを更新する

FedePrado

誰かが私がグーグルマップAPIv3で持っている小さな問題で私を助けてくれることを願っています。

出発地と目的地を選択できるウェブページを開発しており、ルートとすべての緯度と経度の座標を計算し、マーカーを移動できます。

問題は、マーカーを移動するときに、[座標]パネルを新しい値で更新したいのですが、更新されないことです。

誰かが助けてくれることを願って、コードと画像のペアを追加しています。

どうもありがとう!

<script src="https://maps.googleapis.com/maps/api/js?v=3.exp&signed_in=true"></script>
<script>

    var rendererOptions = {
        draggable: true
    };
    var directionsDisplay = new google.maps.DirectionsRenderer(rendererOptions);;
    var directionsService = new google.maps.DirectionsService();
    var map;

    var trucka = new google.maps.LatLng(21.984797, -102.27668);

    function initialize() {

        var mapOptions = {
            zoom: 7,
            center: trucka
        };
        map = new google.maps.Map(document.getElementById('map-canvas'), mapOptions);
        directionsDisplay.setMap(map);
        //directionsDisplay.setPanel(document.getElementById('directionsPanel'));
        directionsDisplay.setPanel(document.getElementById('hola'));


        google.maps.event.addListener(directionsDisplay, 'directions_changed', function () {
            computeTotalDistance(directionsDisplay.getDirections());
        });

        calcRoute();
    }

    function calcRoute() {
        alert('carajo');
        var lat = document.getElementById('hdnLatitudOrigen').value;
        var lon = document.getElementById('hdnLongitudOrigen').value;
        var request = {
            origin: new google.maps.LatLng(lat, lon),
            destination: new google.maps.LatLng(document.getElementById('hdnLatitudDestino').value, document.getElementById('hdnLongitudDestino').value),
            /* waypoints: [
                 { location: new google.maps.LatLng(document.getElementById('hdnLatitudParada1').value, document.getElementById('hdnLongitudParada1').value) },
                 { location: new google.maps.LatLng(document.getElementById('hdnLatitudParada2').value, document.getElementById('hdnLongitudParada2').value) },
                 { location: new google.maps.LatLng(document.getElementById('hdnLatitudParada3').value, document.getElementById('hdnLongitudParada3').value) },
                 { location: new google.maps.LatLng(document.getElementById('hdnLatitudParada4').value, document.getElementById('hdnLongitudParada4').value) },
                 { location: new google.maps.LatLng(document.getElementById('hdnLatitudParada5').value, document.getElementById('hdnLongitudParada5').value) }
             ],*/
            travelMode: google.maps.TravelMode.DRIVING,
            provideRouteAlternatives: true,
            avoidHighways: false,
            avoidTolls: false
        };
        directionsService.route(request, function (response, status) {
            if (status == google.maps.DirectionsStatus.OK) {
                directionsDisplay.setDirections(response);
                if (response.routes && response.routes.length > 0) {
                    var routes = response.routes;
                    for (var j = 0; j < routes.length; j++) {
                        var points = routes[j].overview_path;
                        var ul = document.getElementById("vertex");
                        for (var i = 0; i < points.length; i++) {
                            var li = document.createElement('li');
                            li.innerHTML = getLiText(points[i]);
                            ul.appendChild(li);
                        }
                    }
                }
            }
        });
    }

    function getLiText(point) {
        var lat = point.lat(),
            lng = point.lng();
        return "lat: " + lat + " lng: " + lng;
    }

    function computeTotalDistance(result) {
        var total = 0;
        var myroute = result.routes[0];
        for (var i = 0; i < myroute.legs.length; i++) {
            total += myroute.legs[i].distance.value;
        }
        total = total / 1000.0;
        document.getElementById('total').innerHTML = total + ' km';
    }

    google.maps.event.addDomListener(window, 'load', initialize);

</script>

<div id="map-canvas" style="float: left; width: 70%; height: 100%"></div>
<div id="hola">
    <label>Puntos</label>
    <ul id="vertex">
    </ul>
</div>
<div id="directionsPanel" style="float: right; width: 30%; height 100%">
    <p>Total Distance: <span id="total"></span></p>
</div>

元のルート 新しいルート

geocodezip

「directions_changed」イベントのDirectionsRendererオブジェクトにリスナーを追加する必要があります。次に、の内容を削除して<ul>、新しいルートから再作成します。

google.maps.event.addListener(directionsDisplay, 'directions_changed', updateInfo);
updateInfo();

function updateInfo() {
    var route = directionsDisplay.getDirections().routes[0];
    // var routes = response.routes;
    var points = route.overview_path;
    var ul = document.getElementById("vertex");
    var elems = ul.getElementsByTagName("li")
    for (var i=0; i<elems.length; i++) {
        elems[i].parentNode.removeChild(elems[i]);
    }
    for (var i = 0; i < points.length; i++) {
        var li = document.createElement('li');
        li.innerHTML = getLiText(points[i]);
        ul.appendChild(li);
    }
}

働くフィドル

作業コードスニペット:

//Fresnillo, Zac., Mexico (23.1709291, -102.86218580000002)
//Zacatecas, Zac., Mexico (22.7709249, -102.58325389999999)
var rendererOptions = {
    draggable: true
};
var directionsDisplay = new google.maps.DirectionsRenderer(rendererOptions);
var directionsService = new google.maps.DirectionsService();
var map;

var trucka = new google.maps.LatLng(21.984797, -102.27668);

function initialize() {

    var mapOptions = {
        zoom: 7,
        center: trucka
    };
    map = new google.maps.Map(document.getElementById('map-canvas'), mapOptions);
    directionsDisplay.setMap(map);
    //directionsDisplay.setPanel(document.getElementById('directionsPanel'));
    directionsDisplay.setPanel(document.getElementById('hola'));


    google.maps.event.addListener(directionsDisplay, 'directions_changed', function () {
        computeTotalDistance(directionsDisplay.getDirections());
    });

    calcRoute();
}

function calcRoute() {
    // alert('carajo');
    var lat = document.getElementById('hdnLatitudOrigen').value;
    var lon = document.getElementById('hdnLongitudOrigen').value;
    var request = {
        origin: new google.maps.LatLng(lat, lon),
        destination: new google.maps.LatLng(document.getElementById('hdnLatitudDestino').value, document.getElementById('hdnLongitudDestino').value),
        /* waypoints: [
                 { location: new google.maps.LatLng(document.getElementById('hdnLatitudParada1').value, document.getElementById('hdnLongitudParada1').value) },
                 { location: new google.maps.LatLng(document.getElementById('hdnLatitudParada2').value, document.getElementById('hdnLongitudParada2').value) },
                 { location: new google.maps.LatLng(document.getElementById('hdnLatitudParada3').value, document.getElementById('hdnLongitudParada3').value) },
                 { location: new google.maps.LatLng(document.getElementById('hdnLatitudParada4').value, document.getElementById('hdnLongitudParada4').value) },
                 { location: new google.maps.LatLng(document.getElementById('hdnLatitudParada5').value, document.getElementById('hdnLongitudParada5').value) }
             ],*/
        travelMode: google.maps.TravelMode.DRIVING,
        provideRouteAlternatives: true,
        avoidHighways: false,
        avoidTolls: false
    };
    directionsService.route(request, function (response, status) {
        if (status == google.maps.DirectionsStatus.OK) {
            directionsDisplay.setDirections(response);
            google.maps.event.addListener(directionsDisplay, 'directions_changed', updateInfo);
            updateInfo();
        }
    });
}

function updateInfo() {
    var route = directionsDisplay.getDirections().routes[0];
    // var routes = response.routes;
    var points = route.overview_path;
    var ul = document.getElementById("vertex");
    var elems = ul.getElementsByTagName("li")
    for (var i=0; i<elems.length; i++) {
        elems[i].parentNode.removeChild(elems[i]);
    }
    for (var i = 0; i < points.length; i++) {
        var li = document.createElement('li');
        li.innerHTML = getLiText(points[i]);
        ul.appendChild(li);
    }
}

function getLiText(point) {
    var lat = point.lat(),
        lng = point.lng();
    return "lat: " + lat + " lng: " + lng;
}

function computeTotalDistance(result) {
    var total = 0;
    var myroute = result.routes[0];
    for (var i = 0; i < myroute.legs.length; i++) {
        total += myroute.legs[i].distance.value;
    }
    total = total / 1000.0;
    document.getElementById('total').innerHTML = total + ' km';
}

google.maps.event.addDomListener(window, 'load', initialize);
<script src="https://maps.googleapis.com/maps/api/js"></script>
<input id='hdnLatitudOrigen' value="23.1709291" />
<input id='hdnLongitudOrigen' value="102.86218580" />
<input id='hdnLatitudDestino' value="22.7709249" />
<input id='hdnLongitudDestino' value="102.58325389999999" />
<div id="map-canvas" style="width: 100%; height: 400px"></div>
<div id="hola">
    <label>Puntos</label>
    <ul id="vertex"></ul>
</div>
<div id="directionsPanel" style="width: 30%; height:600px;">
    <p>Total Distance: <span id="total"></span>

    </p>
</div>

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

グーグルマップの経度緯度のggmapCRSを調整する方法

分類Dev

グーグルマップのマーカーに緯度と経度を添付する

分類Dev

未定義の緯度と経度のグーグルマップ

分類Dev

緯度と経度のグーグルマップの最大長

分類Dev

緯度と経度が円の中にあるかどうかを確認するグーグルマップ

分類Dev

グーグルマップの方向APIから緯度と経度の配列を取得する方法

分類Dev

グーグルマップAPIで経度と緯度の変数を使用する

分類Dev

グーグルプレイスマップから緯度と経度を取得する方法は?

分類Dev

Cakephpは緯度と経度のグーグルマップから住所を取得します

分類Dev

MapQuestのマーカードラッグで緯度と経度をキャプチャする

分類Dev

緯度と経度をグーグルマップに渡す。私のコードを修正するのを手伝ってくれる人が必要です

分類Dev

緯度と経度の助けを借りてグーグルマップにルートを描く方法は?

分類Dev

グーグルマップのパス(緯度と経度の配列)を保存するための最良の方法は何ですか

分類Dev

グーグルマップAPIを使用してPHPで現在の緯度と経度を取得するにはどうすればよいですか?

分類Dev

異なる緯度と経度に基づいてグーグルマップのズームレベルを設定します

分類Dev

グーグルマップを使用せずに特定の都市または通りの緯度と経度を取得する方法?

分類Dev

緯度と経度に応じてグーグルマップAPIに焦点を当てる

分類Dev

マーカーを配置する方法/アンドロイドグーグルマップv2に経度と緯度をプロットする

分類Dev

スクリプトでグーグルマップマーカーを作成するために緯度と経度から値を取得する方法は?

分類Dev

緯度と経度がわかっている場合、グーグルマップでマーカーを追加する方法

分類Dev

角度のあるグーグルマップで緯度と経度に双方向でバインドすることは可能ですか?

分類Dev

同一の緯度と経度をグループ化して、Tableauに複数の場所を表示する方法

分類Dev

グーグルマップv3で2点(緯度/経度または住所)サーバー側間のルート距離を検証する

分類Dev

グーグルマップ-緯度と経度または郵便番号のいずれか

分類Dev

緯度と経度を3D球にマッピングする方法

分類Dev

緯度と経度をSASの状態にマッピングします

分類Dev

アプリがReactNativeのバックグラウンドである場合にサービスの緯度と経度を更新する方法

分類Dev

経度と緯度が住所を取得するOpenLayersマップ

分類Dev

アンドロイドで異なる緯度、経度を取得しながらグーグルマップでマーカーを移動する方法

Related 関連記事

  1. 1

    グーグルマップの経度緯度のggmapCRSを調整する方法

  2. 2

    グーグルマップのマーカーに緯度と経度を添付する

  3. 3

    未定義の緯度と経度のグーグルマップ

  4. 4

    緯度と経度のグーグルマップの最大長

  5. 5

    緯度と経度が円の中にあるかどうかを確認するグーグルマップ

  6. 6

    グーグルマップの方向APIから緯度と経度の配列を取得する方法

  7. 7

    グーグルマップAPIで経度と緯度の変数を使用する

  8. 8

    グーグルプレイスマップから緯度と経度を取得する方法は?

  9. 9

    Cakephpは緯度と経度のグーグルマップから住所を取得します

  10. 10

    MapQuestのマーカードラッグで緯度と経度をキャプチャする

  11. 11

    緯度と経度をグーグルマップに渡す。私のコードを修正するのを手伝ってくれる人が必要です

  12. 12

    緯度と経度の助けを借りてグーグルマップにルートを描く方法は?

  13. 13

    グーグルマップのパス(緯度と経度の配列)を保存するための最良の方法は何ですか

  14. 14

    グーグルマップAPIを使用してPHPで現在の緯度と経度を取得するにはどうすればよいですか?

  15. 15

    異なる緯度と経度に基づいてグーグルマップのズームレベルを設定します

  16. 16

    グーグルマップを使用せずに特定の都市または通りの緯度と経度を取得する方法?

  17. 17

    緯度と経度に応じてグーグルマップAPIに焦点を当てる

  18. 18

    マーカーを配置する方法/アンドロイドグーグルマップv2に経度と緯度をプロットする

  19. 19

    スクリプトでグーグルマップマーカーを作成するために緯度と経度から値を取得する方法は?

  20. 20

    緯度と経度がわかっている場合、グーグルマップでマーカーを追加する方法

  21. 21

    角度のあるグーグルマップで緯度と経度に双方向でバインドすることは可能ですか?

  22. 22

    同一の緯度と経度をグループ化して、Tableauに複数の場所を表示する方法

  23. 23

    グーグルマップv3で2点(緯度/経度または住所)サーバー側間のルート距離を検証する

  24. 24

    グーグルマップ-緯度と経度または郵便番号のいずれか

  25. 25

    緯度と経度を3D球にマッピングする方法

  26. 26

    緯度と経度をSASの状態にマッピングします

  27. 27

    アプリがReactNativeのバックグラウンドである場合にサービスの緯度と経度を更新する方法

  28. 28

    経度と緯度が住所を取得するOpenLayersマップ

  29. 29

    アンドロイドで異なる緯度、経度を取得しながらグーグルマップでマーカーを移動する方法

ホットタグ

アーカイブ