HyperLink
Bejelentkezés
E-mail: 
Jelszó: 





Skip Navigation Links
 

A Microsoft Terra szerverének programozása


Terra Server 2. rész

Példaprogram letöltése

22885 bájt

Az előző részben készítettünk egy programot, amely segítségével egy megadott terület településeit lekérdezhettük, a hozzájuk tartozó szélességi és hosszúsági fokokkal együtt. Ebben a részben folytatjuk az elkezdett programot. Kibővítjük, hogy a lekérdezett koordinátákat felhasználva, különböző felbontású műholdfelvételeket és topológiai térképeket kérhessünk le a szerverről. Képet nem csak egy kiválasztott településről, hanem tetszőlegesen megadott koordinátáról is lekérhetünk.

A példaprogram használatához aktív Internet kapcsolat szükséges.
Folytatjuk az előző részben elkészített példaprogramot. A PageControl1 objektumot kibővítjük egy új füllel, amelyen képeket kérhetünk le a Terra szerverről.
Egy kép letöltéséhez meg kell adnunk egy szélességi és egy hosszúsági fok koordinátát. Egy ilyen koordinátát a LonLatPt osztály tárol. A megadott koordinátákat a lap tetején található Edit mezők segítségével adhatjuk meg. Először az Edit mezők tartalmát el kell helyeznünk egy LonLatPt típusú objektumban.
LonLat:=LonLatPt.Create;
LonLat.Lat:=StrToFloat(Lat.Text);
LonLat.Lon:=StrToFloat(Lon.Text);
Kétfajta kép letöltését tesszük lehetővé. A műholdas felvétel a Photo, a topológiai térkép a Topo nevet kapta. Ezek kiválasztását a RadioGroup1 objektum segítségével tehetjük meg.
Most információkat kell lekérnünk erről a helyről, melyet egy AreaBoundingBox osztályban tárolhatunk. A lekérdezést a TerraService osztály GetAreaFromPt függvény valósítja meg.
Area:=FTerra.GetAreaFromPt(LonLat,t,IntToScale(ComboBox1.ItemIndex),500,280);
Első paraméterként a már létrehozott LonLatPt osztály példányát adjuk át, majd ezt követi a kép típusának megválasztása a Theme felsorolt típus segítségével. Harmadik paraméterként a kép felbontásának mértékét kell megadnunk. Ezt használva közelebbi, illetve távolabbi képeket kapunk egy-egy helyszínről. Az utolsó két paraméterben annak a területnek a szélességét és magasságát kell megadnunk pixelben, melyen majd megjelenítjük a letöltött képet.
A képek felbontását a Scale, felsorolt típus segítségével állíthatjuk be. Hogy a ComboBox1 ItemIndex értékét át lehessen konvertálni Scale típusúvá, létrehoztuk az IntToScale függvényt.
Nem minden felbontásban létezik kép a szerveren. Ha olyan adatokat adunk meg, amelyhez nem tartozik kép, akkor a program hibaüzenetet ad. Ennek kezeléséről egy try – except – end blokk segítségével, nekünk kell gondoskodnunk.
A képeket a szerver kisebb képekre bontva küldi el. A GetAreFromPt metódussal lekérdeztük a terület adatait. A kapott struktúra tartalmazza a letölthető képek X és Y indexeit.
Ezeket a képeket két egymásba ágyazott for ciklus segítségével tudjuk feldolgozni. Mielőtt elkezdődne a ciklus, meg kell határoznunk a ciklus kezdőértékeit.
StartX:=Area.NorthWest.TileMeta.Id.X;
StartY:=Area.NorthWest.TileMeta.Id.Y;
A TileMeta property tartalmazza a képi információkat. Ennek tartalmát egy TileID típusú objektumba lementjük.
TI:=TileID.Create;
TI:=Area.NorthWest.TileMeta.Id;
A képek tárolására az Images nevű dinamikus tömböt használjuk. A tömb minden egyes eleme TImage típusú.
A két for ciklust az alábbi formában kell megadnunk, hogy a képeket helyes sorrendben kapjuk.
for i:=StartX to Area.NorthEast.TileMeta.Id.X do
  for j:=StartY downto Area.SouthWest.TileMeta.Id.Y do begin
A TileId objektumot használjuk arra, hogy a GetTile metódus meghívásával lekérjük a for ciklusok által meghatározott indexű képet.
TI.X:=i;
TI.Y:=j;
Picture:=FTerra.GetTile(TI);
A képek adatai egy dinamikus tömbben érkeznek, amely Byte típusú elemeket tárol. A tömb TByteDynArray típusú. Ennek a típusnak a leírása a Types unitban található. A képek formátuma JPG.
A képeket úgy tudjuk felhasználni, hogy az aktuális képet mindig egy ideiglenes (Temp.jpg) állományba mentjük, majd azt betöltjük egy TImage komponensbe. Mivel a képek JPG formátumúak, a uses listában fel kell sorolnunk a JPEG unit nevét is. A teljes kép összerakásához több Image komponensre lesz szükségünk. Az egyes komponensek helyét az alábbi módon számolhatjuk ki.
Left:=2+(i-StartX)*Width;
Top:=61+(StartY-j)*Height;
Az Images, dinamikus tömb felszabadítását a RemoveImages eljárás végzi el.

Cikksorozat

#IDKategóriaCikk címeSorozat
2535C#Oracle adatbázis-elérés alapjai1. rész
2546C#SQL utasítások végrehajtása2. rész
2557C#Tárolt eljárások és függvények fejlesztése3. rész
2565C#Csomagok fejlesztése4. rész
2573C#Adatbázis triggerek fejlesztése5. rész
2581C#Kivételek kezelése PL/SQL-ben6. rész
3276C#Kurzorok deklarálása PL/SQL-ben7. rész
3297C#Tömb adattípus létrehozása és kezelése PL/SQL-ben8. rész
3326C#Adatbevitel tömb-adattípussal rendelkező oszlopokba9. rész
3357C#Adattárolás beágyazott tábla-típusú oszlopokban10. rész
3388C#Adatok beszúrása beágyazott táblákba11. rész
3418C#Index létrehozása PL/SQL-ben12. rész
3444C#Szekvenciák használata13. rész
3488C#Adatok betöltése állományokból14. rész
1765DelphiOracle adatbázis-elérés alapjai15. rész
1774DelphiSQL utasítások végrehajtása16. rész
1784DelphiTárolt eljárások és függvények fejlesztése17. rész
1794DelphiCsomagok fejlesztése18. rész
1803DelphiAdatbázis triggerek fejlesztése19. rész
1815DelphiKivételek kezelése PL/SQL-ben20. rész
3256DelphiKurzorok deklarálása PL/SQL-ben21. rész
3287DelphiTömb adattípus létrehozása és kezelése PL/SQL-ben22. rész
3318DelphiAdatbevitel tömb-adattípussal rendelkező oszlopokba23. rész
3348DelphiAdattárolás beágyazott tábla típusú oszlopokban24. rész
3377DelphiAdatok beszúrása beágyazott táblákba25. rész
3408DelphiIndex létrehozása PL/SQL-ben26. rész
3436DelphiSzekvenciák használata27. rész
3467DelphiAdatok betöltése állományokból28. rész


Könyv
Ez a cikk megtalálható ebben a könyvben: Delphi Software Offline 2003 évkönyv 103. oldal

Felhasználási feltételek
A Software Online szoftverfejlesztői magazin mindegyik cikke, minden megjelent képe, és egyéb publikált anyaga szerzői jog védelme alatt áll! Bármilyen formában történő másodlagos terjesztésük, közzétételük vagy felhasználásuk kizárólag a kiadó előzetes írásbeli engedélyével történhet!

Copyright © 1999-2012 Animare Software Kft. Minden jog fenntartva!
| Készült: Animare Stúdió | Adatvédelem | Kapcsolat |