Jesteś tutaj: webmade.org >> porady >> php + mysql
autor: Patryk 'yarpo' Jar, ostatnia modyfikacja: 2007-11-15
geocode reverse
mapy Google
google maps
PHP 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 classZ 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ż:
blog
porady
artykuły
recenzje
wiadomości

© 2004-2008 copyright by webmade.org