此問題演示瞭如何控制疊加縮放範圍和泛盤區,以便通過不允許用戶一次看到整個世界來防止包裝。
Prevent horizontal world-wrapping of overlays in GMap v3
所以問題的肉是在OverlayView的越來越像素座標。如果我們能夠弄清楚如何改進這部分以保持形狀一致,它可能會解決我們的問題。這可能有助於測試包裝,但它可能無法正常工作,因爲你的問題似乎當我們被放大甚至發生。
var proj = overlay.getProjection();
var wwidth = 0;
if (proj) wwidth = proj.getWorldWidth();
var mapsWrapsAround=false;
if (__wwidth > 0 && __wwidth < domContainer.width()) mapsWrapsAround = true;
我意識到測試經度是否從一開始就經度方式不同可能無法正常工作因爲經度可能是正確的,但映射到屏幕上的多個div位置。所以這是我們必須測試的div像素座標。但是,也許你可以通過測試它是否在相反的方向上,而不是地理座標上的差異來測試在x中翻轉。
// UNTESTED
// dimensioned somewhere outside
var start;
var startgeo;
// inside the overlay.onAdd content I think.
// Turn the overlay projection into a d3 projection
var googleMapProjection = function (coordinates) {
var googleCoordinates = new google.maps.LatLng(coordinates[1], coordinates[0]);
var pixelCoordinates = overlayProjection.fromLatLngToDivPixel(googleCoordinates);
var proj = overlay.getProjection();
var worldwidth = proj.getWorldWidth();
var finalX = pixelCoordinates.x;
if(typeof(start) === "undefined"){
start = pixelCoordinates;
startgeo = googleCoordinates;
}
else {
if(pixelCoordinates.x > start.x && googleCoordinates.lng() < startgeo.lng()){
finalX -= worldwidth;
}
else if(pixelCoordinates.x < start.x && googleCoordinates.lng() > startgeo.lng()){
finalX += worldwidth;
}
}
return [finalX, pixelCoordinates.y];
}
所以這是做什麼是假設谷歌地圖已選擇最接近北美的屏幕位置爲每個座標。如果形狀正確地保持在一起,那麼如果最終經度大於起始經度,則結束像素X也應該大於起始像素。X。但是,如果投影已經返回了世界另一側的一個點,那麼相對於起始像素的新像素應該處於錯誤的方向。也就是說,end.x現在小於start.x。因此,爲了解決這個問題,我們只是按照解決問題的方向按照世界寬度調整像素。希望。
來源
2013-07-18 18:41:03
Ted
肉你能告訴我們你的代碼? –