HaxeMaps / MapService

Rozhraní map.MapService se používá pro napojení na konkrétní mapovou službu (OpenStreetMap, Google, apod.). Slouží a) jako zdroj rastrových dat (poskytuje URL adresu konkrétní dlaždice) a b) pro transformaci mezi geografickými souřadnicemi a souřadnicemi pravoúhlými.

Třída map.BaseMapService obsahuje metody a atributy nezávislé na kontrétní službě a slouží jako bázová třída, od které se odvozují konktétní mapové služby. Třída implementuje metodu validZoom. V kontruktoru se detekuje, zda-li je nastaven Flash parametr proxy a pokud ano, sestaví adresu, která se použije pro načítání dlaždic. Existují dva důvody, proč použít proxy. Jedním je bezpečnostní mechanismus Flash playeru, který neumožní načíst data z jiné domény v případě, že tato doména neobsahuje soubor pravidel crossdomain.xml. Dalším důvodem může být cachování dat.

1. Rozhraní MapService

Z důvodu rychlosti jsou často volané metody implementovány jako inline funkce a jejich parametry jsou voleny tak, aby nebylo nutné zbytečně alokovat objekty pokud to není opravdu nutné.

map.MapService (interface)

  • lonlat2tile(lon:Float, lat:Float, zoom:Int) : TileID

    Metoda vrací identifikace dlaždice (TileID), která obsahuje zadané geograf. souřadnice. Hodnota zoom odpovídá absolutní hodnotě přiblížení v rozsahu definovaném parametry služby.

  • tile2lonlat(t:TileID) : LonLat

    Inverzní metoda k předchozí metodě. Funkce vrací geografické souřadnice levého horního rohu dané dlaždice.

  • lonlat2XY(lon:Float, lat:Float, zoom:Int) : Point

    Metoda převádí geograf. souřadnice na pravoúhlé tak, aby pro dané rozlišení odpovídali souřadnicím používaným v rámci objektu Layer. Hodnota zoom odpovídá absolutní hodnotě přiblížení v rozsahu definovaném parametry služby.

  • XY2lonlat(x:Float, y:Float, zoom:Int) : LonLat

    Inverzní metoda k předchozí metodě. Funkce transformuje pravoúhlé souřadnice na souřadnice geografické. Hodnota zoom odpovídá absolutní hodnotě přiblížení v rozsahu definovaném parametry služby.

  • validZoom(z:Int) : Bool

    Metoda vracející hodnotu True v případě, že hodnota relativní úrovně přiblížení z je v mezích daných parametry služby.

  • tile2url(t:TileID) : String

    Metoda používaná pro získání URL adresy určité dlaždice. V případě, že je ID dlaždice neplatné je možné vrátit prázdný řetězec.

2. Mapové služby

Haxemaps integruje v současné době podporu pouze pro služby, které mají definovánu politiku pomocí crossdomain.xml.

2.1. Open Street Map

OpenStreetMap je volně dostupná služba a její licenční podmínky dovolují používat mapové podklady ve vlastní aplikaci. OpenStreetMap používá mechanismus dlaždic, který je používán i řadou ostatních služeb jako je Google Maps, Microsoft Bink, apod. Konkrétně se jedná se o projekci typu Mercator.

map.mapservice.OpenStreetMapService (extends BaseMapService, implements MapService)

  • OpenStreetMapService(default_zoom:Int = 13)

Konstruktor vytvoří službu poskytující přístup k dlaždicím Open Street Map a dále realizující Mercator projekci.

2.2. Microsoft Bing Maps

map.mapservice.BingMapService (extends OpenStreetMapService)

  • BingMapService(default_zoom:Int = 13)

Konstruktor vytvoří službu poskytující přístup k dlaždicím Microsoft Bing Maps, použita je stejná projekce jako v předchozím případě.

2.3. Google Maps

K napojení na Google Maps je možné využít třídu OpenStreetMapService, neboť využívá stejné zobrazení. Její veřejné použití však musí být dle licenčních podmínek povoleno společností Google a proto není součástí projektu. Dlaždice Google Maps lze zpřístupnit pomocí následujícího kódu.

Zdrojový kód: Služba Google Map

class GoogleMapService extends OpenStreetMapService
{
 
   override public function new(default_zoom:Int = 13)
   {
      super();
      setInfo("Google Maps", "gog", 0, 18, default_zoom, 256);
   }
 
   override public function tile2url(t:TileID) : String
   {
      if (!isValid(t)) return "";
 
      return "http://mt"+Math.floor(Math.random() * 3.5)+
           ".google.com/vt/x=" + (t.x) + "&y=" + (t.y) + "&z=" + (t.z);
   }
 
}
Zobrazeno: 938x Naposledy: 17.4.2024 18:27:06