Pobranie informacji o wysokości punktu sprowadza się do wysłania żądania na określony adres URL. W Google Elevation API istnieją dwa rodzaje danych odpowiedzi:
- XML - wówczas żądanie jest wysyłane na adres http://maps.google.com/maps/api/elevation/xml
- JSON - żądanie jest wysyłane na
http://maps.google.com/maps/api/elevation/json
Dostępne parametry:
- locations - podajemy w momencie, kiedy chcemy poznać wysokości tylko punktu/ów podanych w tym parametrze; poszczególne parametry podaje się jako parę szerokości i długości geograficznej rozdzieloną przecinkiem (np. 51.1113,17.0343); kolejne punkty rozdzielane są znakiem | (np. 51.1113,17.0343|51.3143,17.0618)
- path - parametry są podawane w taki sam sposób jak powyżej, jednak w wyniku będą przesłane paramtery dla całej ścieżki w określonej ilości parametrem samples
- samples (wymagany w przypadku paramteru path) - ilość próbek z określonej trasy (stała odległość pomiędzy próbkami)
- sensor - true lub false - w zależności od tego czy nasza aplikacja wykorzystuje urządzenie typu GPS lub inne do lokalizacji (istotne w urządzeniach mobilnych)
Otrzymane odpowiedzi dla parametru locations:
- XML (http://maps.google.com/maps/api/elevation/xml?locations=51.1113,17.0343|51.3143,17.0618&sensor=true):
<elevationresponse> <status>OK</status> <result> <location> <lat>51.1113000</lat> <lng>17.0343000</lng> </location> <elevation>122.0019836</elevation> </result> <result> <location> <lat>51.3143000</lat> <lng>17.0618000</lng> </location> <elevation>177.1737976</elevation> </result> </elevationresponse>
- JSON (http://maps.google.com/maps/api/elevation/json?locations=51.1113,17.0343|51.3143,17.0618&sensor=true):
{ "status": "OK", "results": [ { "location": { "lat": 51.1113000, "lng": 17.0343000 }, "elevation": 122.0019836 }, { "location": { "lat": 51.3143000, "lng": 17.0618000 }, "elevation": 177.1737976 } ] }
- XML (http://maps.google.com/maps/api/elevation/xml?path=51.1113,17.0343|51.3143,17.0618&samples=3&sensor=true)
<ElevationResponse> <status>OK</status> <result> <location> <lat>51.1113000</lat> <lng>17.0343000</lng> </location> <elevation>122.0019836</elevation> </result> <result> <location> <lat>51.2128008</lat> <lng>17.0480197</lng> </location> <elevation>128.9792175</elevation> </result> <result> <location> <lat>51.3143000</lat> <lng>17.0618000</lng> </location> <elevation>177.1737976</elevation> </result> </ElevationResponse>
- JSON (http://maps.google.com/maps/api/elevation/json?path=51.1113,17.0343|51.3143,17.0618&samples=3&sensor=true)
{ "status": "OK", "results": [ { "location": { "lat": 51.1113000, "lng": 17.0343000 }, "elevation": 122.0019836 }, { "location": { "lat": 51.2128008, "lng": 17.0480197 }, "elevation": 128.9792175 }, { "location": { "lat": 51.3143000, "lng": 17.0618000 }, "elevation": 177.1737976 } ] }
Uzyskane w ten sposób wyniki możemy przedstawić na wykresie np. wykorzystując Google Charts. W tym celu posłużymy się prostym skryptem PHP, który wygeneruje i przekieruje na odpowiedni adres (uwaga: skrypt jest na tyle prosty, że nie ma żadnej obsługi błędów - jeśli chcesz wykorzystać go u siebie na stronie radziłbym dodać podstawową obsługę błędów :)). I tak przykładowo sprawdzając trasę z Wrocławia do Trzebnicy z 80 próbkami uzyskamy następujący skrypt oraz wynik.
<?php $data = json_decode( file_get_contents('http://maps.google.com/maps/api/elevation/json?path=51.10179728957699,17.027435302734375|51.3185971205743,17.054901123046875&samples=80&sensor=false'), true); $elevation = array(); foreach($data['results'] as $one) { $elevation[] = $one['elevation']; } header('Location: http://chart.apis.google.com/chart?cht=lc&chs=575x340&chd=t:'. implode(',', $elevation).'&chds='.min($elevation).','.max($elevation).'&chxr=1,'. min($elevation).','.max($elevation).'&chxt=x,y');
A oto droga, którą badaliśmy:
Więcej informacji o usłudze Google Elevation znajdziecie na oficjalnej stronie API.
A na koniec myślę, że ciekawa prezentacja o zasobach Google Geo przygotowana na 2010 rok
4 komentarze:
Ha, fajnie.
Szkoda, że miesiąc temu nie znalazłem tego artykułu, pewnie bardzo by się przydał i jakieś pytania mógł bym zadać. A teraz już po ptokach. Skorzystałem z tego API Googla i powstało coś takiego, zapraszam:
http://www.geocontext.org/publ/2010/04/profiler/pl
A można jakiś jeden płeny kod ? bo to tylko urywek php jest
Umieszczony kod php jest pełny.
Aby dostać dane z wyznaczonego fragmentu, należy zmienić adres URL podawany w funkcji file_get_contents na samym początku skryptu - sposoby preparowania URL są zawarte w samym poście :)
Faktycznie działa - po prostu wrzuciłem na krasnala na localhoscie i nie kumał funkcji file_get_contets
Prześlij komentarz