Open Street Map维基世界地图初探--概念、开发
from: http://blog.csdn.net/viewcode/article/details/8179289
1. 什么是open street map(osm)?
2. 開發(fā)者應(yīng)該知道哪些概念?包括地圖的內(nèi)容、格式等
3. OSM開發(fā)有哪些環(huán)境?
4. libosmscout環(huán)境的搭建
5. libosmscout的使用示例、配置文件
1. 什么是OSM?
Open Street Map 維基世界地圖,一個(gè)開源的在線地圖項(xiàng)目,包括軟件和地圖數(shù)據(jù)。
官網(wǎng)介紹
http://wiki.openstreetmap.org/wiki/Zh-hans:Main_Page
中文網(wǎng)頁
http://wiki.openstreetmap.org/wiki/Main_Page
OSM與其他地圖 如google地圖的區(qū)別在哪里?
正如官網(wǎng)所說,它提供了一種方式,讓任何人能編輯地圖,能為OSM增加地圖數(shù)據(jù)(當(dāng)然如果是錯(cuò)誤的,別人是有權(quán)修改的)。而且,其他地圖大部分都不是免費(fèi)的,或者需要授權(quán)使用, google地圖是免費(fèi)的,但它也是被別人授權(quán)的,無法隨意編輯或在自己的軟件中使用的。
所以,人們也可以免費(fèi)地使用OSM數(shù)據(jù),包括開發(fā)等。
對OSM的常見問題,可以瀏覽
http://wiki.openstreetmap.org/wiki/FAQ
對于大部分人而言,為OSM繪圖是比較有趣的事。
有關(guān)為地圖增加數(shù)據(jù)(繪圖)的詳細(xì)介紹如下:
http://wiki.openstreetmap.org/wiki/Zh-hans:Map_Making_Overview
而對于開發(fā)者而言,更關(guān)心如何使用OSM數(shù)據(jù),用于開發(fā),一個(gè)必要的開發(fā)介紹和資源入口:
http://wiki.openstreetmap.org/wiki/Develop
里面介紹了 OSM的API, 如何下載map data,map data的數(shù)據(jù)格式和數(shù)據(jù)結(jié)構(gòu),常用的開發(fā)工具(已經(jīng)開發(fā)好的小工具),地圖要素(有哪些數(shù)據(jù)),與OSM相關(guān)的支持的框架(庫和組件)。
OSM自身的框架描述:
http://wiki.openstreetmap.org/wiki/Component_overview
下面先介紹一些與開發(fā)相關(guān)的概念和環(huán)境。
2. OSM相關(guān)的一些概念
地圖數(shù)據(jù)的存儲(chǔ)方式是xml結(jié)構(gòu),后綴名可以是xml或osm。
地圖的數(shù)據(jù)結(jié)構(gòu),即地圖要素包括1?Node,?2?Way,?3?Relation,4?Tag,5?Common attributes
這些地圖要素,與普通的地圖或?qū)Ш揭馗拍钕嗤?/p>
Node是空間點(diǎn),包括經(jīng)緯坐標(biāo),或高度信息。其他一些可選信息,如name等,在tag子數(shù)據(jù)中表示。類似于shape point 或attribution point
way表示線或區(qū)域,能包含2-2000個(gè)node點(diǎn)信息。它道路與區(qū)域描述的主要形式。類似于link、edge的概念
relation表示不同的元素間的關(guān)系,將不同元素間的關(guān)系描述出來。類似于connection的概念
tag表示一個(gè)元素中包含的一個(gè)特征,或者說是包含的一小塊數(shù)據(jù),如highway=residential,住宅區(qū)內(nèi)的道路。類似于attribution的概念,不過tag的作用遠(yuǎn)不止attribution的描述。
Common attributes就是node、way、relation的共同屬性,包括id, usr, version, timestamp等meta的信息。
更詳細(xì)的描述參見:
http://wiki.openstreetmap.org/wiki/Data_Primitives
及每個(gè)元素的子鏈接。
有關(guān)tag類型的詳細(xì)介紹和分類在這里有介紹:
http://wiki.openstreetmap.org/wiki/Map_Features
3. 開發(fā)框架
OSM目前提供了API 0.6版本的開發(fā)接口,xapi是extended api擴(kuò)展的接口。而這些接口是用于web或Java應(yīng)用開發(fā)的。如下介紹
http://wiki.openstreetmap.org/wiki/Databases_and_data_access_APIs
如果是使用其他語言開發(fā),就必須使用其他的庫或組件,這里列舉了各種語言支持的庫和組件。
http://wiki.openstreetmap.org/wiki/Develop/Frameworks
對于我而言,我采用的c++開發(fā)語言,目的是讀取OSM數(shù)據(jù),并解析,選取一些數(shù)據(jù),我就選用libosmscout庫。
所以,下面我就介紹libosmscout的開發(fā)環(huán)境設(shè)置。
4. libosmscout環(huán)境的搭建
我使用JOSM用于查看和下載地圖數(shù)據(jù),JOSM只能查看較小的地圖數(shù)據(jù),其內(nèi)存支持400多MB,對于更大的數(shù)據(jù)不支持。OSMOSIS用于數(shù)據(jù)轉(zhuǎn)換或分割等。
地圖數(shù)據(jù)下載,以下鏈接里包括各個(gè)地區(qū)或整個(gè)地圖的下載路徑:
http://wiki.openstreetmap.org/wiki/Planet.osm
libosmscout各個(gè)模塊的介紹:?
http://wiki.openstreetmap.org/wiki/Libosmscout
閑話少說,環(huán)境搭建(非qt版部分):
a. 使用Git從sourceforge上把源碼都下載下來
http://sourceforge.net/projects/libosmscout/
b. libosmscout支持windows版本,我使用的是vs2008,所以首先查看README.VisualStudio.txt,里面包含了詳細(xì)的build windows版本的步驟。
c. 依據(jù)readme,將zlib、libxml2、google protocol buffers、protoc.exe下載下來,并配置好。其中zlib、libxml2的版本要匹配,否則會(huì)有很因?yàn)榘姹静黄ヅ涞逆溄渝e(cuò)誤。
d. 依據(jù)readme,設(shè)置環(huán)境變量EXTRALIBS_HEADERS、EXTRALIBS_DEBUGLIBS。
e. 然后編譯,這時(shí),若有與DECLARE_COEFFS(SINECOEFF_SSE)相關(guān)的編譯錯(cuò)誤,就查看SSEMath.cpp中,有關(guān)math的一系列代碼是否是有效的,若無效,加入#define?OSMSCOUT_HAVE_SSE2。這個(gè)是我遇到的其vs工程中自帶的問題,可能是個(gè)小bug吧。
f. 此時(shí)libosmscout工程、libosmscout-import工程、import工程、demo_AddressLookup工程都能編譯通過。有關(guān)qt部分的工程我沒編譯,這里就不寫了。
訂閱郵件列表,用于知曉它的修改變換,及咨詢問題:
https://lists.sourceforge.net/lists/listinfo/libosmscout-development
5. libosmscout使用示例與配置
在使用demo_AddressLookup之前,要獲取OSM地圖數(shù)據(jù)及將osm地圖數(shù)據(jù)轉(zhuǎn)換為libosmscout需要的binary數(shù)據(jù)。
如果手上拿的的有xml格式的數(shù)據(jù),可以使用osmosis工具將xml格式的數(shù)據(jù)轉(zhuǎn)換為osm格式。轉(zhuǎn)換命令示例:
osmosis --read-xml file="planetin.xml" --write-xml file="planetout.osm" 更豐富的,強(qiáng)大的示例在http://wiki.openstreetmap.org/wiki/Osmosis#Example_Usage
或使用JOSM工具從服務(wù)器上下載地圖數(shù)據(jù),并保存為osm格式,這種方法能直接打開地圖數(shù)據(jù)并查看。
然后,使用編譯好的import.exe,將osm格式的數(shù)據(jù)轉(zhuǎn)換為binary數(shù)據(jù)。在運(yùn)行程序之前,將libosmscout\map.ost復(fù)制到程序當(dāng)前目錄下,因?yàn)閕mport需要默認(rèn)的map.ost參數(shù)文件。建立一個(gè)用于輸出結(jié)果的文件夾(libosmscout的binary地圖作為輸入或輸出都是文件夾的形式),如轉(zhuǎn)換planet.xml,運(yùn)行命令I(lǐng)mport.exe planetout.osm --destinationDirectory planet
更詳盡的命令參數(shù),請參看源碼或import的命令提示。
import的輸出會(huì)包含很多dat和idx文件,dat是數(shù)據(jù)文件,idx是dat的索引文件,更詳細(xì)的說明在libosmscout\libosmscout\ProcessResult.txt中,libosmscout\libosmscout\Resource.txt是一些算法和程序所占資源的說明。
并且map.ost是可以編輯的,可以增加或刪除一些選項(xiàng),如以下一些必要類型保留,其他我都刪除,并添加了highway_crossing類型。這樣能減少自己不需要的生成的binary數(shù)據(jù),當(dāng)然就會(huì)提高效率。
[cpp] view plaincopy自己的一個(gè)小的demo,打印地圖中highway_crossing的node(前提:自己生成的輸入地圖中有highway_crossing的數(shù)據(jù))。 [cpp] view plaincopy
《新程序員》:云原生和全面數(shù)字化實(shí)踐50位技術(shù)專家共同創(chuàng)作,文字、視頻、音頻交互閱讀
總結(jié)
以上是生活随笔為你收集整理的Open Street Map维基世界地图初探--概念、开发的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: ADAS在车载导航设备上的应用
- 下一篇: 车辆姿态相关的一些传感器