谷歌地图api中各点之间的“弹跳”

时间:2012-04-19 18:01:19

标签: jquery google-maps-api-3 google-earth

在Google地图中从一个点转移到另一个点时,有没有办法在Google地球中实现相同的“退回”功能?例如如果您在列出的地震之间切换: http://earthquakeproject.com/?earth gui在地球上的位置之间“反弹”你 如果你在http://earthquakeproject.com/?maps做同样的事情,它只是在这些位置之间滑动。我希望两者之间的功能感觉相同。

1 个答案:

答案 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);
                    }

通过这种方式,我得到了一个相当平滑的过渡,过去和那里反映了实际行进的距离。我会尝试更整齐地做到这一点,也许更容易进出对数,但它比平坦的平移要好。