Jesteś tutaj: webmade.org >> porady >> php + mysql
autor: Patryk 'yarpo' Jar, ostatnia modyfikacja: 2007-11-15
Mapy google są coraz popularniejsze w internecie. Ich dokumentacje można znaleźć pod adresem: http://www.google.com/apis/maps/documentation/
Niestety w dokumentacji tej brakuje bardzo przydatnej funkcji – otrzymywania nazwy miejscowości, gdy znane są współrzędne geograficzne. Na szczęście są możliwości rozwiązania tego problemu.
Opcja ta nazywa się geocode reverse i jest udostępniana przez różne firmy np. http://ws.geonames.org/findNearbyPlaceName?lat=52&lng=20&maxRows=1
W wyniku otrzymujesz kod XML:
<?xml version="1.0" encoding="UTF-8" standalone="no"?> <geonames> <geoname> <name>Polesie</name> <lat>52.0166667</lat> <lng>20.0166667</lng> <geonameId>761624</geonameId> <countryCode>PL</countryCode> <countryName>Poland</countryName> <fcl>P</fcl> <fcode>PPL</fcode> <distance>2.176104532865842</distance> </geoname> </geonames>
Zamiast kodu XML można uzyskać kod JSON - http://ws.geonames.org/findNearbyPlaceNameJSON?lat=52&lng=20. [patrz klasa ObjTree]
Oczywiście parametry lat oraz lng a także wartość maxRows można zmieniać wg potrzeb. Najczęściej kiedy chcesz odczytać lokalizację wielu miejscowości po kolei. Warto wtedy trochę zautomatyzować działanie.
Ostatnio miałem przyjemność :P popracować z mapami google i stworzyłem taką o to klasę, pomagającą odczytać dane z serwera. Po odczytaniu przechowuje ona wartości pobrane z serwera w swoich właściwościach:
<?PHP // class geocodeReverse // autor Patryk yarpo Jar // yarpo@poczta.onet.pl class geocodeReverse { private $x; private $y; private $countryCode; private $contryName; private $city; private $distance; private $maxRows; private $fileSize; private $xmlCode; // x - float, // y – float, // $rows - unsigned int, max numbers of cities nearby this location function __construct($x, $y, $rows) { $this->x = $x; $this->y = $y; $this->maxRows = $rows; $this->fileSize = 1024; $this->changeLocation($x, $y); } public function getCity() { return $this->city; } public function getXpos() { return $this->x; } public function getYpos() { return $this->y; } public function getLng() { return $this->x; } public function getLat() { return $this->y; } public function getCountryCode() { return $this->countryCode; } public function getCountryName() { return $this->countryName; } public function getDistance() { return $this->distance; } public function getMaxRows() { return $this->maxRows; } public function getFileSize() { return $this->fileSize; } public function setMaxRows($newValue) { $this->maxRows = $newValue; } public function setFileSize($newValue) { $this->fileSize = $newValue; } public function changeLocation($x, $y) { $this->x = $x; $this->y = $y; $url = 'http://ws.geonames.org/findNearbyPlaceName?lat='.$y.'&lng='.$x.'&maxRows='.$this->maxRows; $file = fopen($url, 'r'); $this->xmlCode = fread($file, $this->fileSize); fclose($file); // create an object from XML file (string) $xml = new SimpleXMLElement($this->xmlCode); $this->city = $xml->geoname->name; $this->x = $xml->geoname->lng; $this->y = $xml->geoname->lat; $this->countryCode = $xml->geoname->countryCode; $this->countryName = $xml->geoname->countryName; $this->distance = $xml->geoname->distance; } public function getXMLCode() { return $this->xmlCode; } }; // end of class
Z ciekawszych rzeczy, to wykorzystałem tu klasę PHP SimpleXMLElement, dzięki której przekształciłem kod XML w obiekt PHP [działanie podobne do wspomnianej wyżej ObjTree, tylko, że po stronie serwera].
Aby móc korzystać z tej klasy, należy stworzyć obiekt. Tworzy się go w ten sposób:
<?PHP include '/ble/blu/bla/geocodeReverse.php'; // $x = długość geograficzna // $y = szerokość geograficzna // $rows = max liczba wierszy wyświetlonych $geo = new geocodeReverse($x, $y, $rows); // przyklad zastosowania: echo 'Miejscowosc nazywa się '. $geo->getCity(); ?>
Jak widać kod jest dosyć prosty [aby nie powiedzieć prostacki. Zauważ, że nie sprawdza, czy nie pojawiają się jakieś błędy... Ale niech to już będzie zabawa dla ciebie – np. Sprawdzenie czy w ogóle coś zwrócił serwer oraz czy był to poprawny kod XML]. A w wyniku dostaje się prosty interfejs.
Patryk 'yarpo' Jar
szukaj: geocode reverse mapy Google google maps PHP
Osoby czytające tę publikację przeglądały również:
© 2004-2008 copyright by webmade.org