我想出瞭如何防止你的錯誤。 http://jsfiddle.net/wf9a5m75/p244m3qp/31/
關鍵是在後臺預加載streetview。
首先,您需要創建兩個全景div。
<script src="http://maps.googleapis.com/maps/api/js?language=en"></script>
<div id="err"></div>
<div id="pv-container">
<div id="backscreen"></div>
<div id="map-canvas"></div>
</div>
的< DIV ID = 「地圖畫布」/ >重疊< DIV ID = 「backscreen」/用CSS完全>。
#pv-container {
position: relative;
height: 500px;
width: 100%;
}
#map-canvas {
border: solid thick #ccc;
position: absolute;
left: 0;
top: 0;
bottom: 0;
right: 0;
}
#backscreen {
position: absolute;
left: 0;
top: 0;
bottom: 0;
right: 0;
border: solid thick red;
}
您需要首先更改背景的全景位置(pano和pov),然後設置爲地圖 - 畫布div。 那時候,你需要改變背景的標題(或者可能是音高)。 這會在Google Maps API中產生緩存圖像(我猜)。
function initialize() {
var loc = {
lat: 38.9002138,
lng: -77.0364319
},
pov = {
heading: 180,
pitch: -5
},
svService = new google.maps.StreetViewService(),
panorama = new google.maps.StreetViewPanorama(
document.getElementById('map-canvas')),
backscreen = new google.maps.StreetViewPanorama(
document.getElementById('backscreen')),
counter = 0;
function updatePano(data, status) {
if (status === google.maps.StreetViewStatus.OK) {
var opts = {
pano: data.location.pano,
pov: {heading: pov.heading + 120 * (counter % 3), pitch: pov.pitch}
};
backscreen.setOptions(opts);
backscreen.changed = function(key) {
if (key === 'status' && backscreen.get('status') === 'OK') {
var opts2 = Object.create(opts);
opts2.heading += 5;
backscreen.setOptions(opts2);
setTimeout(function() {
panorama.setOptions(opts);
}, 100);
}
}
} else {
document.getElementById('err').textContent = "Failed to get panorama";
}
counter = (counter + 1) % 15;
}
setInterval(function() {
svService.getPanorama({
location: {
lat: loc.lat + (counter * 0.0001),
lng: loc.lng
},
radius: 35
}, updatePano);
}, 3000);
}
initialize();
你可能有興趣在後臺格會發生什麼。 這就是:
'.setOptions()'? – geocodezip
我沒有看到問題,請提供一個[最小,完整,測試和可讀示例](http://stackoverflow.com/help/mcve)問題。 – geocodezip
夠公平的!剛剛添加了一個''.setOptions()'是一個非常好的主意,但不幸的是它仍然會發生(就像在jsfiddle中一樣) – rescdsk