在Google地图中从一个点转移到另一个点时,有没有办法在Google地球中实现相同的“退回”功能?例如如果您在列出的地震之间切换: http://earthquakeproject.com/?earth gui在地球上的位置之间“反弹”你 如果你在http://earthquakeproject.com/?maps做同样的事情,它只是在这些位置之间滑动。我希望两者之间的功能感觉相同。
答案 0 :(得分:0)
所以..找不到解决方案所以这就是我最终做的事情,以防其他人需要做同样的事情。是的,我知道它可能更整洁......
首先我找到了一个确定距离的函数,用它来得出1到4之间的相对跳跃量
function sloc(lat,lon){
sloc_obj.lat1=sloc_obj.lat2;
sloc_obj.lon1=sloc_obj.lon2;
sloc_obj.lat2=lat;
sloc_obj.lon2=lon;
var R = 6371; // km
var d = Math.acos(Math.sin(sloc_obj.lat1)*Math.sin(sloc_obj.lat2) +
Math.cos(sloc_obj.lat1)*Math.cos(sloc_obj.lat2) *
Math.cos(sloc_obj.lon2-sloc_obj.lon1)) * R;
if(d<1000){
return 1;
}
if(d<5000){
return 2;
}
if(d<10000){
return 3;
}
return(4);
}
然后我用它来错开一系列延时行动......
var l1=$(this).data('lat');
var l2=$(this).data('lon');
//set up array for times actions
var cmd=[]
//get the zoom-level based on the distance between two lat/lon spots
var d=sloc(l1, l2);
//based on our max flyout level, populate our times commands
if(d>=1){cmd[cmd.length]="map.setZoom(5)";}
if(d>=2){cmd[cmd.length]="map.setZoom(4)";}
if(d>=3){cmd[cmd.length]="map.setZoom(3)";}
if(d>=4){cmd[cmd.length]="map.setZoom(2)";}
cmd[cmd.length]="map.panTo(new google.maps.LatLng("+l1+","+l2+"),"+(1+d)+");";
if(d>=4){cmd[cmd.length]="map.setZoom(3)";}
if(d>=3){cmd[cmd.length]="map.setZoom(4)";}
if(d>=2){cmd[cmd.length]="map.setZoom(5)";}
if(d>=1){cmd[cmd.length]="map.setZoom(6)";}
timer_offset=0;
//get the number of steps for our cmd iterator. subtract 1 so we get the middle step in our math since the number of steps will always be odd
steps=cmd.length-1
//iterate over ALL the steps.
for(x=0;x<=steps+1;x++){
//for the middle step, wait a bit more than normal
if(x>=steps/2){
timer_offset=(100*d);
}
//at the end of the middle action pan, wait a bit even more than that
if(x>=(steps/2)+1){
timer_offset=(100*d)+200;
}
//set our timeout
time=200+(x*100+timer_offset)
//load the command on the timeout
setTimeout(cmd[x],time);
}
通过这种方式,我得到了一个相当平滑的过渡,过去和那里反映了实际行进的距离。我会尝试更整齐地做到这一点,也许更容易进出对数,但它比平坦的平移要好。