Free standalone map provider (not OpenStreetMap)

I am making a low-cost navigation device for my Graduation project using Android as the operating system

I tried my own Google Map-view Control, but it only works on the Internet ..
and, of course, I want to store maps for offline navigation.

So, I want a map provider (e.g. OpenStreetMap):

  • I can use offline
  • Contains the desired street names (not only render)
  • for commercial use
  • Free or low cost

The problem with OpenStreetMap is that it does not provide a detailed map for most cities in Egypt.

+3
source share
2 answers
+2

- MapDroyd, , .

OpenStreetMap http://code.google.com/p/osmdroid/ . world.osm( , ), python script :

( , : , , .)

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

Source: https://habr.com/ru/post/1736802/


All Articles