Térképészkedjünk!

Amikor én iskolás voltam, volt egy hatalmas fiókunk telis-tele térképekkel a világ távoli tájairól. Voltak ott világtérképek, országtérképek, várostérképek, és teljesen lenyűgöző volt, ahogy ezek egymáshoz kapcsolódnak, és próbálják elképzelhetővé tenni a Föld tájait.

Ennek a korszaknak már vége. Manapság mindenki online térképészkedik, a Google maps térképszolgáltatása nagyon népszerű. Gondolj csak bele, mennyi adat lehet emögött! Az egész bolygó térképe elérhető, ha belenagyítasz akár utca-szinten. Az utcanevek latin, cirill, arab betűkkel kanyarognak az utcák felett.

Tíz éve még csak az amerikai kormány láthatta a műholdak által készített képeket. Most egyetlen kattintásból a térképből műhold-nézetet kapsz a világ bármely tájáról. Elég lenyűgöző a fejlődés, nem?

Egy térképészeti műhód

Térképet ide!

Vajon hogy lehet legkönnyebben térképet találni? A térkép az egy kép, szóval ha valaki fogja magát, beszkennei a Földrajz-atlaszát, és tudjuk a képek URL-jét, akkor azt ugyanúgy kitehetjük, mint a Lorem Ipsum képeket.

A Google maps egy lépéssel többet tud ennél. Ahelyett, hogy előre be lenne szkennelve a világ összes térképe, csináltak egy static map API-t. Static mint statikus - ezek csak képek, nem lehet egérrel nagyítani benne -, map mint térkép, és API mint Application Programming Interface - azaz arra való dolog, hogy egy mások által készített programrendszert mi használjunk a saját programunkban.

A sok ilyesztő dolog ellenére ez azt jelenti, hogy csinálhatunk egy URL-t, ami alapján a Google készít egy képet, ami az adott hely környékének a térképe. Roppantul varázslatos.

Például:

Próbáld csak ki ezeket! Kattints rá! Esetleg a webböngészőben variáld a paramétereket! Másik város, más képméret, vagy más nagyítás - vágod, ugye?

Térkép projekt!

Csinálj egy új projetet! Add hozzá a degu.jar-t! Megint kezdjük a szokásos két osztállyal:

public class Main {

    public static void main(String[] args) {
        new MapWindow();
    }

}

A másik pedig az ablak kódja:

public class MapWindow extends Form {

    public MapWindow() {
        window()              
        .text("Világtérkép")        
        .add(
            view("http://maps.googleapis.com/maps/api/staticmap?center=Budapest&size=600x300")
            .asPicture()
        )
        .show();                    
    }
}

Jéé, egy trééékéép!

Ez nem tűnt eddig nehéznek. De mondjuk az kicsit rossz, hogy kizárólag egyetlen fix város térképét tudja. Mondjuk, azzal a trükkel ahogy több kamera képét is egymás mellé tettük, tehetünk több térképet is egymás mellé. Sőt, itt az URL-ben pontosan megadhatjuk, hogy mekkora képeket kérünk, így csinosan egymás mellé lehet rendezni különféle városokat.

A városokkal az a baj, hogy más-más méretűek. Ha egymás mellé tesszük őket azonos nagyítással, akkor azon a helyen ahol éppen kifér Budapest, ott San Francisco területének épp csak a belvárosa van.

Ezért tudod mit? San Franciscoból nagyobb képet kérünk, hogy több férjen ki azonos nagyítással.

public class MapWindow extends Form {

    public MapWindow() {
        window()              
        .text("Térkép")        
        .add(
            group(
                view("http://maps.googleapis.com/maps/api/staticmap?center=Budapest&size=300x300&zoom=10")
                .asPicture(),br(),
                view("http://maps.googleapis.com/maps/api/staticmap?center=Sydney&size=300x300&zoom=10")
                .asPicture()
            ),
            view("http://maps.googleapis.com/maps/api/staticmap?center=SanFrancisco&size=600x600&zoom=10")
            .asPicture()
        )
        .show();                    
    }
}

Huhu, térkép-ész!

Feladat: Variálj egy kicsit a térképekkel! Tedd ki egymás mellé Budapest, Alsópáhok, és Csajágaröcsöge térképét! Próbálj ki többféle elrendezést!

Térkép bármely városról

Csinos ez a térkép, de nem túl hasznos: nem tudunk bármely városról térképet kérni csak úgy, ha átírjuk a programot. Az lenne a jó, ha a programba be lehetne írni egy szöveges beviteli mezőbe, hogy melyik városra vagyunk kíváncsi, és azt a térképet mutatná meg!

No ezt meg hogy? Erről szól a következő rész!

Mit tanultunk ebből?

A Google static map API egy olyan webes szolgáltatás, ami a világ bármely helyének térképéről tud egy képet generálni egy URL alapján. A képpel pedig mindenre képesek vagyunk, ugye?