
A példaprogram használatához aktív Internet kapcsolat szükséges.
A Microsoft működtet egy TerraServer-nek nevezett szolgáltatást, mely nem más, mint egy hatalmas adatbázis, ami hihetetlen mennyiségű képet és adatot tárol Észak-Amerika területéről.
Ez a szolgáltatás egy WebService formájában is közzétételre került. Felhasználva ezt a WebService-t, saját programunkban igen könnyedén elérhetjük ezt a képes adatbázist. Most az első részben azt nézzük meg, hogy hogyan tudunk kapcsolatot teremteni a szerverrel, és hogy hogyan kérdezhetjük le egy megadott terület adatait.
A szerver a http://terraserver.com címen érhető el. A szerver használatához szükséges információkat a következő weboldalon találjuk:
http://terraserver.homeadvisor.msn.com/about.aspx
Hozzunk létre egy új Delphi alkalmazást.
Válasszuk a File – New – Other menüpontot. A New Items ablakban válasszuk a WebServices fület, azon belül a WSDL Importer elemet. A megjelenő ablak Location of WSDL File or URL mezőjében adjuk meg az alábbi címet:
http://terraserver.homeadvisor.msn.com/TerraService.asmx?wsdl
A fenti cím tartalmazza a szerver használatához szükséges interfészek és adatszerkezetek adatait. Kattintsunk a Next, majd a Finish feliratú gombokra.
A WSDL Importer egy varázsló, amely lekérdezi a szerver adatszerkezeteit, és a lekért adatokat elmenti egy unit-ba. A unit TerraService néven jön létre.
A Unit1-ben fel kell vennünk a hivatkozást a TerraService unit-ra.
A TerraService egységben megtalálhatjuk a használható osztályokat és adatszerkezeteket. A TerraServiceSoap osztály képezi az interfészt, alkalmazásunk és a szerver között. Hogy könnyedén fel tudjuk építeni ezt a kapcsolatot, egy függvény is a rendelkezésünkre áll. Ez a következő.
function GetTerraServiceSoap(UseWSDL: Boolean=System.False; Addr: string=''; HTTPRIO: THTTPRIO = nil): TerraServiceSoap;
A Unit1-ben létre kell hoznunk egy változót.
public
FTerra: TerraServiceSoap;
A Form1 OnCreate eseményben létesítünk kapcsolatot a szerverrel.
FTerra:=GetTerraServiceSoap(False,'',Nil);
A szerverről lekért adatokat a Temp.db nevű adattáblába mentjük el. A tábla Paradox 7 típusú. A következő mezőkkel rendelkezik:
| Mezőnév |
Típus |
Hossz |
| City |
Alpha |
50 |
| State |
Alpha |
50 |
| Country |
Alpha |
50 |
| Longitude |
Number |
- |
| Latitude |
Number |
- |
A Form1-en elhelyeztünk két Edit kompon-enst. Az Edit1 mezőben adjuk meg a lekérdezendő terület nevét, az Edit2-ben pedig a szerverről lekérdezett lista elemeinek maximális számát.
A települések adatainak lekérdezését a Button1 OnClick eseményében hajtjuk végre, a GetPlaceList metódus segítségével.
Places:=FTerra.GetPlaceList(Edit1.Text,UpDown1.Position,True);
A GetPlaceList metódus első paraméterében kell megadnunk a lekérdezendő terület nevét. A második paraméter a lekérdezendő elemek maximális számát határozza meg. A szerveren olyan települések adatai is szerepelnek, amelyekről nem található kép. Ha az utolsó paraméterben True értéket adunk meg, akkor csak olyan települések adatait kérdezzük le, amelyekről kép is található a szerveren.
A Places egy ArrayOfPlaceFacts típusú, dinamikus tömb. A tömb elemein egy for ciklus segítségével könnyedén végigmehetünk. A tömb elemei egyenként PlaceFacts típusúak. A város, az állam és az ország nevét a Place, a koordinátákat a Center property-n keresztül érhetjük el
FieldByName('City').AsString:=Places[i].Place.City;
. . .
FieldByName('Longitude').Value:=Places[i].Center.Lon;
A Lon (Longitude) jelentése hosszúsági fok, a Lat (Latitude) pedig a szélességi fokot jelenti.