0

オーバーレイポリゴンを使用して世界地図を作成しています。これはjQueryアコーディオン内にあります。アコーディオンペインを切り替えてからマップに戻ると、南極大陸にジャンプします。この動作を克服するために、現在の中心LatLngをキャプチャして変数に格納し、マップのアコーディオンパネルに戻るときにsetCenter()を実行しようとしています。

動作しなかったので、.toUrlValue()メソッドを使用して、現在の中心座標をページ上の表示されている要素にダンプしてみました。マップを東または西にパンすると、経度の数値が増加し続けます。180になり、その後-180にリセットされると予想しました。

地図経度の問題

私のコード:

var currMapCenter = null;

jQuery(document).ready(function() {
  jQuery("#accordion").bind('accordionchange', function(event, ui) {
    if (ui.newContent.attr('id') == 'region-list')
    {
    triggerMapResize(); 
    }
});
});

function initialize_map() {

//do all the initialization here...

currMapCenter = map.getCenter(); //set initial center in variable.

google.maps.event.addListener(map, 'center_changed', function() {
  currMapCenter=map.getCenter();
  jQuery("#description").html(currMapCenter.toUrlValue());//to see what is happening...
});
}

function triggerMapResize()
{
google.maps.event.trigger(map, "resize");
map.setCenter(currMapCenter);
}

ドキュメントには、getCenter()がLatLngを返し、setCenter()がLatLngを必要とすることが示されています。currMapCenter = map.getCenter()を設定しようとするとどうなるか誤解していますか?マップを現在のようにラップする必要がある場合、setCenter()で使用するために使用可能なLatLngをキャプチャするにはどうすればよいですか?

4

4 に答える 4

3

getCenter()はLatLngを返しますが、180度を超える可能性があります。それはあなたがその軸の周りで地球を何回回転させるかに依存します。:)

この問題の簡単な修正を見つけました

var loc=map.getCenter();
loc=new google.maps.LatLng(loc.lat(), loc.lng(), false);

これで、LatLngが適切な値に再計算され、使用できるようになります...

于 2015-11-15T16:02:54.493 に答える
1

その動作は、MapオブジェクトのgetCenterメソッドについて文書化されています

getCenter()
LatLng
マップの中央に表示されている位置を返します。このLatLngオブジェクトはラップされていないことに注意してください。詳細については、LatLngを参照してください。

たぶん、getBounds()を使用できます(複数のコピーを表示するためにマップがズームアウトされている場合は機能しない可能性があります)

getBounds()
LatLngBounds
現在のビューポートのlat/lng境界を返します。世界の複数のコピーが表示されている場合、境界の範囲は経度で-180度から180度までです。

于 2012-08-23T21:51:57.483 に答える
0

このトピックのタイトルは不正確であり、実際の問題とは無関係であるように思われます。IE8は、当然のことながら、あらゆる種類の問題を引き起こし、マップをまったく描画できませんでしたが、標準に準拠したブラウザーは、アコーディオンペインを切り替えるときに中央が失われることを除いて問題ありませんでした。

元のコードでは、現在のマップの中心座標をキャプチャするために「center_changed」イベントをリッスンしていました。アコーディオンが閉じたときにjQueryのイベントがマップの位置を変更しているかどうか疑問に思い始めたので、中央のキャプチャイベントを「mouseout」に切り替えました。これで問題は解決しましたが、原因はまだわかりません。

補足:私はwindow.onload = function(){initialize_map();を使用していました。} IE以外のブラウザで成功しましたが、IEが機能しなくなり、まったく読み込まれませんでした。

var map=null;
var currMapCenter = null;

jQuery(document).ready(function() {
jQuery("#accordion").bind('accordionchange', function(event, ui) {
if (ui.newContent.attr('id') == 'region-list')
{
if(map==null) {
//first load; call map initialization
initialize_map();
}
triggerMapResize(); 
}
});

function initialize_map() {

//do initilization here...

google.maps.event.addListener(map, 'mouseout', function() { 
currMapCenter=map.getCenter();
});
}

function triggerMapResize() {
google.maps.event.trigger(map, "resize");
map.setCenter(currMapCenter);
}

上記のコードは問題なく機能します。Firefox 14、Chrome、IE8でテスト済み。

于 2012-08-24T16:26:54.700 に答える
0

おかげで、このスレッドは私を助けました。これは、noWarp設定を確認し、座標が+/- 180度を超えずに必要な中心にアクセスするために使用したコードです:-

var gmap_center = new google.maps.LatLng(map.getCenter().lat(), map.getCenter().lng(), false);

console.log('GMap lat/lng with default noWrap:true = ' + map.getCenter().lat() + ' / ' + map.getCenter().lng());

console.log('GMap lat/lng with noWrap:false = ' + gmap_center.lat() + ' / ' + gmap_center.lng());
于 2014-04-22T11:45:59.417 に答える