Skip to content

Commit

Permalink
Update Geo6.php
Browse files Browse the repository at this point in the history
If possible, return the addreses in the requested language ;
If no language is defined, return addresses in both languages (fr + nl).
  • Loading branch information
jbelien committed Jun 1, 2018
1 parent 11d31ee commit e95ffdb
Showing 1 changed file with 66 additions and 35 deletions.
101 changes: 66 additions & 35 deletions Geo6.php
Original file line number Diff line number Diff line change
Expand Up @@ -96,43 +96,27 @@ public function geocodeQuery(GeocodeQuery $query): Collection

$results = [];
foreach ($json->features as $feature) {
$coordinates = $feature->geometry->coordinates;
$address_fr = $this->extractComponents($feature, 'fr');
$address_nl = $this->extractComponents($feature, 'nl');

foreach ($feature->properties->components as $component) {
switch ($component->type) {
case 'municipality':
if ($language === 'nl') {
$municipality = $component->name_nl ?? $component->name_fr;
} else {
$municipality = $component->name_fr ?? $component->name_nl;
}
break;
case 'postal_code':
$postalCode = (string) $component->id;
break;
case 'street':
if ($language === 'nl') {
$streetName = $component->name_nl ?? $component->name_fr;
} else {
$streetName = $component->name_fr ?? $component->name_nl;
}
break;
case 'street_number':
$streetNumber = (string) $component->name_fr;
break;
}
}
switch ($language) {
case 'fr':
$results[] = $address_fr ?? $address_nl;
break;

$results[] = Address::createFromArray([
'providedBy' => $this->getName(),
'latitude' => $coordinates[1],
'longitude' => $coordinates[0],
'streetNumber' => $streetNumber,
'streetName' => $streetName,
'locality' => $municipality,
'postalCode' => $postalCode,
'countryCode' => 'BE',
]);
case 'nl':
$results[] = $address_nl ?? $address_fr;
break;

default:
if (!is_null($address_fr)) {
$results[] = $address_fr;
}
if (!is_null($address_nl)) {
$results[] = $address_nl;
}
break;
}
}

return new AddressCollection($results);
Expand Down Expand Up @@ -229,4 +213,51 @@ private function getToken()
'token' => $token,
];
}

/**
* Extract address components in French or Dutch.
*
* @param object $feature
* @param string $language
*/
private function extractComponents(object $feature, string $language)
{
$coordinates = $feature->geometry->coordinates;

if (in_array($language, ['fr', 'nl'])) {
foreach ($feature->properties->components as $component) {
switch ($component->type) {
case 'municipality':
$municipality = $component->{'name_'.$language};
break;
case 'postal_code':
$postalCode = (string) $component->id;
break;
case 'street':
$streetName = $component->{'name_'.$language};
break;
case 'street_number':
$streetNumber = (string) $component->{'name_'.$language};
break;
}
}
}

if (isset($municipality, $postalCode, $streetName, $streetNumber) &&
!is_null($municipality) && !is_null($postalCode) && !is_null($streetName)
) {
return Address::createFromArray([
'providedBy' => $this->getName(),
'latitude' => $coordinates[1],
'longitude' => $coordinates[0],
'streetNumber' => $streetNumber,
'streetName' => $streetName,
'locality' => $municipality,
'postalCode' => $postalCode,
'countryCode' => 'BE',
]);
}

return NULL;
}
}

0 comments on commit e95ffdb

Please sign in to comment.