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?
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?
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();
}
}
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();
}
}
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!
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!