Geo::getCoordinates()
\nn\t3::Geo()->getCoordinates($address = '', $returnAll = false, $language = 'de');
Convert address data into geo-coordinates (geo coding)
If the extension nnaddress is installed, it will be used for the resolution.
// Query via string, return first result
\nn\t3::Geo()->getCoordinates( 'Blumenstrasse 2, 65189 Wiesbaden' );
// Query via array
\nn\t3::Geo()->getCoordinates( ['street'=>'Blumenstrasse 2', 'zip'=>'65189', 'city'=>'Wiesbaden', 'country'=>'DE'] );
// Return all results
\nn\t3::Geo()->getCoordinates( 'Blumenstrasse 2, 65189 Wiesbaden', true );
// Return all results in English
\nn\t3::Geo()->getCoordinates( 'Blumenstrasse 2, 65189 Wiesbaden', true, 'en' );
// Use your own api key
\nn\t3::Geo( $apiKey )->getCoordinates( 'Blumenstrasse 2, 65189 Wiesbaden' );
Copied!
Example for return:
[
'lat' => 50.0805069,
'lng' => 8.2508677,
'street' => 'Blumenstrass 2',
'zip' => '65189',
'city' => 'Wiesbaden',
...
]
Copied!
@param array|string $address
@return array
Source Code
public function getCoordinates ( $address = '', $returnAll = false, $language = 'de' ) {
// EXT:nnaddress verwenden, falls vorhanden
if (\nn\t3::Environment()->extLoaded('nnaddress')) {
$addressService = \nn\t3::injectClass( \Nng\Nnaddress\Services\AddressService::class );
if ($coordinates = $addressService->getGeoCoordinatesForAddress( $address )) {
return $coordinates;
}
}
if (is_array($address)) {
$address = [
'street' => $address['street'] ?? '',
'zip' => $address['zip'] ?? '',
'city' => $address['city'] ?? '',
'country' => $address['country'] ?? '',
];
$address = "{$address['street']}, {$address['zip']} {$address['city']}, {$address['country']}";
}
$address = trim($address, ', ');
$apiKey = $this->getApiKey();
if (!$apiKey) return [];
$result = \nn\t3::Request()->GET(
'https://maps.googleapis.com/maps/api/geocode/json', [
'address' => $address,
'key' => $apiKey,
'language' => $language,
]);
$data = json_decode( $result['content'], true );
if ($error = $data['error_message'] ?? false) {
\nn\t3::Exception( '\nn\t3::Geo()->getCoordinates() : ' . $error );
}
foreach ($data['results'] as &$result) {
$result = $this->parseAddressCompontent( $result );
}
return $returnAll ? $data['results'] : array_shift( $data['results'] );
}
Copied!