2012-05-21 42 views
0

首先感謝閱讀。 我有一個Web應用程序,大量使用Google地球插件顯示一些傳感器數據和其他東西。 我試圖讓用戶能夠定義在插件中繪製它們的區域和體積。 我能夠添加區域功能(如創建,可視化,編輯和刪除)。 現在我正在處理卷,但我真的不知道處理它們的最佳方法是什麼。一個重要的事情要注意的是,我只對平行上下表面的體積感興趣(沒有金字塔,沒有複雜的數字,只有prisms) 我想到的第一個想法是創建一個由2個多邊形組成的自定義對象以及將上表面的每個多邊形頂點連接到下表面中的相應的一個邊緣的陣列。 喜歡的東西:在谷歌地球插件中創建3d形狀

//Create the upper surface (polygon) 
    var aPolygonUpperPlacemark = ge.createPlacemark(""); 
    var aPolygonUpper = ge.createPolygon(""); 
    aPolygonUpper.setAltitudeMode(ge.ALTITUDE_RELATIVE_TO_GROUND); 
    aPolygonUpperPlacemark.setGeometry(aPolygonUpper); 
    var aOuterUpper = ge.createLinearRing(""); 
    aPolygonUpper.setOuterBoundary(aOuterUpper); 
    ge.getFeatures().appendChild(aPolygonUpperPlacemark); 

    //Create the lower surface (polygon) 
    var aPolygonLowerPlacemark = ge.createPlacemark(""); 
    var aPolygonLower = ge.createPolygon(""); 
    aPolygonLower.setAltitudeMode(ge.ALTITUDE_RELATIVE_TO_GROUND); 
    aPolygonLowerPlacemark.setGeometry(aPolygonLower); 
    var aOuterLower = ge.createLinearRing(""); 
    aPolygonLower.setOuterBoundary(aOuterLower); 
    ge.getFeatures().appendChild(aPolygonLowerPlacemark); 

    var myPrism = { 
     upperSurface: aPolygonUpperPlacemark, 
     lowerSurface: aPolygonLowerPlacemark, 
     edges: new Array() 
    }; 

這裏的proble是側面將不會顯示真實面,但只是作爲線。另一方面,我可能會爲每個側面創建另一個多邊形,但這會使這種3D形狀的管理比我想要的更復雜。
所以我的問題是,有沒有更好的方法來處理三維形狀或內置幾何?
注意我不能依靠3D模型(因此外部Kmz無法加載),因爲最終創建3D形狀將成爲用戶的特徵。

回答

1

只需創建上部多邊形(例如確保座標包含高度),然後確保設置爲1.您可以使用setExtrude(true)在API中執行此操作。

的細節

https://developers.google.com/kml/documentation/kml_tut#polygons我也建議你檢查出的實用程序庫 - 它使這樣的事情更準確。例如看這個擠壓多邊形的例子:http://earth-api-utility-library.googlecode.com/svn/trunk/extensions/examples/poly-draw-extruded.html

+0

我從API讀取setExtrude(true)使ploygon連接到地面。是否有可能使上下多邊形都具有自定義高度? – andreapier

+0

類別。您還可以使用gx:altitudeOffset來提升多邊形的每個LinearRings(類似於直接影響Polygon):https://developers.google.com/kml/documentation/kmlreference#gxaltitudeoffset – jlivni