2012-08-29 49 views
1

我試圖通過代碼旋轉Google地球插件地球儀。我正在使用第三方控制器來移動它,嵌入到調用JavaScript函數的WPF應用程序中。在Google地球插件中旋轉地球儀,計算範圍/縮放

我的理想解決方案是精確模擬HUD按鈕。當我告訴它「向右旋轉」或「向下旋轉」時,我希望地球儀的行爲與我按HUD按鈕完全相同。那可能嗎?

由於我沒有找到上述解決方案,我創建了幾個方法,通過一系列調用'lookAt.setLongitude()'來旋轉地球。解決方案的基礎是我每次調用JavaScript函數時都會向經度(或緯度)添加一定量的數據。

我的問題是,我還沒有想出如何計算範圍(又名:用戶放大多近/多遠)!當一定距離時,向經度增加「25」的效果很好 - 但是會越來越接近地球表面,並且解決方案很快就會崩潰!

有沒有一種自動方式可以說明範圍,或者沒有人有任何關於根據當前範圍調整緯度/經度移動的好算法的指針?

謝謝!

+0

到目前爲止,我的努力只是創建範圍樂隊。在1-5之間,旋轉X;在6-10之間,旋轉Y;在11-15之間,旋轉Z ...例如。 –

回答

0

沒有,你可以考慮讓地球出現由同ammount的在不同的縮放級別移動範圍自動方式。基本上,如果您將視圖移動25度,那麼這就是您移動視圖的程度。

如果您希望根據範圍增加移動量,則只需將範圍用作計算中的某個變量即可。你至少應該發佈一些代碼,並說出爲什麼它不能正常工作,如果你嘗試這樣做並被卡住。

編輯

另一種選擇可能是簡單地模擬按鍵,將旋轉地球爲您服務。根據您的設置您應該能夠發送一個箭頭鍵,或控制鍵一個瓦特之一,小號d從而使插件旋轉,就像如果你有按下HUD上的按鈕。

+0

謝謝弗雷澤。你是否知道有這樣的公共算法?我當然可以玩這些數字(一遍又一遍,直到我找到他們),但我相信別人已經解決了這個問題,誰擁有更多的3D旋轉計算知識,那麼我就可以。:) –

+0

好的,那麼也許嘗試一個不同的方法......看看我的編輯。 – Fraser

0

如果您獲得ge.getView()的當前視圖,則還可以獲取視圖的當前範圍。

var lookAt = ge.getView().copyAsLookAt(ge.ALTITUDE_RELATIVE_TO_GROUND); 
var newLook = ge.createLookAt(''); 
newLook.setLatitude(lookAt.getLatitude()); 
newLook.setLongitude(lookAt.getLongitude() + 25.00); //or however you want to rotate 
newLook.setRange(lookAt.getRange()); 
ge.getView().setAbstractView(newLook); 

小提琴:http://jsfiddle.net/3J3y8/4/

+0

謝謝馬特。我想要做的是增加/減少基於變焦的移動量。當放大到全球範圍時,添加25是一個很好的價值,但是當放大到一個城市時,它太多了。我希望有一個內部函數可以在縮小/縮小時移動更多/更少......但聽起來我必須創建自己的算法。 –

+0

@EvilClosetMonkey你可以使用Range to Longitude的比例 - 這個部分將不得不由你決定。 – Matt