1. 程式人生 > >使用GeoTools讀取和繪製Shapefile格式 -- (學習GIS【1】)

使用GeoTools讀取和繪製Shapefile格式 -- (學習GIS【1】)

ESRI Shapefile(shp)是一種美國ESRI公司開發的空間資料開放格式。目前,該檔案格式已經成為了地理資訊軟體界的一個開放標準,這表明ESRI公司在全球的地理資訊系統市場的重要性。

看了一些資料,對其中一句話比較感興趣 "Shapefile檔案不含有拓撲資料結構"

【由此帶來其他幾個問題】

什麼是拓撲?

什麼檔案格式包含拓撲資料結構?

為什麼其Shapefile檔案不含拓撲資料結構(mapinfo公司的mif/mid檔案格式好像也不含有)?

為什麼有拓撲資料機構的檔案格式要包含拓撲資料結構?

找到一些資料,比較簡單,但很好的解釋了以上幾個問題,一下是資料截圖

什麼是拓撲關係

拓撲資料集和簡單要素類

上面有點偏題了:P

因為在自己寫得一個GIS框架中需要支援對Shapefile格式的支援,所以才需要讀寫Shapefile格式

因為解析過mapinfo的mif/mid檔案格式,所以覺得也不會太複雜,但是因為時間比較緊,所以希望找到能夠讀寫shapefile格式的解決方案,那就省的自己寫了:)

在網上搜索了半天,找到了GeoTools.

我是在這個頁面找到這個工具的,有興趣的朋友可以看看,裡面有很多關於Gis的軟體

GeoTools:Geo Tools是自由的基於Java的製圖工具包,允許在網頁瀏覽器上互動式瀏覽地圖,而無需專門的伺服器端的支援。

 然後在GeoTools主頁下載了四個包(版本是geotools-2.5.5)

 geotools-2.5.5-src.zip  geotools-2.5.5-guide.zip   geotools-2.5.5-doc.zip    geotools-2.5.5-bin.zip

解壓完才大吃一驚,裡面的原始碼數量大大超過我的想象(很多咳)shapefile的讀寫功能只是其中一小部分

看了下資料,geotools的歷史已經很長時間,而且這個專案現在還是啟用的:)看來這個解決方案應該沒有問題了

首先是讀取shapefile

我參考是上面的頁面,在頁面裡整個過程有點繁瑣,如果想快點把程式,直接開啟JBudiler,建立一個新工程,然後把geotools-2.5.5-bin.zip解壓后里面的build目錄下的所有jar包都包進工程,然後複製上面頁面的例子程式直接建立一個測試類就可以跑了

 

 有幾個警告就不理它了~~~~~~

如何通過GeoTools繪製Shapefile

主要通過上面這個地址裡面的例子,但執行上面頁面中的例子程式有點問題,所在在這裡記錄一下如何解決問題的以做備忘

在執行上面例子程式ShapeLab.java時缺少一個JMapPane類,頁面中下面的回覆好多人都是出現這個問題,這個也做了回覆,好像因為新版本沒人維護這個類了,所以在2.5.5中沒這個類了,以前2.3.X有這個類的,那怎麼呢,重新下載2.3.X?

這個辦法不太好,好像用老版本畢竟不是太爽,那就只好把這個類下載下來~~

Koders搜尋JMapPanel效果圖

上面這個網站專門搜尋程式碼的,不錯,我在裡面搜尋到了JMapPanel,還搜尋到了JMapPanel依賴的三個類

HighlightChangedEvent  HighlightChangeListener  HighlightManager

 最後ShapeLab.java終於執行起來了,我讀取了一個shp格式檔案,執行效果如下:

這是什麼河呢:)很容易猜的到吧~~~~~~~~~~~