public function geocode($address)
{
// This API does not support IPv6
if (filter_var($address, FILTER_VALIDATE_IP, FILTER_FLAG_IPV6)) {
throw new UnsupportedOperation('The ' . get_called_class() . ' provider does not support IPv6 addresses.');
}
if ('127.0.0.1' === $address) {
return $this->returnResults([$this->getLocalhostDefaults()]);
}
$query = sprintf($this->getGeocodeEndpointUrl(), urlencode($address), $this->getLimit());
$content = $this->executeQuery($query);
if (empty($content)) {
throw new NoResult(sprintf('Could not execute query "%s".', $query));
}
$doc = new \DOMDocument();
if (!@$doc->loadXML($content) || null === $doc->getElementsByTagName('searchresults')->item(0)) {
throw new NoResult(sprintf('Could not execute query "%s".', $query));
}
$searchResult = $doc->getElementsByTagName('searchresults')->item(0);
$places = $searchResult->getElementsByTagName('place');
if (null === $places || 0 === $places->length) {
throw new NoResult(sprintf('Could not execute query "%s".', $query));
}
$results = [];
foreach ($places as $place) {
$results[] = array_merge($this->getDefaults(), $this->xmlResultToArray($place, $place));
}
return $this->returnResults($results);
}