我正在为我的毕业设计制作一个低价的导航设备,使用android作为操作系统。
我尝试了本地google的地图视图控件,但它只在网上工作。
当然,我想为离线导航存储地图
所以…我想要一个地图提供商(比如OpenStreetMap):
我可以离线使用
包含可搜索的街道名称(不仅仅是渲染图像)
商业用途
免费或低价
OpenStreetMap的问题是它没有为埃及的大多数城市提供详细的地图。
最佳答案
你想要像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()
关于android - 免费离线 map 提供商(而不是OpenStreetMap),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/2439068/