2010-03-13 82 views
3

我正在爲我的畢業設計一個低價導航裝置,採用Android作爲操作系統免費離線地圖提供商(而不是OpenStreetMap的)

我試過自帶谷歌的地圖視圖控件,但它只能在線..
和-我當然要存儲離線導航地圖

所以..我想的地圖供應商(如OpenStreetMap的)認爲:

  • 我可以使用離線
  • 含檢索的街道名稱(不僅是渲染圖像)
  • 用於商業用途
  • 免費或以低廉的價格

與OpenStreetMap的問題,它不適合在大多數城市提供詳細的地圖埃及。

+2

你希望'免費'和'用於商業用途',即有人應該投資金錢來開發你免費獲得的東西然後賣給人們?除了像OpenStreetMaps這樣的開源項目之外,您不會找到任何東西。你可以隨時提供埃及街道地圖 - 這是該項目的目的。 –

+0

而且他還希望所有這些都能脫機工作,尤其是在android上?祝你好運。 你最好創建一個android應用程序來存儲OpenStreetMaps Images,並在離線狀態下使用它來進行ur grad程序。 –

+2

@Traveling Tech Guy:Android是免費的..雖然我可以銷售設備使用Android 無論如何..我說免費**或以低廉的價格** ..因爲我的項目着眼於低成本 – Radian

回答

2

我發現Mobile Atlas Creator

+2

Mobile Atlas Creator使用OpenStreetMap和Google地圖數據。它違反許可證和使用條款。請不要使用這個應用程序! – guerda

3

你想要類似MapDroyd的東西,也許跟他們談論使用他們的代碼。

或者從這裏採取OpenStreetMap小部件http://code.google.com/p/osmdroid/ 並添加一種緩存區域的方法。對於街道名稱索引,您可以下載world.osm(或只是其中的一部分以節省時間),然後通過像這樣的python腳本運行它:

(請注意,這需要一些工作:它不處理重複的街道名稱,所以你必須修改它一下。它還發現酒吧和自動取款機。)

#!/usr/bin/python 

from xml.dom import pulldom 

doc = pulldom.parse("england.osm") 
#outFile = open("england.txt", "w") 

nodes = {} 
ways = {} 
pubs = [] 
atms = [] 

i = 0 
for event, node in doc: 
    if event == pulldom.START_ELEMENT: 
     if node.localName == "node": 
      doc.expandNode(node) 

      nodeID = node.getAttribute("id") 
      nodeLat = node.getAttribute("lat") 
      nodeLon = node.getAttribute("lon") 

      amenity = ""; 
      for tag in node.getElementsByTagName("tag"): 
       if tag.getAttribute("k") == "amenity": 
        amenity = tag.getAttribute("v") 

      nodes[int(nodeID)] = (float(nodeLat), float(nodeLon)) 

      if amenity == "pub": 
       pubs.append(int(nodeID)) 
      elif amenity == "atm" or amenity == "bank": 
       atms.append(int(nodeID)) 

     elif node.localName == "way": 
      doc.expandNode(node) 

      name = ""; 
      for tag in node.getElementsByTagName("tag"): 
       if tag.getAttribute("k") == "name": 
        name = tag.getAttribute("v") 
      if name == "": 
       continue; 

      wayName = name.encode("latin-1", "replace") 
      refList = [nd.getAttribute("ref") for nd in node.getElementsByTagName("nd")] 

      if ways.has_key(wayName): 
       ways[wayName].append([int(x) for x in refList]) 
      else: 
       ways[wayName] = [int(x) for x in refList] 

     i = i + 1 
     if i % 100 == 0: 
      print(i/100) 

print(nodes) 
print(ways) 
print(pubs) 
print(atms) 

#outFile.close() 
+0

MapDroyd使用地圖從OSM 和OSM本身不提供詳細的地圖在大多數城市埃及 問題是關於OSM 以外的提供者,即使它沒有在Android中處理的API,我也可以做任何事情使它在Android上運行 – Radian

+0

聽起來更像是商業問題,而不是編程問題。您可能想嘗試在映射論壇上詢問而不是使用stackoverflow。 我嚴重懷疑除OSM之外還有其他免費地圖提供商。 – Timmmm