去年做了一個方案,SuperMap + Sqlserver 2000,配置都配置了好幾天,
還去SuperMap公司培訓了兩天,搭建的Demo還有問題。後來就把這項需求
給去掉了(要花錢買軟體,還有開發成本,實際用途也不大)
前兩天又做一個類似的方案,這次的指導思想是盡量用開源實現。調研了
兩天,確定下幾個成熟的GIS開源軟體,Geotools,GeoServer,不過都是
用Java寫的,GeoTools甚至有8年多的曆史了。.net下的開源GIS還很爛。
心想就改用Java吧,於是惡補Java,搭建環境,第二天搭建好了。先是搭
建Tomcat+GeoTools+PostgreSql/postgis,運行成功c/s的Demo,心想應該
b/s的Demo也沒太大的區別,於是鑽進Geotools API裡面狂翻。最後琢磨
答案應該在GeoServer裡面。一陣研究發現,GeoServer把GeoTools封裝起
來了,提供web map的web service,即WMS(一項opengis 規範)。資料來源
也狂容易配置。心中大喜。這樣一來又可以用習慣的c#進行開發了。於是
架構出來了:資料庫用postgresql/postgis,免費,且對GIS支援特別好。
GIS中介層用GeoServer,提供Web Service。應用程式層開發一個控制項,對Web
Service進行封裝,一切都OK了。唯一的開發工作就是開發一個操作地圖
的Web控制項。所採用的一切東東如果採用商業軟體,可能需要幾萬到幾十萬
元。很重要的是GIS系統往往一次訪問的計算量很大,所以可以考慮採用一
大堆爛機器來個Cluster,這時如果用商業軟體,嘿嘿......。另一個提高
效能的方法是對地圖對象做緩衝,這個技術上很複雜。開源的話,可以很
方便的根據自己的需求定製緩衝策略。商業軟體辦不到。
感想:
1,採用開源軟體可省錢。這隻是開源的一個優勢,開源還有其它優勢,
這些優勢有時甚至比免費更重要。
2,在某些情況下開源軟體的學習成本要低於商業軟體。這裡前提是某些
情況。開源軟體中的垃圾很多,優秀的也不少。這些優秀的軟體一般都秉
承一個主要的原則,就是KISS(keep it simple, stupid)。理解這一點
了,開源軟體學期來就很簡單了。比如上面的Geotools,它主要乾的事情
就是進行通用的GIS運算。GeoServer乾的事情就是把GIS資料來源封裝成Web
Service,按照規範發布。postgis就是儲存GIS資料。很簡單。而商業軟體
一般整合了非常多的很少用到的功能,學起來難以抓住重點,學習成本可
能更高。開源軟體實在高不定就可以刨代碼。
3,視野要開闊。.net的經常看看java那邊有什麼東東,看看怎麼能夠利用
上,能夠削減成本,提高效率。
4,開源軟體的可定製性。適當採用開源軟體可以使架構柔性化。以偶這個
事為例。痛點在於提高效能(還沒看到幾個Web-GIS效能好的)。有很
很多種方案可選擇。第一,可以搞一堆爛機器,每個上跑一個postgresql/
postgis + apache + geoserver ,採用負載平衡 ,這樣要花錢,主要是
硬體的錢。第二,可以將緩衝放在資料庫和geoserver之間(可能已經有
開源實現了)。第三,可以修改geoserver,加上我喜歡的緩衝機制。第四,
可以將緩衝放在.net 那邊。架構非常靈活。
5,在設計.net方案的時候考慮開源軟體,有時能夠獲得意想不到的好處。