2015-04-06 30 views
1

座標我想寫轉換SVG基本類型分爲世界風的形狀像折線,多邊形等獲得位置從AWT畫布世界風

由於SVG給出了畫布座標變壓器,我需要將它們轉換爲位置,我正在尋找可以做到這一點的API中的一種方法。

我看到有Vec4的點,但我不知道它如何與畫布座標。

會不會是正確表示如果發言權點x = 100,Y = 100,i執行以下

Vec4 vec=new Vec4(x,y,0.0f); 
Globe g=view.getGlobe(); 

Position p=g.computePositionFromPoint(vec); 

將這個對應位置將是在點的位置(x = 100,Y = 100)在屏幕上。如果我將鼠標帶到當前視圖的x = 100和y = 100,那麼位置應該是p。

回答

2

Globe.computePositionFromPoint(vec)以笛卡爾座標作爲輸入,而不是屏幕座標。若要從屏幕座標去定位你想是這樣的:

Vec4 screenCoords = new Vec4(x,y); 
Vec4 cartesian = view.unProject(screenCoords); 
Globe g=view.getGlobe(); 
Position p=g.computePositionFromPoint(cartesian); 
0

一個更好的辦法來做到這一點是:

Point screenPoint = dragContext.getPoint(); 
View view = dragContext.getView(); 

double latitude = view.computePositionFromScreenPoint(screenPoint.getX(), screenPoint.getY()).getLatitude().degrees; 
double longitude = view.computePositionFromScreenPoint(screenPoint.getX(), screenPoint.getY()).getLongitude().degrees; 
Position objectPosition = new Position(LatLon.fromDegrees(latitude, longitude), 0); 

然後你可以設置對象objectPosition的位置。

0

如果您想從畫布轉到3D,那麼您可能正在尋找View#computeRayFromScreenPoint(double, double)。這會給你一條光線(格式爲Vec4),通過畫布上給定的像素。因爲每個像素在空間上都是無限的線條,所以必須將這條射線與某些東西相交以產生一個有意義的3D點。


有關Globe#computePointFromPosition

Position - 甲緯度,經度,高度的位置,與在MSL的高度爲(ALT海拔)

Vec4 - 只需一個方向向量(通常用於對於笛卡爾座標)。對於笛卡爾座標系,z軸通過0deg/0deg lat/lon從地球出來,x軸通過0deg/90deg,y軸通過北極。

正如Chris所說,Globe#computePointFromPosition()Globe#computePointFromPosition()Position切換到笛卡爾Vec4,反之亦然,使用您的地球儀作爲參考框架。