我想出了如何防止你的错误。 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