Android Offline Map ohne Google Maps API

Aus Wikizone
Version vom 11. Juni 2014, 13:06 Uhr von 134.3.59.200 (Diskussion) (Die Seite wurde neu angelegt: „Basiert auf: http://ghoshehsoft.wordpress.com/2012/03/09/building-a-map-app-for-android/ == Bestandteile: == === Klasse TilesManager === * Berechnung welche Til…“)
(Unterschied) ← Nächstältere Version | Aktuelle Version (Unterschied) | Nächstjüngere Version → (Unterschied)
Wechseln zu: Navigation, Suche

Basiert auf: http://ghoshehsoft.wordpress.com/2012/03/09/building-a-map-app-for-android/


Bestandteile:

Klasse TilesManager

  • Berechnung welche Tiles benötigt werden
  • Längen und Breitengrade in Pixel umrechnen

Klasse Tiles Provider

  • Bekommt einen Index-Bereich und holt die passenden Kacheln (Tiles)
  • Verwaltet einen Cache um Zeit zu sparen
  • Für eine Online Map kann man einfach diese Klasse anpassen

Klasse MapView

  • Übergibt Ortsdaten an den TilesManager und bekommt Informationen welche Tiles gerendert werden müssen und an welcher Stelle
  • Holt sich vom TilesProvider die passenden Bilder und rendert diese
  • Reagiert auf Touch Events

Klasse Tile

  • Enthält x und y Koordinaten sowie ein Bitmap

Helfer Klasse PointD

  • Enthält einen Punkt in der Form zweier Double Werte

Tiles Manager

Der TilesManager liefert uns Methoden um die richtigen Tiles an der richtigen Stelle zu rendern.

Eingang:

  • Position (Longitude / Latitude)
  • Zoom Level

Ausgang:

  • Rectangle (left, top, right, bottom)

Wichtige Funktionen des TilesManager

public static PointD calcRatio(double longitude, double latitude)

Konvertiere longitude and latitude to ratio values, wobei ein Ratio Wert eine Zahl zwischen 0 und 1.

Dies ist sinnvoll, weil man so leicht berechnen kann welche Kachel bei einer bestimmten Koordinate und einem bestimmten Zoom Level benötigt wird.

Das funktioniert deswegen weil in der Karte die Kacheln oben Links mit (0,0) beginnen und dann der Index nach rechts und unten wächst. Die Berechnung geht dann so:

Die Anzahl der Kacheln in der Karte ist:

count = 2^zoom

KachelIndex auf der x/y Koordinate:

tileX = ratioX * count
tileY = ratioY * count

Das packen wir in ein paar Funktionen. Die Anzahl der Kacheln berechnet

public int mapSize()

public int mapSize()
{
    return (int) Math.pow(2, zoom);
}