public function geocode($address)
{
if (false === filter_var($address, FILTER_VALIDATE_IP)) {
throw new UnsupportedOperation('The MaxMindBinary provider does not support street addresses.');
}
// This API does not support IPv6
if (filter_var($address, FILTER_VALIDATE_IP, FILTER_FLAG_IPV6)) {
throw new UnsupportedOperation('The MaxMindBinary provider does not support IPv6 addresses.');
}
$geoIp = geoip_open($this->datFile, $this->openFlag);
$geoIpRecord = GeoIP_record_by_addr($geoIp, $address);
geoip_close($geoIp);
if (false === $geoIpRecord instanceof \GeoIpRecord) {
throw new NoResult(sprintf('No results found for IP address %s', $address));
}
$adminLevels = [];
if ($geoIpRecord->region) {
$adminLevels[] = ['name' => $geoIpRecord->region, 'level' => 1];
}
return $this->returnResults([$this->fixEncoding(array_merge($this->getDefaults(), ['countryCode' => $geoIpRecord->country_code, 'country' => $geoIpRecord->country_name, 'adminLevels' => $adminLevels, 'locality' => $geoIpRecord->city, 'latitude' => $geoIpRecord->latitude, 'longitude' => $geoIpRecord->longitude]))]);
}