tabdulradi
tabdulradi

Reputation: 7606

Free Offline Map Provider (and not OpenStreetMap)

I am making for my Graduation Project a low price Navigation device, using Android as Operating System

I tried the Native Google's Map-view Control, but it works only Online ..
and of-course I want to store maps for offline navigation

So.. I want a map provider (like OpenStreetMap) that :

The problem with OpenStreetMap that it doesn't provide detailed map for most cities in Egypt.

Upvotes: 3

Views: 3894

Answers (2)

tabdulradi
tabdulradi

Reputation: 7606

I found Mobile Atlas Creator.

Upvotes: 2

Timmmm
Timmmm

Reputation: 97008

You want something like MapDroyd, maybe talk to them about using their code.

Alternatively take the OpenStreetMap widget from here http://code.google.com/p/osmdroid/ and add a way to cache regions. For the street name index you can download the world.osm (or just part of it to save time) and then run it through a python script like this:

(Note that this needs some work: it doesn't handle duplicate street names, so you'll have to modify it a bit. It also finds pubs and ATMs.)

#!/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()

Upvotes: 3

Related Questions