HyperLink
Bejelentkezés
E-mail: 
Jelszó: 





Skip Navigation Links
 

Microsoft TerraServer-ének használata saját alkalmazásban


Terra Server 1. rész

Példaprogram letöltése

16551 bájt

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 tárol a Földről. Ezek a műhold felvételek interneten keresztül elérhetők a megadott hosszúsági és szélességi fokok alapján, az általunk választott nagyítás mértékében. 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épi adatbázist.

A WebService a http://terraserver.homeadvisor.msn.com/TerraService.asmx címen érhető el.
Ennek a WebService-nek a részletes leírása pedig a http://terraserver.homeadvisor.msn.com/webservices.aspx oldalon olvasható (jelenleg).
Új alkalmazásunkhoz adjunk hozzá egy web referenciát ezen WebService eléréséhez. Ehhez válasszuk a Project - Add Web Reference menüpontot, majd az Address mezőbe írjuk az alábbit:
http://terraserver.homeadvisor.msn.com/TerraService.asmx
Nézzük most lépésenként, hogy miként is kérhetünk le egy műhold felvételt egy adott helyről. Első lépés, hogy létrehozzuk a TerraService osztály példányát.
    private void button1_Click(object sender, System.EventArgs e)
    {
      TerraService ts = new TerraService();
Ezt követi egy LonLatPt osztály, melyben megadhatjuk, hogy mely szélességi és hosszúsági fokon lévő pontot szeretnénk látni. A megadott koordináta a megjelenítendő kép közepe lesz.
      LonLatPt center = new LonLatPt();
      center.Lat = Convert.ToDouble(textBox1.Text);
      center.Lon = Convert.ToDouble(textBox2.Text);
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. 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, melynél a Photo érték a műhold felvételt jelenti. 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.
      AreaBoundingBox abb = new AreaBoundingBox();
      abb = ts.GetAreaFromPt(center, Theme.Photo, TerraServer.com.msn.homeadvisor.terraserver.Scale.Scale4m, pictureBox1.Width, pictureBox1.Height);
      int xStart = abb.NorthWest.TileMeta.Id.X;
      int yStart = abb.NorthWest.TileMeta.Id.Y;
      Graphics g = pictureBox1.CreateGraphics();
      g.Clear(Color.White);
A letöltendő képet több részletben kapjuk meg. Ennek oka a gyorsabb megjelenítés, mivel így a kép egyes részeit már láthatóvá tehetjük és nem kell megvárnunk, hogy a teljes kép letöltődjön.
A teljes képhez egy kettős ciklusra lesz szükségünk, mely mind X, mind Y irányban végigmegy a képen és sorban minden részletet letölt.
      for (int x=xStart; x<=abb.NorthEast.TileMeta.Id.X; x++)
      {
        for (int y=yStart; y>=abb.SouthWest.TileMeta.Id.Y; y--)
        {
          TileId ti = new TileId();
          ti = abb.NorthWest.TileMeta.Id;
          ti.X = x;
          ti.Y = y;
Az egyes részleteket egy Image osztályba töltjük, majd a Graphics osztály DrawImage függvényének segítségével kirajzoljuk a megfelelő pozícióra.
          Image img = Image.FromStream(new MemoryStream(ts.GetTile(ti)));
          g.DrawImage(img, (x - xStart) * img.Width - Convert.ToInt32(abb.NorthWest.Offset.XOffset), (yStart - y) * img.Height - Convert.ToInt32(abb.NorthWest.Offset.YOffset), img.Width, img.Height);
          img.Dispose();
        }
      }
    }
A ciklusok végére a teljes kép előáll.

Könyv
Ez a cikk megtalálható ebben a könyvben: C# Software Offline 2002 évkönyv 550. 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 |