0

Google マップである地点から別の地点に移動するときに、Google Earth から同じ「バウンス」機能を実装する方法はありますか? たとえば、リストされている地震をhttp://earthquakeproject.com/?earthで切り替えた場合、http: //earthquakeproject.com/? maps it で同じことを行うと、GUI が地球上の場所の間で「バウンス」します。それらの場所の間をスライドするだけです。機能は両者で同じように感じてほしいです。

4

1 に答える 1

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

このようにして、実際に移動した距離を反映して、適度にスムーズな移行が可能になります。これをもっときれいに、おそらく対数的に簡単に出し入れできるようにしますが、フラットパンよりはましです。

于 2012-04-19T20:42:46.043 に答える