轉自我的BLOG http://blog.csdn.net/goldenhawking/article/details/6402775
最近經過陛下點撥,涉獵了“OpenStreetMap”,做了不少業餘研究,把成果給大家分享一下,特别是提供搭建好的用戶端-伺服器架構,以及中國國内的OSM開放地圖範例。
為什麼隻有中國的??
原因很簡單, 由于導入世界範圍資料要耗費 100GB以上的磁盤。經過我親自測試,如果需要導入世界資料的話,在擁有4GB存儲器、1TB磁盤陣列的HP 8核伺服器上需要近1周的時間(PostgreSQL Shared-Mem 128MB, Work Mem 512MB, Maintain 512MB),且虛拟機與 PostgreSQL伺服器并不在同一機器。(資料庫伺服器要求專用,才能發揮最好效果) 。
盡管提供的僅是導入中國國内資料的範例伺服器, 但是您可以從網站下載下傳完整鏡像(2011年4月的約16GB),而後導入本範例的伺服器,即可立刻擁有世界範圍的資料通路。在導入之前請詳細閱讀CD光牒中的文檔,特别是
1、確定PostgreSQL 的資源充分
2、確定導入期間PostgreSQL 的"autovacuum" 已經關閉。
3、確定不要斷電
我建立的完整範例鏡像連結(盡量保持開機上傳,請大家有耐心!虛拟機所有密碼全部是 1234567, 包括開機和資料庫管理者。資料庫渲染使用者osmrender,密碼osmrender):
ed2k://|file|Planet.OSM_Server_and_Client_by_goldenhawking(OSM%E6%9C%8D%E5%8A%A1%E5%99%A8%E5%8F%8A%E8%8C%83%E4%BE%8B%E5%AE%A2%E6%88%B7%E7%AB%AF).iso|4132896768|F6F5774B8E2FD4032F997523FB7BC097|h=PNZKU5WEIGMUUCOQSLFE2EOWMZCXORAL|/
說明和截圖:
ed2k://|file|Planet.OSM_Server_and_Client_by_goldenhawking(OSM%E6%9C%8D%E5%8A%A1%E5%99%A8%E5%8F%8A%E8%8C%83%E4%BE%8B%E5%AE%A2%E6%88%B7%E7%AB%AF).iso.%E8%AF%B4%E6%98%8E%E5%92%8C%E6%88%AA%E5%9B%BE.rar|619839|32DD6E70287DFEE35E77F77DACF23EEB|h=QBAQ6QZNPOBDP4KL2ZGMD2L5ST5C44LP|/
Planet.OSM( Open Street Map) 計劃是開放源代碼的GIS應用,目前經過全世界熱心同仁的更新,其底層資料的品質明顯提升,精度、資料量均不是小打小敲的商業地圖應用可比拟的(比GoogleMap等還是要樸素)。其地圖通過網址 http://www.openstreetmap.org 可以直覺通路。不僅如此,如果能夠接入Internet, 可以友善的使用其API,支援包括移動裝置在内的多種服務。
http://wiki.openstreetmap.org/wiki/Planet.osm 介紹了她的詳細情況。這次,我們要讨論的是在公司内部的專用網路上,如何搭建像模像樣的 OSM 伺服器。适用的範圍:
1、公司内部網絡限制了上網,但又需要GIS應用的地方
2、需要訂制 GIS 應用的地方
3、需要攜帶到邊遠地區的便攜式計算機上的情況。
由于是輕量級的應用,我不實作完整的API, 隻是注重顯示、運用地圖本身作為底圖。
1、osm 體系一分鐘介紹
在開始之前,有必要介紹一下OSM的體系。(看過英文資料 http://wiki.openstreetmap.org/wiki/Planet.osm的可以略過)。OSMGIS 的底層資料由點、線、面等基本圖元構成,這些含有屬性(地名等)的幾何元素以 XML 格式定期在網站釋出:
ftp://ftp.spline.de/pub/openstreetmap/
這些XML格式的圖元來自工具"osmosis"導出PostgreSQL資料庫的鏡像, 這個工具的說明見:
http://wiki.openstreetmap.org/wiki/Osmosis
PostgreSQL資料庫中的圖元對象在 PostGIS的支援下形成供世界各地使用者不斷完善的資料集。然而,資料本身都是字元串格式的,無法直接進行顯示。為此,有不少中間件(渲染引擎)被設計出來,用于把資料庫中的字元圖元變成可以浏覽的圖像,其中最著名的就是 Mapnik。 本次,我們采用Ubuntu上的Mapnik作為渲染引擎。 Mapnik 本身是一個C++庫,通過綁定在Python上,提供了簡便的接口,隻要給出生成圖像的比例尺、範圍,即可生成png,jpg,gif等格式的圖像。
2、投影系
OSM 與 Google-Map 同樣采用摩卡托(http://en.wikipedia.org/wiki/Mercator_projection)投影系,這種投影是保角投影,南北極附近是奇異點,無法顯示,也算是他的一大缺陷了。第0級比例尺全世界地圖被承載在 256 * 256 大小的圖檔上,第1級比例尺為 512*512, 分為 兩行、兩列256*256的圖檔。第2級比例尺為 1024*1024,即4*4=16個256*256的圖檔...以此類推, 每一級擁有 2^n 行, 2^n 列個瓦片組成,左上角編号為0,0,右下角為 2^n-1,2^n-1. 具體編号參見更多資料。
3、詳細搭建方法
老外已經寫得不能再詳細了,見http://weait.com/content/build-your-own-openstreetmap-server, 直接按照他說的做,準OK!
4、網頁服務與用戶端程式
用戶端有很多實作方法,這裡給出的是 Windows 下的 VC++ 2008/2010的工程。原理很簡單,通過讀取特定比例尺下的瓦片,在螢幕上拼接顯示。對沒有渲染的瓦片,登記入資料庫,由渲染程式生成。範例中示範的比較簡單,希望起到抛磚引玉的效果!
注意: 所有密碼都是1234567,確定VMWare 共享檔案夾可用!CD光牒中附帶了VM軟體!界面:

http://bbs.csdn.net/topics/370157384