Hi again
In ordrer to use reverse geocoding I developed this function (coming this forum ;) ) ![]()
FUNCTION TfPrincipal.GetReverseGeocoding(
    CONST Coord: TTMSFNCMapsCoordinateRec;
    Langue: Byte;
    VAR Succes: Boolean;
    VAR Messages: STRING)
   : TTMSFNCGeocodingItem;
VAR
    req: TTMSFNCGeocodingRequest;
    Resultat: TTMSFNCCloudBaseRequestResult;
    Alocale: STRING;
    chaine : String;
BEGIN
    TRY
        Messages := '';
        CASE Langue OF
            1:
                   Alocale := 'fr-FR';
            2:
                   Alocale := 'gb-GB';
            ELSE
                   Alocale := '';
        END; // Fin de CASE
        FNCGeocoding.Request.Clear;
        FNCGeocoding.Request.ClearHeaders;
        FNCGeocoding.Request.Name := 'GET REVERSEGEOCODING';
        FNCGeocoding.Request.Method := FNCGeocoding.GeocodingInstance.GetRequestMethod;
        FNCGeocoding.Request.Host := FNCGeocoding.GeocodingInstance.GetReverseHost;
        FNCGeocoding.Request.Path := FNCGeocoding.GeocodingInstance.GetReversePath(Coord);
        FNCGeocoding.Request.Query := FNCGeocoding.GeocodingInstance.GetQuery(
            Coord,
            Alocale);
        FNCGeocoding.Request.PostData := FNCGeocoding.GeocodingInstance.GetPostData;
        Resultat := FNCGeocoding.ExecuteRequest(
            NIL, // DoRequestAddress,
            NIL,
            False);
        Messages := Resultat.ResultString;
        IF Resultat.Success THEN
        BEGIN
            req := FNCGeocoding.GeocodingRequests.Add;
            req.Items.Count;
            FNCGeocoding.GeocodingInstance.Parse(
                req,
                Resultat.ResultString);
            IF (req <> NIL) AND (req.Items.Count > 0) THEN
            BEGIN
                Succes := True;
                Result := req.Items[0];
            END
            ELSE
            BEGIN
                Succes := False;
                Result := NIL;
            END;
        END
        ELSE
        BEGIN
            // Cause de l'echec xxxx a faire
            Result := NIL;
            Succes := False;
            Messages := Resultat.ResultString;
        END;
    EXCEPT
        ON E: System.SysUtils.Exception DO
        BEGIN
            Succes := False;
            Messages := Resultat.ResultString;
        END;
    END; // Fin de EXCEPT
END;
This function send back a TTMSFNCGeocodingItem variable called Geo.
If I send this coordinate ; lat =  39.2715478, Long = -0.3187623
I received back this Geo.Adresse :
'La Socarrada, Sueca, la Ribera Baixa, València / Valencia, Comunitat Valenciana, 46420, España'
It is correct. However information available in some other variables are missing :
Geo.Country = 'España' ![]()
Geo.CountryCode = 'es' ![]()
Geo.Province = 'Comunitat Valenciana'  ![]()
Geo.Region = 'la Ribera Baixa'
Geo.RegionCode = ''
Geo.City = '' 
      should be 'Sueca'
Geo.Street = '' 
    should be 'La Socarrada'
below, the detail coming from Nominatim :
La Socarrada
Sueca
la Ribera Baixa
Valence
Communauté Valencienne
46420
Espagne
<country_code>es</country_code>
https://nominatim.openstreetmap.org/ui/details.html?osmtype=N&osmid=1243403972&class=place
According I know from the spanish administrative level 'region' is not always an administrative level; it could be a 'cultural' level (comarques) ...
I know it is VERY complicate to distach these informations. Moreover, it is dependent from the service used .... In fact is is a nightmare :(
With Here, the other service I used,
we obtain :
Geo.Address = 'Sueca, Comunidad Valenciana, España'
Geo.Country = 'España'
Geo.CountryCode = 'esp'
Geo.Province = 'Valencia'
Geo.Region = 'Comunidad Valenciana'
Geo.RegionCode = ''
Geo.City = 'Sueca'
Geo.Street = ''
Thus, in order to get more opportunity to chose what we need (the user), is it possible to add more division than these 5 (country, province, region, city, street) even if some services provide less division ? for instance State, county, ...
Good luck