XML — Как преобразовать почтовый индекс в широту и долготу с помощью API Карт Google с PHP?

Я использую PHP для преобразования списка почтовых индексов + округ в широту и долготу. Я попытался с помощью API карты Google и simplexml_load_file() функционировать так:

$url ="http://maps.googleapis.com/maps/api/geocode/xml?address=WS9+8NS,+West+Midlands&sensor=false";
$result = simplexml_load_file($url);
print"<pre>";
print_r($result);

Теперь это работает нормально, так как я могу получить следующее:

SimpleXMLElement Object
(
[status] => OK
[result] => SimpleXMLElement Object
(
[type] => postal_code
[formatted_address] => Walsall, Walsall, West Midlands WS9 8NS, UK
[address_component] => Array
(
[0] => SimpleXMLElement Object
(
[long_name] => WS9 8NS
[short_name] => WS9 8NS
[type] => postal_code
)

[1] => SimpleXMLElement Object
(
[long_name] => Walsall
[short_name] => Walsall
[type] => Array
(
[0] => locality
[1] => political
)

)

[2] => SimpleXMLElement Object
(
[long_name] => Walsall
[short_name] => Walsall
[type] => postal_town
)

[3] => SimpleXMLElement Object
(
[long_name] => West Midlands
[short_name] => West Mids
[type] => Array
(
[0] => administrative_area_level_2
[1] => political
)

)

[4] => SimpleXMLElement Object
(
[long_name] => United Kingdom
[short_name] => GB
[type] => Array
(
[0] => country
[1] => political
)

)

)

[geometry] => SimpleXMLElement Object
(
[location] => SimpleXMLElement Object
(
[lat] => 52.6030230
[lng] => -1.9175368
)

[location_type] => APPROXIMATE
[viewport] => SimpleXMLElement Object
(
[southwest] => SimpleXMLElement Object
(
[lat] => 52.6013713
[lng] => -1.9188871
)

[northeast] => SimpleXMLElement Object
(
[lat] => 52.6040692
[lng] => -1.9161892
)

)

[bounds] => SimpleXMLElement Object
(
[southwest] => SimpleXMLElement Object
(
[lat] => 52.6020654
[lng] => -1.9182516
)

[northeast] => SimpleXMLElement Object
(
[lat] => 52.6033751
[lng] => -1.9168247
)

)

)

)

)

Теперь проблема в том, как мне вывести первую широту / долготу, а не все, мне нужны только эти два значения.

Обратите внимание, что широта / долгота являются динамическими при изменении адреса для каждого поиска.

1

Решение

От print_r Вы можете увидеть структуру контента. Тогда нужно следовать этому.

Это содержит значения:

$result->result->geometry->location

Таким образом, чтобы распечатать их отдельно, вы можете сказать:

print "lat: " . $result->result->geometry->location->lat;
print "lng: " . $result->result->geometry->location->lng;

Все вместе:

$url ="http://maps.googleapis.com/maps/api/geocode/xml?address=WS9+8NS,+West+Midlands&sensor=false";
$result = simplexml_load_file($url);
print "lat: " . $result->result->geometry->location->lat . " <br/>";
print "lng: " . $result->result->geometry->location->lng . " <br/>";
2

Другие решения

Лучше использовать их JSON API.

$url ="http://maps.googleapis.com/maps/api/geocode/json?address=WS9+8NS,+West+Midlands&sensor=false";
$result = file_get_contents($url);
print"<pre>";
$resultArray = json_decode($result, true);
print_r($result);

Тогда просто доступ как массив!

например

$resultArray['results']['geometry']['location']['lat']
$resultArray['results']['geometry']['location']['lng']

Я бы использовал cURL вместо содержимого файла, так как это дает больше контроля. Но это работает отлично.

Я также проверил бы $ resultArray, прежде чем пытаться что-либо с ним делать.

2

По вопросам рекламы [email protected]