用Balder開源3D引擎實現Silverlight客戶端的3D 地圖效果(一)


寫作本文的起因:

  前兩天偶然自己想了解一下Web端的三維GIS開發,但是發現實現的過程非常麻煩,ArcGIS API For Flex和ArcGIS API ForSilverlight中都沒有提供3D的支持。

隨后在網上查了查資料,發現了這個例子:

http://maps.esri.com/sldemos/terrainmap/default.html

該示例實現了地圖的3D效果,且基於Silverlight。於是便開始分析該實例的源碼。下面的內容也算是自己在學習以上這個例子時的一點心得。在此和大家分享。

 

開始前的幾個問題:

1.高程數據怎樣獲得?

2.自己有了DEM高程數據,如何利用自己的DEM高程數據來渲染3D圖片?

3.高程數據如何對應到2D地圖上相應的位置?

4.利用高程數據實現地圖3D渲染的具體實現過程是怎樣的呢?

以上是本文涉及的是個小問題,也是筆者在學習3D Map之前一直困擾的問題,所以這也是本文將要解決的幾個問題。

 

實現過程的基本總結: 

通過對源碼的分析,以及對Balder的學習,大致總結出了該示例實現的基本過程。

1.通過GIS服務提供高程數據,如果沒有高程數據那么3D就無從談起了。

2.獲得當前顯示的2D地圖的圖片,構建高程數據網格

3.調用高程數據的GIS服務,獲得高程網格對應的高程數據。

5.將3D模型的材質設置為2D下地圖的圖片。

4.結合開源的3D引擎 Balder,根據高程數據,開始渲染,最終得到3D效果。

 下面的一幅圖給出上面的實現過程描述:

 

關於本文的說明:

1.本文的重點將放在3D視圖的具體過程,因為設計到的內容較多,所以不會對每一個細節都作具體的介紹。

2.關於Balder 3D引擎的內容不會在本文中詳解,如果您沒有3D的開發基礎(即從來沒有入手過3D),在此建議先了解Balder的基本使用。

強烈建議看看該博主的Balder的教程:

http://www.cnblogs.com/nowpaper/tag/silverlight%E6%8A%80%E6%9C%AF/

3.本文基於之前的給出的3D Map示例,所以本文提取了其中一些關鍵的代碼,希望原作者不要介意,本文沒有用於任何的商業活動,純粹用於技術交流。

4.作者也是3D Map的新手,歡迎一起交流,不喜勿噴。

 

首先我們來看一下如何獲得DEM高程數據,以及如何在ArcGIS Server發布自己的高程數據。

1.提供高程數據的實現。

因為利用現有的ArcGIS Server服務並不能實現提供高程數據的功能,因此這里需要利用到ArcGI的SOE擴展ArcGIS Server 服務,因此這要求我們自己辨析代碼來擴展現有的GIS功能。不過這里有一個好消息就是在ESRI的資源中心已經有人完成了這部分工作,並提供了相應的下載:

http://resources.arcgis.com/zh-cn/gallery/file/arcobjects-net-api/details?entryID=87BEC705-1422-2418-34B5-308930DE323A

在該文檔中有詳細的使用說明,並提供了Silverlight,Flex等Web應用程序獲取高程數據的例子。

當完成擴展之后,我們會在GIS服務能力中多出了一項:Get Elevations,即表示提供高程數據的服務。

2.發布高程數據

完成ArcGIS Server的擴展功能之后,需要發布我們自己的高程數據。高程數據可以上這里下載:

http://datamirror.csdb.cn/index.jsp

這里提供了SRTM90米分辨率原始高程數據30米分辨率數字高程數據。

獲得高程數據之后,在ArcMap中新建一個MXD文檔,然后將高程的柵格數據添加到MXD文檔中。這里還可以添加其他數據,但是高程數據只能從柵格數據中獲得。

保存MXD文檔,然后發布到ArcGIS Server.然后在服務能力中勾選Get Elevations.這樣我們便完成了提供高程數據服務的發布。

打開我們剛才發布的MXD文檔服務(Map Service)的地址,在最下面就會發現多出了一項,即支持的擴展功能:

完成獲取高程數據服務的發布之后,接下來就是在Web端如何獲取高程數據了。具體過程將在下篇給出。歡迎大家繼續關注。

(版權所有,轉載請標明出處)

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM