我正在为我的毕业设计制作一种价格低廉的导航设备,使用Android作为 *** 作系统
我尝试了Google Native的Map-vIEw控件,但它仅在Online上有效.
当然,我想存储地图以进行离线导航
所以..我想要一个地图提供者(例如OpenStreetMap):
>我可以离线使用
>包含可搜索的街道名称(不仅是渲染的图像)
>商业用途
>免费或低价
OpenStreetMap的问题在于它没有为埃及的大多数城市提供详细的地图.
解决方法:
您需要像MapDroyd这样的东西,也许可以和他们讨论使用他们的代码的问题.
另外,也可以从这里选择OpenStreetMap小部件http://code.google.com/p/osmdroid/
并添加一种缓存区域的方法.对于街道名称索引,您可以下载world.osm(或只是其中的一部分以节省时间),然后通过如下所示的python脚本运行它:
(请注意,这需要做一些工作:它不会处理重复的街道名称,因此您必须对其进行一些修改.它还会找到酒吧和自动柜员机.)
#!/usr/bin/pythonfrom xml.dom import pulldomdoc = pulldom.parse("england.osm")#outfile = open("england.txt", "w")nodes = {}ways = {}pubs = []atms = []i = 0for 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-免费的离线地图提供程序(而非OpenStreetMap)全部内容,希望文章能够帮你解决android-免费的离线地图提供程序(而非OpenStreetMap)所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)