Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

sublocality allways null #1185

Open
mrelliot69 opened this issue May 19, 2023 · 8 comments
Open

sublocality allways null #1185

mrelliot69 opened this issue May 19, 2023 · 8 comments
Labels

Comments

@mrelliot69
Copy link

When retriving addresses the sublocality value is allways null, even tho that the admistrative levels are filled corretly, any reason for this?
Any fix ?

@jbelien
Copy link
Member

jbelien commented May 20, 2023

Could you give us more details about your issue ?
What provider are you using ?
What address ?
Is there some error message ?

@mrelliot69
Copy link
Author

mrelliot69 commented May 20, 2023

Yes ofc, so the issue is that when i retrieve the subLocality, using the method getSublocality, or even by using the dumper GeoArray this property always comes null.
The adminLevels are filled, but the sublocality for some reason never gets assigned a value.
I don't get an error message, the error is the sublocality property don't come with data.
Provider : Mapbox (but I tested several, and i got the same problem)
Regarding the address, same as the provider using any PT address is null

Currently using this setup:

$geocoder = new ProviderAggregator();
$chain = new Chain([
  //new Nominatim\Nominatim($httpClient, 'https://nominatim.openstreetmap.org', 'Geocoder test'),
  new Mapbox($httpClient, $key),
  new Geocoder\Provider\ArcGISOnline\ArcGISOnline($httpClient),
  //new \Geocoder\Provider\GoogleMaps\GoogleMaps($client, 'France'),
  //new \Geocoder\Provider\BingMaps\BingMaps($client, '<API_KEY>'),
]);

$geocoder->registerProvider($chain);
// search by user typed data
$result = $geocoder->geocodeQuery(GeocodeQuery::create($query));
$dumper = new GeoArray();
foreach ($result as $item) { 
  $arraydump = $dumper->dump($item);
}

@mtmail
Copy link
Contributor

mtmail commented May 20, 2023

Which of the two providers was used? What is the input (address), what the output (full data structure)?

@jbelien
Copy link
Member

jbelien commented May 20, 2023

Note
@mrelliot69 I took the liberty to improve the formatting of the code in your comment to make it more readable.

Indeed, Mapbox provider does not return any sub-locality property (check Mapbox.php).

The available properties will depend on both the provider and the 3rd party API.
If the 3rd party API returns the sub-locality (for instance) but the provider doesn't "fetch" it, we can easily add it ; on the other hand, if the 3rd party API doesn't return a sub-locality, there is not much we can do.

In your use case, does the 3rd party API returns a sub-locality ?
Could you show us the response you get from the API ?

@mrelliot69
Copy link
Author

Which of the two providers was used? What is the input (address), what the output (full data structure)?

Its the first one (mapbox)

@mrelliot69
Copy link
Author

mrelliot69 commented May 20, 2023

Note
@mrelliot69 I took the liberty to improve the formatting of the code in your comment to make it more readable.

Indeed, Mapbox provider does not return any sub-locality property (check Mapbox.php).

The available properties will depend on both the provider and the 3rd party API. If the 3rd party API returns the sub-locality (for instance) but the provider doesn't "fetch" it, we can easily add it ; on the other hand, if the 3rd party API doesn't return a sub-locality, there is not much we can do.

In your use case, does the 3rd party API returns a sub-locality ? Could you show us the response you get from the API ?

yeah ofc, im attaching on this reply a response, so you can see it

Geocoder\Provider\Mapbox\Model\MapboxAddress Object
(
    [id:Geocoder\Provider\Mapbox\Model\MapboxAddress:private] => address.8706368440886428
    [streetNumber:Geocoder\Provider\Mapbox\Model\MapboxAddress:private] => 
    [streetName:Geocoder\Provider\Mapbox\Model\MapboxAddress:private] => Avenida Da República
    [resultType:Geocoder\Provider\Mapbox\Model\MapboxAddress:private] => Array
        (
            [0] => address
        )

    [formattedAddress:Geocoder\Provider\Mapbox\Model\MapboxAddress:private] => Avenida Da República, 2685-181 Portela, Lisbon, Portugal
    [neighborhood:Geocoder\Provider\Mapbox\Model\MapboxAddress:private] => 
    [coordinates:Geocoder\Model\Address:private] => Geocoder\Model\Coordinates Object
        (
            [latitude:Geocoder\Model\Coordinates:private] => 38.7818878
            [longitude:Geocoder\Model\Coordinates:private] => -9.115792
        )

    [bounds:Geocoder\Model\Address:private] => 
    [subLocality:Geocoder\Model\Address:private] => 
    [locality:Geocoder\Model\Address:private] => Portela
    [postalCode:Geocoder\Model\Address:private] => 2685-181
    [adminLevels:Geocoder\Model\Address:private] => Geocoder\Model\AdminLevelCollection Object
        (
            [adminLevels:Geocoder\Model\AdminLevelCollection:private] => Array
                (
                    [1] => Geocoder\Model\AdminLevel Object
                        (
                            [level:Geocoder\Model\AdminLevel:private] => 1
                            [name:Geocoder\Model\AdminLevel:private] => Portela
                            [code:Geocoder\Model\AdminLevel:private] => 
                        )

                    [2] => Geocoder\Model\AdminLevel Object
                        (
                            [level:Geocoder\Model\AdminLevel:private] => 2
                            [name:Geocoder\Model\AdminLevel:private] => Lisbon
                            [code:Geocoder\Model\AdminLevel:private] => 11
                        )

                )

        )

    [country:Geocoder\Model\Address:private] => Geocoder\Model\Country Object
        (
            [name:Geocoder\Model\Country:private] => Portugal
            [code:Geocoder\Model\Country:private] => PT
        )

    [timezone:Geocoder\Model\Address:private] => 
    [providedBy:Geocoder\Model\Address:private] => mapbox
    [streetNumber:Geocoder\Model\Address:private] => 
    [streetName:Geocoder\Model\Address:private] => 
)

As you can see the admin level 2 its lisbon so that in theory its also the sublocality and the admin level 2 the locality

@jbelien
Copy link
Member

jbelien commented May 20, 2023

You might be right but according to Mapbox response I don't think we can always assume that Admin Level 1 is the sub-locality.

Check the code here and you'll see that locality is already correctly set (and that Admin Level 2 is region).

Could you show us a response from Mapbox API (the raw response, not the MapboxAddress object) to double check ? Thanks.

@jbelien
Copy link
Member

jbelien commented May 20, 2023

According to Mapbox documentation there is indeed no sub-locality provided.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

No branches or pull requests

3 participants