16

ルートや道順を表示せずに、単に地図を表示しているだけです。mapOptions = {...scaleControl: true,...} でコントロールを追加できますが、スケールの単位をインペリアルに変更することに関するドキュメントは見つかりませんでした。

これが私のコードです:

var mapOptions = {
    zoom: 4,
    mapTypeControl: false,
    center: new google.maps.LatLng(38.8282, -98.5795),
    mapTypeId: google.maps.MapTypeId.ROADMAP,
    scaleControl: true,
    scaleControlOptions: {position: google.maps.ControlPosition.BOTTOM_LEFT}
};
google.maps.visualRefresh = true;

map = new google.maps.Map(document.getElementById('map'),mapOptions);   

注: ControlPosition は機能していないように見え、常に右下に移動します。

4

5 に答える 5

9

この一時的な解決策を試してください(ここでは準備完了関数にあります):

var scaleInterval = setInterval(function() {
  var scale = $(".gm-style-cc:not(.gmnoprint):contains(' km')");
  if (scale.length) {
    scale.click();
    clearInterval(scaleInterval);
  }
}, 100);
于 2014-01-30T15:21:31.433 に答える
8

一部のズームレベルでは「km」の代わりに「m」が使用され、RegExp処理が必要になるため、Memory Leakによる回答はすべての場合に機能するとは限りません(彼のソリューションにはjQueryが必要です)。RegExp を (m|km) に拡張し、innerHTML に変更した後、Xion Dark によるソリューションを機能させることができました。 )。

私の完全なソリューション(必要なマップID「map_canvas」を配線した場所)

var scaleInterval = setInterval( function() {
  var spn = document.getElementById('map_canvas').getElementsByTagName('span');
  var pattern = /\d+\s+(m|km)/i;
  for(var i in spn) {
    if ( pattern.test(spn[i].innerHTML) ) {
      spn[i].click();
      clearInterval(scaleInterval);
    }
  }
}, 500);
setTimeout( function() { clearInterval(scaleInterval) }, 20000 );

これは Firefox 31 と Chrome 37 と IE 10 で動作します。 setTimeout は無期限に実行されるのを防ぐために含まれています。現在のメートル単位ではなく、目的の ft/mi 単位。

注: IE 10 でこれを最初にテストしたとき、スケール領域に白いボックスが表示されました。最初は自分のコードが原因だと思っていましたが、コードを削除しても同じことが起こりました。最後に、「Compatability View」(IE をめったに使用しないため知らなかった IE 7 エミュレーター) が誤ってオンになっていることが原因であると判断しました。このため、スケール バーが正しく表示されません。「標準」モードでIE 10を使用すると、GMスケールが正しく表示されました(そして私のコードは機能しました)。私と同じように、IE の経験があまりなく、同じことに遭遇して混乱する可能性がある他の人に警告したかっただけです。

于 2014-09-01T07:22:51.910 に答える
3

スケール コントロールの表示には、メートル単位と帝国単位の両方が表示されます (ドキュメントの例) 。

ScaleControlの位置は、視覚的な更新では制御できません (google.maps.visualRefresh = true;)

于 2013-08-05T21:33:29.887 に答える
1

わかりましたので、これを思いつきましたが、これは短期的な修正としてのみ使用します。

function switchScale(mapId){
    var spn = document.getElementById(mapId).getElementsByTagName("span");
    for(var i in spn){ 
        if( (/\d+\s?(mi|km)/g).test(spn[i].innerText) ){ 
            spn[i].click(); 
        } 
    }
}

これはクロムで機能しましたが、代わりに「.onclick()」を使用する一部のブラウザーでは「.click()」が問題を引き起こす可能性があると聞いています。

于 2013-08-07T20:41:37.813 に答える