api.orange.pl api.orange.pl/locateterminal tutorial dla budujacych ˛ aplikacje lokalizacyjne (i nie tylko) wer. 1.1 Grzegorz Sabak, Orange Polska, SiPU październik 2012 api.orange.pl Spis treści Spis treści 1 Intro 2 api.orange.pl Wprowadzenie Przykład - przegladarka ˛ Przykład - Python 2 i 3 Przykład - PHP Przykład - Java 3 Integracja WWW WordPress Krok po kroku Plugin Lemon Mini W strone˛ klienta: JavaScript 4 Lokalizacja w sieci Orange Informacje podstawowe Dokładność lokalizacji 5 Zakończenie api.orange.pl Intro O tutorialu... Ten przewodnik przeznaczony jest dla osób, które chca˛ rozpoczać ˛ korzystanie z API telekomunikacyjnego udostepnianego ˛ (obecnie testowo przez Orange Polska). Zawiera przykłady kodu źródłowego w różnych jezykach ˛ programowania, które moga˛ być wykorzystanie do testowania swojego środowiska, badź ˛ jako ziarno na bazie którego zbudowana zostanie wieksza ˛ funkcjonalność. Pożyteczne techniki/narz˛edzia/protokoły Aby efektywnie skorzystać z tego przewodnika potrzebna jest podstawowa znajomość takich jezyków ˛ programowania jak Java, Perl i PHP (nieznajacy ˛ któregoś z nich moga˛ pominać ˛ pewne fragmenty). Dodatkowo, w trakcie czytania tutoriala warto uzupełnić swoja˛ wiedz˛e w nastepuj ˛ acych ˛ tematach (pod logami sa˛ linki do stron domowych projektów): - Ajax -pozwala na asynchroniczne uzupełnienie zawartości strony WWW, - jQuery - biblioteka JavaScript, - geoJSON - format kodowania obiektów GIS jako obiektów JSON, - Firebug - dodatek do Firefoxa wspierajacy ˛ development dla Internetu, - WampServer - Apache, PHP, MySQL na Windowsie, - WordPress - oprogramowanie do publikacji w Internecie, - Eclipse - zintegrowane środowisko programistyczne. api.orange.pl api.orange.pl 1 Intro 2 api.orange.pl Wprowadzenie Przykład - przegladarka ˛ Przykład - Python 2 i 3 Przykład - PHP Przykład - Java 3 Integracja WWW WordPress Krok po kroku Plugin Lemon Mini W strone˛ klienta: JavaScript 4 Lokalizacja w sieci Orange Informacje podstawowe Dokładność lokalizacji 5 Zakończenie api.orange.pl api.orange.pl Wprowadzenie Wprowadzenie api.orange.pl - portal informacyjny portal poświecony ˛ Telecom Web Services w sieci Orange Polska informacje umożliwiajace ˛ szybki start dokumentacja i FAQ udostepnione ˛ usługi: SMS, USSD, lokalizacja przykłady aplikacji hasło dostepu: ˛ przydzielane indywidualnie api.orange.pl - API do usług telco URL do wywoływania usług telekomunikacyjnych Komunikacja szyfrowana z autoryzacja˛ HTTP Basic bezpłatne (na chwile˛ obecna) ˛ bezpieczne dla abonentów sieci Orange w fazie testów - nie wszystko zawsze działa hasło dostepu: ˛ uzyskuje sie˛ wysyłajac ˛ SMSa o treści: API na numer 551 api.orange.pl api.orange.pl Przykład - przegladarka ˛ Przykłady Korzystanie z API - przykłady W przedstawionych przykładach należy wprost w kodzie źródłowym zastapić ˛ wartościami nastepuj ˛ ace ˛ ciagi ˛ znaków: API_USER - indywidualny login użytkownika API, najcz˛eściej w postaci 48501XXXXXX. API_PASSWORD - hasło (coś w rodzaju D873MFO0QEDF56E), API_MSISDN - nr tel. dla którego wywoływana jest funkcja API (np. lokalizowanego terminala) w postaci 501YYYYYY. Korzystanie z API przez przegladark˛ ˛ e WWW W oknie przegladarki ˛ wpisujemy: https://api.orange.pl/sendussd/?to=API_MSISDN&msg=Orange+API+rules+OK Serwer pyta o autoryzacje. ˛ Podajemy w odpowiednich polach API_USER i API_PASSWORD Użytkownik o numerze telefonu API_MSISDN otrzymuje ciekawe hasło. W oknie przegladarki ˛ widzimy potwierdzenie przyjecia ˛ wiadomości przez serwer: 1 2 3 4 1 2 3 4 5 <?xml version="1.0" encoding="utf-8" ?> <response> <result>4f423e1d6978c683799495</result> <deliveryStatus>MessageWaiting</deliveryStatus> </response> api.orange.pl api.orange.pl Przykład - Python 2 i 3 Przykład - Python 2 Korzystanie z API w skryptach Python 2 Poniżej przedstawiono przykładowy kod źródłowy w jezyku ˛ Python wysyłajacy ˛ zapytanie o lokalizacje˛ terminala. Plik jest również załaczony ˛ tutaj: orangeapi2.py 1 2 from base64 import b64encode from httplib import HTTPSConnection 3 4 import urllib 5 6 7 8 #dane uzytkownika API apiusr = b"API_USER" apipwd = b"API_PASSWORD" 9 10 11 12 #parametry wywolania API params_loc = urllib.urlencode({’msisdn’: API_MSISDN}) params_msg = urllib.urlencode({’msg’: ’Orange API rules OK’, ’to’: API_MSISDN}) 13 14 15 16 #zapytanie do serwera userpasswd = b64encode(apiusr+b":"+apipwd).decode("ascii") headers = { ’Authorization’ : ’Basic %s’ % userpasswd } 17 18 19 20 21 conn = HTTPSConnection("api.orange.pl") conn.request(’GET’, ’/terminallocation?’+params_loc, headers = headers) #conn.request(’GET’, ’/sendussd?’+params_msg, headers = headers) #conn.request(’GET’, ’/sendsms?’+params_msg, headers = headers) 22 23 24 25 26 27 28 29 #analiza odpowiedzi z serwera response = conn.getresponse() print(response.status, response.reason) print() data = response.read() print(data) conn.close() api.orange.pl api.orange.pl Przykład - Python 2 i 3 Przykład - Python 3 Korzystanie z API w skryptach Python 3 W wersji trzeciej Pythona wszystko jest tak samo, tylko umieszczone w innych modułach :) Plik źródłowy jest również załaczony ˛ tutaj: orangeapi3.py 1 2 from http.client import HTTPSConnection from base64 import b64encode 3 4 import urllib.parse 5 6 7 8 #dane uzytkownika API apiusr = b"API_USER" apipwd = b"API_PASSWORD" 9 10 11 12 #parametry wywolania API params_loc = urllib.parse.urlencode({’msisdn’: API_MSISDN}) params_msg = urllib.parse.urlencode({’msg’: ’Orange API rules OK’, ’to’: API_MSISDN}) 13 14 15 16 #zapytanie do serwera userpasswd = b64encode(apiusr+b":"+apipwd).decode("ascii") headers = { ’Authorization’ : ’Basic %s’ % userpasswd } 17 18 19 20 21 conn = HTTPSConnection("api.orange.pl") conn.request(’GET’, ’/terminallocation?’+params_loc, headers = headers) #conn.request(’GET’, ’/sendussd?’+params_msg, headers = headers) #conn.request(’GET’, ’/sendsms?’+params_msg, headers = headers) 22 23 24 25 26 27 28 29 #analiza odpowiedzi z serwera response = conn.getresponse() print(response.status, response.reason) print() data = response.read() print(data) conn.close() api.orange.pl api.orange.pl Przykład - PHP Przykład - PHP Korzystanie z API w skryptach PHP Jak można zauważyć PHP jest również dość kompaktowe w porównaniu do nastepnego ˛ przykładu w Javie :) Plik źródłowy jest również załaczony ˛ tutaj: orangeapi.php 1 2 3 4 <?php //dane uzytkownika API $username = ’API_USER’; $password = ’API_PASSWORD’; 5 6 7 //parametry wywolania API $params_loc = array(’msisdn’=>’API_MSISDN’); 8 9 10 $params_msg = array(’to’=>’API_MSISDN’, ’msg’=>’Orange API rules OK’); 11 12 13 $url = ’https://api.orange.pl/terminallocation?’ . http_build_query($params_loc); //$url = ’https://api.orange.pl/sendussd?’ . http_build_query($params_msg); 14 15 16 17 18 19 $context = stream_context_create(array( ’http’ => array( ’header’ => "Authorization: Basic " . base64_encode("$username:$password") ) )); 20 21 22 //zapytanie do serwera $page = file($url, false, $context); 23 24 25 26 27 28 29 //odpowied z serwera foreach ($page as $part) { echo $part; } ?> api.orange.pl api.orange.pl Przykład - Java Przykład - Java Korzystanie z API w jezyku ˛ Java W załaczniku ˛ przedstawiono przykładowy kod źródłowy w jezyku ˛ Java wysyłajacy ˛ krótki tekst jako wiadomość USSD. Przed kompilacja˛ pliku należy dociagn ˛ ać ˛ biblioteki httpclient w wersji 4.1 bed ˛ ace ˛ cz˛eścia˛ Apache HttpComponents. Przejście przez proxy Jeśli połaczenie ˛ do api.orange.pl wymaga przejścia przez proxy, w kodzie należy umieścić nastepuj ˛ ace ˛ linie: 1 2 HttpHost proxy = new HttpHost("http.proxy.com", 8080, "http"); httpclient.getParams().setParameter(ConnRoutePNames.DEFAULT_PROXY, proxy); Zaminiajac ˛ oczywiście nazwe˛ hosta (powyżej http.proxy.com) i numer portu (8080) na właściwe. Dla użytkowników maven’a Programiści korzystajacy ˛ z pakietu maven moga˛ dociagn ˛ ać ˛ właściwa˛ wersje˛ httpclient’a poprzez dodanie do pliku pom.xml nastepuj ˛ acej ˛ definicji zależności: 1 2 3 4 5 6 <dependency> <groupId>org.apache.httpcomponents</groupId> <artifactId>httpclient</artifactId> <version>4.1.3</version> <scope>compile</scope> </dependency> api.orange.pl Integracja WWW 1 Intro 2 api.orange.pl Wprowadzenie Przykład - przegladarka ˛ Przykład - Python 2 i 3 Przykład - PHP Przykład - Java 3 Integracja WWW WordPress Krok po kroku Plugin Lemon Mini W strone˛ klienta: JavaScript 4 Lokalizacja w sieci Orange Informacje podstawowe Dokładność lokalizacji 5 Zakończenie api.orange.pl Integracja WWW WordPress Integracja WordPress Korzyści z integracji strony WWW z siecia˛ komunikacyjna˛ Wieksza ˛ interaktywość = wiekszy ˛ ruch Bezpieczeństwo Nowe konteksty np. lokalizacja Telekomunikacyjne wsparcie procesów biznesowych Jednym ze sposobów integracji jest przygotowanie plugina dla oprogramowania WordPress. Czym jest WordPress i dlaczego warto go używać? Najpopularniejszy silnik blogowy wybierany przez małych i najwiekszych ˛ (CNN, NYTimes, Nokia, TechCrunch, People, WordPress.com, blog.pl (Onet)) Napisany w PHP, oparty na MySQL, wykorzystuje CSS3 i JavaScript (jQuery) Łatwo modyfikowalny wyglad ˛ (motywy) i funkcjonalność (plug-iny) 21k+ gotowych pluginów w oficjalnym repozytorium (darmowych) 1.6k+ gotowych motywów (również darmowych) Łatwa instalacja i aktualizacja, przyjazna administracja Aktywnie rozwijany przez społeczność developerów Architektura przyjazna dostosowywaniu: API, szablony, zaczepy: (akcje i filtry) Bezpieczeństwo: „czyszczenie” danych, role użytkowników, prawa dostepu ˛ do treści api.orange.pl Integracja WWW Krok po kroku 1. Przygotowanie środowiska 1 2 3 Zainstaluj WAMP - zawiera Apache, MySql Zainstaluj WordPress - aktualna wersja do ściagni ˛ ecia ˛ ze strony projektu Zainstaluj Eclipse lub dowolne inne zintegrowane środowisko deweloperskie wspierajace ˛ PHP 2. Praca za PROXY Jeśli PC na którym zainstalowane jest środowisko znajduje sie˛ za proxy HTTP, to w pliku wp-config.php znajdujacym ˛ sie˛ w głównym katalogu instalacji WordPressa należy dodać nastepuj ˛ acy ˛ kod - podstawiajac ˛ odpowiednie wartości. define( ’WP_PROXY_HOST’, ’adres.ip.proxy’ ); define( ’WP_PROXY_PORT’, ’8080’ ); 3. Instalacja pluginu 1 2 3 Utwórz katalog wp-content/plugins/lemon-mini Umieść w tym katalogu plik lemon-mini.php (z załacznika ˛ ) Aktywuj plugin w konsoli WordPress api.orange.pl Integracja WWW Krok po kroku Integracja WordPress lemon-mini Lemon Mini to plugin dla WordPressa, którego główne funkcjonalności to: Zamienianie w treści wpisu słowa kluczowego [lmini-locate msisdn="" user="" passwd=""/] na tekst informujacy ˛ o lokalizacji. Argumenty: msisdn - lokalizowany numer, user - użytkownik api.orange.pl, passwd - hasło użytkownika. Udostepnianie ˛ filtra lmini-locate, który może być wykorzystywany przez inne rozszerzenia WordPressa. Uzyskana lokalizacja przechowywane jest przez 60 sekund. Po tym czasie każde odświeżenie strony powoduje wywołanie API do lokalizacji terminala. Wiecej ˛ informacji na temat plugina oraz jego najbardziej aktualna˛ wersje˛ można pobrać ze strony telco21.pl. telco21.pl telco21.pl jest strona˛ dedykowana˛ koncepcji Telco 2.1, polegajacej ˛ na dalszym uproszczeniu sposobów korzystania z funkcjonalności telekomunikacyjnych udostepnianych ˛ przez operatorów sieci. Na stronie umieszczony dostepna ˛ jest zawsze najnowsza wersja plugina. api.orange.pl Integracja WWW Krok po kroku plugin-mini.php Kod źródłowy plugina znajduje sie˛ w załaczniku ˛ . Warto zwrócić uwage˛ na jego kilka poniższych fragmentów. Rejestracja filtra lmini-locate. 29 add_filter( ’lmini-locate’, ’lmn_localize’, 10, 3 ); Po wywołaniu funkcji apply_filters( ’lmini-locate’, $msisdn, $user, $passwd ) zostanie wywołana funkcja lmn_localize(), do której przekazane zostana˛ trzy argumenty. Rejestracja shortcode’u lmini-locate. 32 add_shortcode( ’lmini-locate’, ’lmn_shortcode_handler’ ); Jeśli w treści posta pojawi sie˛ słowo kluczowe [lmini-locate /], to zostanie ono zamienione na wartość tekstowa˛ zwrócona˛ przez funkcje˛ lmn_shortcode_handler(). Zakodowanie nazwy użytkownika i hasła: Funkcja base64_encode(). 40 $usrpwd = base64_encode( "{$options[’user’]}:{$options[’passwd’]}" ); Zapamietanie ˛ lokalizacji na 60 sekund w celu zmniejszenia liczby odwołań do API. Użycie funkcji: get_transient(), set_transient(). 75 $loc = get_transient( ’lmn_location_’ . $msisdn ); 76 77 78 79 80 if ( $temp_loc ) return $loc; else { $loc = lmn_call_orange_api( $options, ’terminallocation’, $query ); 81 // zapamietaj lokalizacje przez 60 sek. set_transient( ’lmn_location_’ . $msisdn, $loc, 60 ); 82 83 84 } api.orange.pl Integracja WWW W strone˛ klienta: JavaScript JavaScript Programowanie dla browsera Cz˛esto zachodzi potrzeba/cheć/konieczność ˛ by o lokalizacje˛ abonenta wystapić ˛ z poziomu skryptu wykonywanego prze przegladark˛ ˛ e. W takim przypadku należy zwrócić uwage˛ na dwie rzeczy: Wywołanie API lokalizacyjnego pod czas generowania kodu HTML opóźni moment wyświetlenia strony o jakieś 4-5 sek. potrzebne na zlokalizowanie terminala. Obowiazuje ˛ same origin policy, czyli zasada, która mówi, że skrypt wykonywany przez przegladark˛ ˛ e może łaczyć ˛ sie˛ jedynie z serwerem, z którego został pobrany. Problem pierwszy można rozwiazać ˛ korzystajac ˛ z Ajaxa, co pozwoli na wyświetlenie strony i asynchroniczne uzupełnienie jej po wykonaniu lokalizacji. Jednym z rozwiaza ˛ ń drugiej kwestii jest wykorzystanie niewielkiego skryptu umieszczonego na serwerze, który bedzie ˛ pełnił pożyteczna˛ role˛ proxy i dodatkowo przekonwertuje otrzymanego XML-a na obiekt GeoJSON. To rozwiazanie ˛ zostało opisane na nastepnych ˛ slajdach. Przykłady bardziej zaawansowanych zastosowań i innych podejść do rozwiazania ˛ powyższych kwestii zamieszczono na blogu telco21.pl. api.orange.pl Integracja WWW W strone˛ klienta: JavaScript lmini.json.php 1 2 <?php require_once( ’../../../wp-load.php’ ); 3 4 5 header( ’Cache-Control: no-cache, must-revalidate’); // HTTP/1.1 header( ’Content-Type: application/json’ ); 6 7 parse_str($_SERVER[’QUERY_STRING’], $query); 8 9 10 define(’API_USER’, ’’); // tu wpisz nazwe uzytkownika define(’API_PASSWORD’, ’’); // tu wpisz haslo 11 12 $loc = apply_filters( ’lmini-locate’, $query[’msisdn’], API_USER, API_PASSWORD ); 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 $response = array(); $response[’type’] = ’FeatureCollection’; $response[’features’] = array(); $response[’features’][]= array( ’type’ => ’Feature’, ’geometry’ => array( ’type’ => ’Point’, ’coordinates’ => array( floatval( $loc[’longitude’] ), floatval( $loc[’latitude’] ), ) ), ’properties’ => array( ’timestamp’=>$loc[’timestamp’], ) 29 30 31 32 ); echo json_encode( $response ); ?> Komentarz Skrypt wywołuje zdefiniowany w pluginie lemon-mini filtr lmoni-locate, który zwraca lokalizacje˛ abonenta. Nastepnie ˛ przygotowuje tablice˛ zgodna˛ ze specyfikacja˛ GeoJSON, która funkcja˛ PHP json_encode() koduje tablice˛ do obiektu JSON. api.orange.pl Integracja WWW W strone˛ klienta: JavaScript locate.html 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 <!DOCTYPE HTML> <html> <head> <meta charset="utf-8"> <title>Localizacja przy pomocy api.orange.pl</title> <style type="text/css"> .in-progress { font-style: italic; } </style> <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.7/jquery.min.js"></script> <script> $(document).ready(function(){ $.getJSON(’lmini.json.php’, {msisdn:’’} // tu wpisz lokalizaowny numer ).done (function ( data ){ var msg = "Zlokalizowano: " + data.features[0].geometry.coordinates[0] + "," + data.features[0].geometry.coordinates[1]; $(’#location’).text(msg).removeClass(’in-progress’); }); }); </script> </head> <body> <span id="location" class="in-progress">Location in progress...</span> </body> </html> Komentarz Strona korzysta z biblioteki jQuery. Po wyświetleniu zawartości strony nastepuje ˛ asynchroniczne odwołanie w tle do serwera (skrypt lmini.json.php). Otrzymany w odpowiedzi obiekt JSON jest dekodowany, a na podstawie otrzymanych danych uaktualniana jest zawartość strony (bez konieczności jej odświeżenia). api.orange.pl Lokalizacja w sieci Orange 1 Intro 2 api.orange.pl Wprowadzenie Przykład - przegladarka ˛ Przykład - Python 2 i 3 Przykład - PHP Przykład - Java 3 Integracja WWW WordPress Krok po kroku Plugin Lemon Mini W strone˛ klienta: JavaScript 4 Lokalizacja w sieci Orange Informacje podstawowe Dokładność lokalizacji 5 Zakończenie api.orange.pl Lokalizacja w sieci Orange Informacje podstawowe Wprowadzenie Podstawowe informacje Terminal mobilny: urzadzenie ˛ użytkownika + karta SIM, komórka: obszar zasiegu ˛ radiowego. W sieci Orange lokalizacja terminali wykonywana jest metoda˛ Cell-Id - jako lokalizacja zwracany jest punkt przypisany identyfikatorowi komórki. Środek komórki: punkt zwracany jako lokalizacja terminala znajdujacego ˛ sie˛ w komórce - oznaczany pomarańczowym trójkatem ˛ na prezentowanych mapkach. Komórki pokrywaja˛ sie, ˛ w wybrane miejsce może należeć do wielu komórek sieci telefonii mobilnej. Dokładność lokalizacji zależy od typu obszaru, na którym znajduje sie˛ terminal. Dokładność lokalizacji zależy od tego czy terminal jest w sieci 2G (wieksza) ˛ czy 3G (mniejsza). Informacja o lokalizacji zwracana jest po ok 4-5 sekundach od zapytania. api.orange.pl Lokalizacja w sieci Orange Informacje podstawowe Wprowadzenie Problemy praktyczne z wykorzystaniem lokalizacji Relatywnie duży (w stosunku do systemu GPS) bład ˛ lokalizacji - wiecej ˛ informacji na nastepnych ˛ slajdach Przy wielokrotnej lokalizacji nieporuszajacego ˛ sie˛ terminala moga˛ być zwracane jego różne lokalizacje (pozorny ruch terminala). Bardziej zaawansowane telefony (działajace ˛ w sieci 3G) bed ˛ a˛ lokalizowane z wiekszym ˛ błedem ˛ niż te mniej zaawansowane. Nie można zakładać, że jako lokalizacja terminala wskazany zostanie środek komórki najbliższy rzeczywistemu położeniu terminala. Współrz˛edne środków komórek sa˛ "poprawiane" przez operatora sieci - z czasem zmieniaja˛ swoje położenie. Położenie środków komórek Na nastepnych ˛ slajdach przedstawiono mapki, na których pomarańczowymi trójkatami ˛ zaznaczono środki komórek na obszarach w pobliżu wybranych lokalizacji. api.orange.pl Lokalizacja w sieci Orange Informacje podstawowe Okolice PW EiTI api.orange.pl Lokalizacja w sieci Orange Informacje podstawowe Okolice Orange Labs api.orange.pl Lokalizacja w sieci Orange Informacje podstawowe Okolice UWM api.orange.pl Lokalizacja w sieci Orange Informacje podstawowe Okolice PŁ api.orange.pl Lokalizacja w sieci Orange Dokładność lokalizacji Dokładność lokalizacji Wprowadzenie Poniżej przedstawiono (za [5]) wyniki testów dokładności lokalizacji w sieci komórkowej Orange przeprowadzonych w latach 2010-2011. Jako bład ˛ lokalizacji przyjmuje sie˛ odległość od punktu wskazanego przez odbiornik GPS do punktu wskazanego przez usługe˛ lokalizacji terminala w sieci komórkowej. Typy analizowanych obszarów i dróg highway- fragmenty autostrad major- drogi ekspresowe, drogi krajowe regular- drogi inne: wojewódzkie, powiatowe, itp. city- obszary ścisłych centrów miast town- obszary małych miast, duże miasta poza ścisłym centrum rural- obszary pozamiejskie api.orange.pl Lokalizacja w sieci Orange Dokładność lokalizacji Bład ˛ lokalizacji Statystyki błedu ˛ lokalizacji - wartości w km typ obiektu n σ Q25 Q50 ē highway 3801 2.63 1.93 1.17 2.24 major 13147 2.00 1.58 0.83 1.54 regular 6889 3.73 2.47 2.06 3.30 city 729 0.38 0.31 0.17 0.31 town 2482 1.16 1.00 0.47 0.86 rural 6044 3.66 1.90 2.42 3.39 Q75 3.60 2.79 4.74 0.49 1.50 4.61 emax Q75 − Q25 20.37 2.43 10.46 1.97 28.83 2.70 1.62 0.32 7.77 1.03 17.53 2.19 Analiza Na podstawie uzyskanych wyników można wywnioskować, że dokładność metody Cell-Id jest najwieksza ˛ dla obszarów typu city. Bład ˛ lokalizacji dla 25% przypadków był mniejszy niż 0.17 km, a dla 75% mniejszy niż 0.49 km. Dużo gorszej dokładności lokalizacji metoda˛ Cell-Id należy spodziewać sie˛ dla dróg typu regular i obszarów typu rural. Bład ˛ średni lokalizacji wynosi dla nich odpowiednio 3.47 km i 3.67 km. Sa˛ to wartości kilkukrotnie wieksze ˛ niż wartość błedu ˛ średniego dla obszaru city. Potwierdza to powszechne przekonanie, że w centrach miast operatorzy telefonii komórkowej buduja˛ znacznie wiecej ˛ komórek o mniejszym zasiegu, ˛ by w ten sposób zaspokoić istniejac ˛ a˛ tam potrzebe˛ wiekszej ˛ pojemności sieci wynikajac ˛ a˛ z koncentracji ludności. Należy zauważyć, że dla wszystkich typów dróg i obszarów stosunek odchylenia standardowego do wartości średniej jest powyżej 50%, a w przypadku city wynosi 93.2%. Świadczy to o dużym rozproszeniu wartości błedu. ˛ Porównujac ˛ jednak wartości rozstepów ˛ miedzykwartylowych ˛ (kolumna Q75 − Q25 ), można zauważyć, że wartość dla dróg typu regular jest kilkukrotnie wieksza ˛ niż dla obszarów typu city. Oznacza to, że rozkład błedu ˛ dla dużych miast jest znacznie mniej rozproszony niż dla dróg wojewódzkich. api.orange.pl Lokalizacja w sieci Orange Dokładność lokalizacji Statystyki błedu ˛ lokalizacji - histogramy cz˛estości 0.35 0.30 0.25 0.20 0.15 0.10 0.05 0.00 city town rural 0 2 4 6 8 10 error [km] 0.35 0.30 0.25 0.20 0.15 0.10 0.05 0.00 highway major regular 0 2 4 6 error [km] 8 10 api.orange.pl Zakończenie Historia dokumentu data wer. autor opis 02.2012 1.0 Grzegorz Sabak wersja poczatkowa ˛ (PHP, Python, dokładność lokalizacji) 10.2012 1.1 Grzegorz Sabak dodano opis pluginu dla WordPress, korzystanie z JavaScript, Ajax, GeoJSON Odnośniki I Strona główna api.orange.pl http://api.orange.pl I Oficjalna strona domowa Pythona http://www.python.org I Oficjalna strona domowa PHP http://www.php.net I Strona domowa WordPress http://www.wordpress.org/ [5] G. Sabak. Modelowanie lokalizacji użytkowników sieci telefonii komórkowej dla potrzeb Inteligentnych Systemów Transportowych. Wojskowa Akademia Techniczna, 2011. Wersja PDF api.orange.pl Zakończenie Zamiast zakończenia