Google Maps APIを使用してマーカーをスムーズに移動するにはどうすればよいですか?

怒っているB

マーカーの位置がすぐに変わると、マーカーが急激にピクピクします。transiton: 1s linearマーカーがスムーズに移動できるように、Google Maps APIにCSS相当するものはありますか?これが私のマップ初期化コードです:

var marker;

    function initMap() {
    // Map initialization
        var map = new google.maps.Map(document.getElementById('map'), {
            zoom: 1,
            center: { lat: 59.325, lng: 18.070 }
        });
    // Marker settings
        marker = new google.maps.Marker({
            map: map,
            draggable: true,
            animation: google.maps.Animation.DROP,
            position: { lat: 59.327, lng: 18.067 }
        });
    // Marker moves every second
        setInterval( () => {
            moveMarker();
        }, 1000);    
    }

    var a = 1;
    function moveMarker() {
        marker.setPosition(new google.maps.LatLng(a++, a++));
    }
#map {
  width: 500px;
  height: 500px;
}
<div id="map"></div>
<script async defer src="https://maps.googleapis.com/maps/api/js?key=AIzaSyCJYSNYPAfcm8ZV4pi8nj6fbeOtbQQpr7Y&callback=initMap"></script>

マクマーフィー

それは非常に実行可能ですが、手間がかかります。重要なのは、Googleマップがマーカーに使用しているDIVを特定することです(タッチイベントに対して透過的なものが2つあります)調査は自動的に行われ、実際に理解する必要があるのは1回だけです。

完全な例はここにあります。ヘンゼルとグレーテルが地図上をスムーズに移動する様子をご覧ください。そして、遅延がある場合、移行時間は合体します。

私のBrotkrumenUltimate Webアプリのすべてのコードはここにあります。ほとんどの場合、HandleMap.jsファイルに関心がありますが、aaa_readme.txtがあります。

コードの一部は次のとおりです。-

function showJourney(){
    map.setZoom(map.getZoom());
    map.setOptions({gestureHandling: "none"});
    zoomOut.style.display = "none";
    zoomIn.style.display  = "none";

    hat.setPosition(
        new google.maps.LatLng(
                lastPos.coords.latitude,
                lastPos.coords.longitude)); 
    hat.setVisible(true);
    hat.setAnimation(bounce);

    HandG.setPosition(
        new google.maps.LatLng(
                firstPos.coords.latitude,
                firstPos.coords.longitude)); 
    HandG.setVisible(true);

    map.panTo(path[0]); 
    google.maps.event.trigger(map, 'resize');

    if (document.querySelectorAll(MARKER_SELECTOR).length == 0){
        observer.observe(mapDiv, {
                        childList     : true,
                        subtree       : true ,
                        attributes    : true ,
                        characterData : false
                        })
    } else {
        setTimeout(plotTrip,0);
    }
}
function plotTrip(){
    nextFunc = plotStep;
    hat.setAnimation(bounce);
    HandG.setPosition(path[0]);
    dirPoly.setVisible(true);       
    progressPath = [];
    progressPath.push(path[0]);
    dirPoly.setPath(path);
    stepPoly.setPath(progressPath);
    stepPoly.setVisible(true);
    currStep = 1;
    markerDivs = [];
    var markerImgs = document.querySelectorAll(MARKER_SELECTOR);
    for (var i=0; i<markerImgs.length; i++){
        console.log(markerImgs[i].src);
        markerDivs[i] = markerImgs[i].parentNode;
        markerDivs[i].style.transitionDuration = "0s";
        markerDivs[i].style.transitionProperty = "left, top";
        markerDivs[i].style.transitionTimingFunction = "linear";
    }

    setTimeout(plotStep,0);
    abort = false;
    btn.value = "Cancel";
    btn.disabled = false;
}
function plotStep(){
    if (abort) return;

    if (legs[currStep].didLoiter){
        countDown = legs[currStep].restTime;
        infoWindow.setContent(
            "<div id='waitDiv'><span>Waiting</span></div>");
        infoWindow.open(map,HandG);
        showInterval();
    } else {
        plotIt();
    }
}
function showInterval(){
    if (abort) return;

    infoWindow.setContent(
        "<div id='waitDiv'><span>Waiting "+deltaDate(countDown)+"</span></div>");
    countDown -= (ONE_SEC * multiSpeed);
    if (countDown < 1){
        infoWindow.close(); 
        plotIt();
    } else {
        setTimeout(showInterval, ONE_SEC);
    }
}
function plotIt(){
    if (abort) return;

    progressPath.push(path[currStep]);
    stepPoly.setPath(progressPath);
    map.panTo(path[currStep]);
    var transitionMS = legs[currStep].duration / multiSpeed;
    for (var i=0; i<markerDivs.length; i++){
        markerDivs[i].style.transitionDuration = transitionMS + "ms";
    }
    HandG.setPosition(path[currStep])

    if (++currStep >= path.length)
        nextFunc = cleanUp;

    plotTimer = setTimeout(nextFunc,transitionMS);
}
function cleanUp(){
    infoWindow.close();
    hat.setAnimation();
    btn.value = "Replay";
    btn.disabled = false;
    clearTimeout(plotTimer);
    for (var i=0; i<markerDivs.length; i++){
        markerDivs[i].style.transitionDuration = "0s";
    }
    HandG.setPosition(
        new google.maps.LatLng(
                lastPos.coords.latitude,
                lastPos.coords.longitude)); 
    HandG.setVisible(false);
    map.setOptions({gestureHandling: "cooperative"});
    zoomIn.style.display  = "";
    zoomOut.style.display = "";
    if (canTalk && !abort)
        speechSynthesis.speak(finish);
}
function waitForMarker(mutations, myInstance) {
    outer:
    for (var i=0; i<mutations.length; i++){
        if (mutations[i].type           == "attributes" && 
            mutations[i].target.tagName == "IMG"        &&
            mutations[i].target.src.toLowerCase().indexOf(MARKER_SRC) != -1){
            console.log("result")
            myInstance.disconnect();
            setTimeout(plotTrip,0)
            break outer;
        }
        if (mutations[i].type != "childList" ||
            mutations[i].addedNodes.length   == 0) 
            continue;
        for (var j=0; j<mutations[i].addedNodes.length; j++) {
            var node = mutations[i].addedNodes[j];
            if (node.tagName == "DIV" && node.firstChild && node.firstChild.tagName == "IMG" &&
                node.firstChild.src.toLowerCase().indexOf(MARKER_SRC) != -1){
                console.log(node.firstChild.src);
                myInstance.disconnect();
                setTimeout(plotTrip,0)
                break outer;
            }
        }
    }
}       

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

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

編集
0

コメントを追加

0

関連記事

分類Dev

google maps API:マーカーをクリック可能にするにはどうすればよいですか?

分類Dev

Google Maps SDK(Swift / iOS)を使用して、マップマーカーの周囲に半径を描画するにはどうすればよいですか?

分類Dev

Google Maps API:forループで複数のマーカーにズームインして異なる中心を設定するにはどうすればよいですか?

分類Dev

Google Maps API検索ボックスを使用して正確な座標に移動するにはどうすればよいですか?

分類Dev

Google Maps V2を使用して単一のマーカーを削除するにはどうすればよいですか?

分類Dev

マーカーをonClickに追加して、自分の地理位置をgoogle-maps-reactに表示するにはどうすればよいですか?

分類Dev

Google Maps APIを使用して、特定の場所の近くのランドマークを見つけるにはどうすればよいですか?

分類Dev

react-google-mapsを使用してストリートビューモードで地図を初期化するにはどうすればよいですか

分類Dev

Google Maps APIで最終的にマーカーの位置を変更するにはどうすればよいですか?

分類Dev

svgファイルのパスデータにアクセスし、それをgoogle-mapsマーカーとして使用するにはどうすればよいですか?

分類Dev

Google Maps For Railsでマーカーに情報ボックスを表示するにはどうすればよいですか?

分類Dev

Google Maps v3 API:ドラッグしてルートを変更するときにマーカーの位置を更新するにはどうすればよいですか?

分類Dev

Google Maps APIで2つのマーカー間にルートを描くにはどうすればよいですか?

分類Dev

Visual C#フォームアプリケーションでGoogle Maps APIを使用するにはどうすればよいですか?

分類Dev

Googleマップv2でマーカーをスムーズに移動することを修正するにはどうすればよいですか?

分類Dev

Google Maps iOS SDKで現在のカメラ位置のマーカーデータを取得するにはどうすればよいですか?

分類Dev

コンポーネント「vue2-google-maps」のGoogleマップにカスタム画像を含むマーカーを追加するにはどうすればよいですか?

分類Dev

Google Maps V3で番号付きマップマーカーを作成するにはどうすればよいですか?

分類Dev

Google Maps API-テキストでカスタムアイコンを使用するにはどうすればよいですか?

分類Dev

Google Maps iOSの中央にあるマーカーとGMSCircleを修正するにはどうすればよいですか?

分類Dev

react-google-mapsコンポーネントを使用してルートを描画するにはどうすればよいですか?

分類Dev

フラッター-個々のgoogle_maps_flutter ^ 0.5.21マーカーを削除するにはどうすればよいですか?

分類Dev

フラッター-個々のgoogle_maps_flutter ^ 0.5.21マーカーを削除するにはどうすればよいですか?

分類Dev

Google Maps APIを保護するにはどうすればよいですか?

分類Dev

JavaFXデスクトップアプリケーションでGoogle Maps APIを使用するにはどうすればよいですか?

分類Dev

Google Maps SDKを使用して住所を取得するにはどうすればよいですか?

分類Dev

react-google-mapsで地図の現在のズーム[getZoom()]を取得するにはどうすればよいですか?

分類Dev

Google Maps APIでオートコンプリートアドレスフィールドを作成するにはどうすればよいですか?

分類Dev

React Google Maps APIを使用してMapオブジェクトにアクセスするにはどうすればよいですか?

Related 関連記事

  1. 1

    google maps API:マーカーをクリック可能にするにはどうすればよいですか?

  2. 2

    Google Maps SDK(Swift / iOS)を使用して、マップマーカーの周囲に半径を描画するにはどうすればよいですか?

  3. 3

    Google Maps API:forループで複数のマーカーにズームインして異なる中心を設定するにはどうすればよいですか?

  4. 4

    Google Maps API検索ボックスを使用して正確な座標に移動するにはどうすればよいですか?

  5. 5

    Google Maps V2を使用して単一のマーカーを削除するにはどうすればよいですか?

  6. 6

    マーカーをonClickに追加して、自分の地理位置をgoogle-maps-reactに表示するにはどうすればよいですか?

  7. 7

    Google Maps APIを使用して、特定の場所の近くのランドマークを見つけるにはどうすればよいですか?

  8. 8

    react-google-mapsを使用してストリートビューモードで地図を初期化するにはどうすればよいですか

  9. 9

    Google Maps APIで最終的にマーカーの位置を変更するにはどうすればよいですか?

  10. 10

    svgファイルのパスデータにアクセスし、それをgoogle-mapsマーカーとして使用するにはどうすればよいですか?

  11. 11

    Google Maps For Railsでマーカーに情報ボックスを表示するにはどうすればよいですか?

  12. 12

    Google Maps v3 API:ドラッグしてルートを変更するときにマーカーの位置を更新するにはどうすればよいですか?

  13. 13

    Google Maps APIで2つのマーカー間にルートを描くにはどうすればよいですか?

  14. 14

    Visual C#フォームアプリケーションでGoogle Maps APIを使用するにはどうすればよいですか?

  15. 15

    Googleマップv2でマーカーをスムーズに移動することを修正するにはどうすればよいですか?

  16. 16

    Google Maps iOS SDKで現在のカメラ位置のマーカーデータを取得するにはどうすればよいですか?

  17. 17

    コンポーネント「vue2-google-maps」のGoogleマップにカスタム画像を含むマーカーを追加するにはどうすればよいですか?

  18. 18

    Google Maps V3で番号付きマップマーカーを作成するにはどうすればよいですか?

  19. 19

    Google Maps API-テキストでカスタムアイコンを使用するにはどうすればよいですか?

  20. 20

    Google Maps iOSの中央にあるマーカーとGMSCircleを修正するにはどうすればよいですか?

  21. 21

    react-google-mapsコンポーネントを使用してルートを描画するにはどうすればよいですか?

  22. 22

    フラッター-個々のgoogle_maps_flutter ^ 0.5.21マーカーを削除するにはどうすればよいですか?

  23. 23

    フラッター-個々のgoogle_maps_flutter ^ 0.5.21マーカーを削除するにはどうすればよいですか?

  24. 24

    Google Maps APIを保護するにはどうすればよいですか?

  25. 25

    JavaFXデスクトップアプリケーションでGoogle Maps APIを使用するにはどうすればよいですか?

  26. 26

    Google Maps SDKを使用して住所を取得するにはどうすればよいですか?

  27. 27

    react-google-mapsで地図の現在のズーム[getZoom()]を取得するにはどうすればよいですか?

  28. 28

    Google Maps APIでオートコンプリートアドレスフィールドを作成するにはどうすればよいですか?

  29. 29

    React Google Maps APIを使用してMapオブジェクトにアクセスするにはどうすればよいですか?

ホットタグ

アーカイブ