Winrt, carte de bing

Pentru a vă asigura că aplicația dvs. necesită date de poziționare, trebuie să specificați în mod explicit în secțiunea Capabilități din fișierul Package.appxmanifest. După aceea, Windows 8 solicită confirmarea de la utilizator la prima pornire a programului.







Ca o regulă, datele Geolocator sunt utilizate în combinație cu hărți. În Windows 8 nu există niciun control încorporat pentru hărțile Bing, dar puteți descărca setul de instrumente care va adăuga acest element în aplicație. Pentru a face acest lucru, veți avea nevoie de o cheie de înregistrare, care poate fi obținută la www.bingmapsportal.com.

Dar în următorul program voi merge pe o cale diferită. Ecranul va afișa o hartă care se rotește în funcție de orientarea tabletei. Rotiți vă permite să aliniați harta nordului cu nordul real (sau direcția pe care comprimatul o consideră nordică). În loc de un control pentru cardurile Bing, folosesc serviciul de mapare SOAP al lui Bing pentru a încărca plăcile individuale și pentru a le îmbina într-o hartă. În acest caz, veți avea nevoie și de o cheie de înregistrare.

Următorul este fișierul XAML. Toate plăcile care alcătuiesc harta sunt plasate pe panoul Canvas numit imageCanvas. Rețineți transformarea RotateTransform pentru a roti Canvas în raport cu centrul:

Serviciul acceptă două tipuri de solicitări: GetMapUriAsync și GetImageryMetadataAsync. O interogare de primul tip vă permite să obțineți o hartă statică a unui anumit loc. Cu toate acestea, am ales cel de-al doilea tip, care returnează informații pentru încărcarea "plăcilor" individuale, din care apoi se colectează harta completă.

Toate apelurile către serviciul web sunt efectuate exclusiv în dispozitivul de încărcare încărcat. Este necesar să efectuați două apeluri: să obțineți hărți de metadate pentru modul rutier și prin satelit. Informațiile sunt stocate în două instanțe ale clasei locale numite ViewParams. Cea mai importantă parte a metadatelor este șablonul URI pentru încărcarea plăcilor individuale de hartă. Clasa ViewParams conține, de asemenea, câmpuri pentru nivelul minim și maxim de mărire, dar știu că nivelul de mărire variază de la 1 la 21. Veți vedea că în alte părți ale codului se presupune că limita superioară a nivelului de zoom este de 21:

Încărcarea metadatelor a două moduri se realizează prin două apeluri asincrone, care nu depind una de cealaltă și, prin urmare, pot fi executate simultan. Această situație este ideală pentru aplicarea metodei Task.WaitAll, care așteaptă finalizarea mai multor obiecte Task.

Când ambele apeluri către serviciul web reușesc, programul lansează clasele Geolocator și Inclinometer. Clasa Inclinometru este utilizată exclusiv pentru a obține o abatere, prin care harta și săgeata care indică nordul sunt rotite:

După terminarea procesului de încărcare încărcat, programul are două modele URI care pot fi utilizate pentru încărcarea plăcilor de hărți individuale. Dalele, din care sunt adăugate hărțile Bing, sunt imagini raster pătrat cu o latură de 256 pixeli. Fiecare țiglă este asociată cu o anumită latitudine, longitudine și nivel de mărire și conține o parte din harta lumii într-o proiecție comună Mercator.

La nivelul de mărire 1, întregul Pământ (sau mai precis o parte din suprafața pământului în regiune între 85,05 ° N și S) este acoperit de patru plăci.

Vom reveni la numerele de pe placi. Fiecare piesă este un pătrat cu o latură de 256 de pixeli, deci există aproximativ 49 de mile pe pixel:

Winrt, carte de bing

La nivelul de mărire 2, întregul Pământ este acoperit cu 16 plăci:

Winrt, carte de bing

Aceste plăci reprezintă și pătrate cu o latură de 256 pixeli, astfel încât la ecuator fiecare pixel corespunde la aproximativ 24 de mile.

Fiecare țiglă cu nivel tot mai mare de 1 acoperă aceeași suprafață ca și cele patru dale cu creșterea nivelului 2. Încasările de descompunere în conformitate cu același principiu cu creșterea nivelului 3 Harta este format din 64 de plăci, cu creșterea nivelului de 4 - 256 dale și așa mai departe până la nivelul 21, în care (cel puțin teoretic) pământul este acoperit cu mai mult de 4 baruri - 2 trilioane milliona dar orizontal și 2 ppm de verticală, cu o rezoluție de până la 3 inch per pixel la ecuator.







Cum este rezonabil să organizăm depozitarea a numeroase plăci? Trebuie remarcat faptul că dala este identificat prin trei parametri - latitudine, longitudine, și crește nivelul, și pentru o eficiență maximă în furnizarea de plăci de date de la o dală serviciu web care acoperă o zonă, acesta ar trebui să fie stocate pe servere apropiate unul de altul.

Este nevoie de o schemă elaborată de numerotare. Fiecare piesă are un quadkey unic (quadkey). Modelele URI primite de la serviciul web de hartă Bing conțin un "", care este umplut cu un link către placa reală. În cele două diagrame de mai sus, patru blocuri de plăci de beton sunt indicate în colțul din stânga sus. Principalele zerouri sunt importante! Numărul de cifre într-o cheie quadrică este egal cu nivelul de mărire, adică dalele cu un nivel de mărire de 21 sunt identificate prin cvadrupluri formate din 21 de cifre.

Kvadroklyuch constă doar din numerele 0,1,2 și 3, adică kvadroklyuchi reprezintă de fapt numerele scrise în radix 4. În numerele de sistem binar 0,1,2, și 3 sunt reprezentate ca 00,01,10 și 11. primul bit determină verticală, iar al doilea - să coordoneze orizontală. Astfel, biții corespund cu "coroana" de longitudine și latitudine.

După cum ați văzut, fiecare țiglă cu un nivel de mărire de 1 corespunde a patru plăci cu un nivel de mărire de 2; Aceste plăci pot fi văzute în contextul unei relații părinte / copil. Cheia quad a descendentului începe întotdeauna cu aceleași cifre ca și cheia quad a părintelui, dar se adaugă încă o cifră, în funcție de locația descendentului față de părinte. Cheia parentală a părintelui poate fi determinată din cheia quad a descendentului prin simpla tăiere a ultimei cifre.

Pentru a utiliza serviciul online Bing Maps, trebuie să calculeze latitudinea și longitudinea kvadroklyuch. Codul de mai jos metoda GetLongitudeAndLatitude arată primul pas - conversia latitudinea și longitudinea unei valori relative duble de tip geolocator variind de la 0 la 1, iar apoi valorile întregi:

Valoarea BITRES, egală cu 29, este compusă din 21 de biți în cvadrulplului nivelului de mărire 21 și 8 biți din mărimea dalelor; Astfel, aceste valori întregi determină latitudinea și longitudinea până la cel mai apropiat pixel al plăcii cu mărirea maximă. Calculul integerLongitude este trivial, dar integerLatitude este mai greu de calculat, deoarece în proiecția Mercator, compresia latitudinală are loc atunci când se îndepărtează de ecuator.

Exemplu: centrul Parcului Central din New York are o longitudine de -73.965368 și o latitudine de 40.783271. Valorile relative ale dublei (până la câteva cifre) sunt 0.29454 și 0.3752. 29-biți valorile întregi (enumerate în formă binară și grupate în patru cifre pentru lizibilitate) arată astfel:

Să presupunem că avem nevoie de latitudine și longitudine la un nivel de mărire de 12. Pentru a face acest lucru, separați primele 12 cifre ale valorilor întregi de longitudine și latitudine. (Aveți grijă! Se schimbă gruparea de cifre.)

Pentru a două numere binare formate kvadroklyuch, acestea trebuie să fie combinate într-un număr în Radix 4. Asigurați-vă în biții de codificare nu avea succes fără enumerarea directă, dar pentru claritate, puteți dubla doar toți biții de latitudine și se adaugă două valori ca și în cazul în care au fost înregistrate pe baza 4:

Cheia quad rezultată este înlocuită cu substituentul "" din modelele URI primite de la serviciul web. URI astfel construit identifică un bitmap pătrat cu o latură de 256 pixeli.

Mai jos este un fragment al RotatingMap, care construiește o cheie quad prin trunchierea valorilor întregi de latitudine și longitudine. Pentru claritate, logica a fost împărțită: mai întâi este construit un întreg lung și apoi un șir:

Tasta quad identifică țigla care conține latitudinea și longitudinea dorită, dar locația cu valorile exactă latitudine și longitudine este undeva în acest fișier. Locația pixelului în țiglă poate fi determinată cu 8 cifre din întreaga latitudine și longitudine care urmează după cifrele necesare pentru quadrolex.

Lucrarea se apropie de sfârșit. Având în vedere că întreaga pagină ar trebui să fie închise cu dale pătrate cu latura de 256 pixeli, iar poziția actuală este în centrul ecranului, undeva în dala centrală, procesorul SizeChanged determină numărul de plăci necesare, și, prin urmare, cât de multe elemente care aveți nevoie pentru a crea imaginea. Numele câmpului sqrtNumTiles înseamnă "rădăcina pătrată a numărului de plăci". Ecranul 1366 x 768 pixeli va fi egală cu valoarea 9. Numărul total de inele (și elemente de imagine) egal cu pătratul acestei cantități, adică 81:

Această lucrare se face în metoda RefreshDisplay. Se iterează prin elementele Imagine și definește cheia quad (și, prin urmare, URI-ul) pentru fiecare element:

Rămâne să se ia în considerare codul privind butoanele din linia de aplicare. Butoanele de mărire și micșorare sunt blocate și reactive în funcție de nivelurile minime și maxime de zoom pentru modul curent, deși (cum am menționat anterior), alte părți ale programului "știu" că nivelul maxim de zoom este 21:

Zonele familiare ale hărții după turn arata neobișnuit - ca de exemplu, insula Manhattan în următoarea imagine:

Winrt, carte de bing

Dar dacă stați într-un loc necunoscut cu o tabletă și încercați să aflați unde vă aflați, rotirea hărții împreună cu mișcarea dvs. poate fi foarte utilă. Poate că, într-o zi, etichetele cu numele orașelor și străzilor se vor roti automat.







Trimiteți-le prietenilor: