我正在为我的毕业设计制作一个低价的导航设备,使用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/

10-09 17:23