Skip to content

sublocality allways null #1185

Open
Open

Description

@mrelliot69

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

Activity

  1. jbelien commented on May 20, 2023

    @jbelien
    Member

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

  2. mrelliot69 commented on May 20, 2023

    @mrelliot69
    Author

    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);
    }
  3. mtmail commented on May 20, 2023

    @mtmail
    Contributor

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

  4. jbelien commented on May 20, 2023

    @jbelien
    Member

    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 ?

  5. mrelliot69 commented on May 20, 2023

    @mrelliot69
    Author

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

    Its the first one (mapbox)

  6. mrelliot69 commented on May 20, 2023

    @mrelliot69
    Author

    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

  7. jbelien commented on May 20, 2023

    @jbelien
    Member

    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.

  8. jbelien commented on May 20, 2023

    @jbelien
    Member

    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

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions