Komponenty Delphi pomoc
Start › Komponenty Delphi › TNominatimSearchProvider

TNominatimSearchProvider

Wyszukiwanie adresów przez Nominatim 5.1: pełne API, walidacja tokenu i adresu, kontrola /status, limit zapytań.

VCLFMXniewidoczny
▶ Zobacz na żywo – demo HTML

Opis

Dostawca wyszukiwania dla wszystkich map. Obsługuje /search (wolny tekst i strukturalny), /reverse, /lookup, /details i /status. Przed zapytaniem sprawdza token i adres, sondą /status wykrywa niedziałający serwer, a limit zapytań pilnuje zasad użycia (1 zapytanie/s, obsługa HTTP 429).

Moduł: MapCommon.Search, MapCommon.Nominatim · Klasa bazowa: TMapSearchProvider (TComponent) · Platformy: VCL + FMX

TNominatimSearchProvider – podgląd poglądowy
Wyszukiwarka mapy z wynikami z TNominatimSearchProvider (odległość od markera głównego). Podgląd poglądowy (nie zrzut z Delphi) – prawdziwa strona mapy komponentu w ramce imitującej formę.

Demo na żywo

Wyszukiwanie wolne, strukturalne i odwrotne, /status, URL zapytania i czas odpowiedzi (limit 1/s).

▶ Otwórz demo HTML

Funkcje

Licencja danych: wyniki pochodzą z OpenStreetMap (ODbL) – w aplikacji musi być widoczne „© OpenStreetMap contributors”. Publiczny serwer nominatim.openstreetmap.org ma własne zasady (1 zapytanie/s, bez autouzupełniania); domyślnie używana jest własna bramka geoloc.imetroll.com, a adres można zmienić bez aktualizacji programu.

Właściwości

WłaściwośćOpis
BaseURLAdres serwera; puste = SearchProviderURL mapy, potem bramka domyślna.
Token (public)Sekret ustawiany w kodzie – nie zapisuje się w pliku formy.
TokenRequired, TokenFormatCzy token jest wymagany, sposób przekazania.
Language, Limit, CountryCodesJęzyk wyników, liczba wyników, kraje.
OutputFormat, Outputs, Layers, FeatureTypeFormat i zakres danych.
ViewBox, Bounded, Dedupe, Polygon, PolygonThresholdObszar preferowany, deduplikacja, geometria.
DetailsOptionsOpcje zapytania /details.
Continent, ContinentFilter, SendContinentHint, ContinentBaseURLsWybór serwera według kontynentu.
CheckServerStatus, StatusCacheSecondsSonda /status i jej pamięć.
MinRequestIntervalMs, RateLimitBackoffMsLimit zapytań (domyślnie 1000 ms) i przerwa po HTTP 429.
ConnectTimeout, Timeout, UserAgentLimity czasu, identyfikacja aplikacji.

Zdarzenia

ZdarzenieOpis
OnResultsWyniki (rodzaj zapytania, tekst, TMapGeoResults, surowy JSON).
OnErrorBłąd z rodzajem pek*, kodem HTTP i komunikatem PL/EN.
OnConnectionCheckedWynik testu połączenia (/status).

Metody

MetodaOpis
Search, SearchStructured, SearchInAreaWyszukiwanie.
ReverseAdres z punktu.
Lookup, Details, DetailsByPlaceIdObiekty OSM.
CheckConnection, Status, InvalidateConnectionCacheTest połączenia.
ValidateSynchroniczna walidacja tokenu i adresu.
CancelPending, RedactedURLAnulowanie, adres z ukrytym tokenem.

Przykłady

Konfiguracja i test połączenia

NominatimSearchProvider1.BaseURL := 'https://geoloc.imetroll.com';
NominatimSearchProvider1.Token := GetEnvironmentVariable('MAP_SEARCH_TOKEN');
NominatimSearchProvider1.Language := 'pl';
NominatimSearchProvider1.CountryCodes := 'pl';
NominatimSearchProvider1.MinRequestIntervalMs := 1000;   // maks. 1 zapytanie/s

// test połączenia: token, adres, /status
NominatimSearchProvider1.CheckConnection(
  procedure(Ok: Boolean; ErrorKind: TMapProviderErrorKind;
    const ErrorMessage, StatusJSON: string)
  begin
    if not Ok then
      ShowMessage(ErrorMessage);   // np. pekInvalidToken: "Token odrzucony (403)"
  end);

// wyszukiwanie strukturalne i obiekty OSM
NominatimSearchProvider1.SearchStructured('Marszałkowska 10', 'Warszawa', '00-001', 'pl');
NominatimSearchProvider1.Lookup('N240109189,W50637691');
NominatimSearchProvider1.Reverse(52.2297, 21.0122);

Obsługa błędów

procedure TForm1.NominatimSearchProvider1Error(Sender: TObject; Kind: TMapSearchKind;
  ErrorKind: TMapProviderErrorKind; const Query: string; StatusCode: Integer;
  const ErrorMessage, Sublicence: string);
begin
  case ErrorKind of
    pekNoToken, pekInvalidToken: ShowMessage('Sprawdź token: ' + ErrorMessage);
    pekRateLimited: StatusBar1.SimpleText := 'Za dużo zapytań – kolejne za chwilę';
    pekServerDown, pekTimeout:   StatusBar1.SimpleText := 'Serwer chwilowo niedostępny';
  else
    StatusBar1.SimpleText := ErrorMessage;
  end;
end;

Pełna lista API

Generowana z deklaracji w kodzie (Source/*.pas): wszystkie opublikowane właściwości i zdarzenia TNominatimSearchProvider (także dziedziczone), właściwości publiczne i metody publiczne.

Właściwości opublikowane (29)

WłaściwośćTypDomyślnieOpis
LanguagestringJęzyk wyników i komunikatów (pl, en, de …)
LimitInteger10Maksymalna liczba wyników
ConnectTimeoutInteger5000Limit czasu połączenia (ms)
TimeoutInteger15000Limit czasu odpowiedzi (ms)
UserAgentstringNagłówek User-Agent – identyfikuj aplikację
MinRequestIntervalMsInteger1000Minimalny odstęp między zapytaniami (kolejka); Nominatim: 1000
RateLimitBackoffMsInteger10000Przerwa po HTTP 429
BaseURLstringAdres serwera Nominatim
TokenRequiredBooleanTrueWymagaj tokenu
TokenFormatTMapTokenFormatmtfAutoSposób przekazania tokenu (mtfAuto, nagłówek, parametr)
OutputFormatTNominatimFormatnfJSONv2Format odpowiedzi (jsonv2, geojson…)
OutputsTNominatimOutputs[noAddressDetails]Dodatkowe dane (adres, extratags, namedetails…)
CountryCodesstringFiltr krajów ISO (np. pl,de)
LayersTNominatimLayers[]Warstwy Nominatim (address, poi, railway…)
FeatureTypeTNominatimFeatureTypenftNoneTyp obiektu (country, state, city, settlement)
ExcludePlaceIdsstringWykluczone place_id
ViewBoxstringPreferowany obszar lon1,lat1,lon2,lat2
BoundedBooleanFalseTylko wyniki w ViewBox
DedupeBooleanTrueUsuwanie duplikatów
PolygonTNominatimPolygonnpNoneZwracany kształt (geojson, kml, svg, text)
PolygonThresholdDoubleUproszczenie kształtu
EmailstringE-mail kontaktowy (polityka Nominatim)
DetailsOptionsTNominatimDetailsOptionsOpcje zapytania /details
ContinentTMapContinentmcAutoKontynent (mcAuto = według widoku)
ContinentFilterBooleanFalseFiltruj wyniki do kontynentu
SendContinentHintBooleanTrueWysyłaj podpowiedź kontynentu
ContinentBaseURLsTStringsSerwery per kontynent (eu=…, as=…)
CheckServerStatusBooleanTrueSprawdzaj /status przed pierwszym zapytaniem
StatusCacheSecondsInteger300Ważność wyniku /status (s)

Zdarzenia (3)

ZdarzenieTypOpis
OnResultsTMapSearchResultsEventWyniki wyszukiwania
OnErrorTMapSearchErrorEventKażdy błąd (ErrorKind, HTTP, komunikat PL/EN)
OnConnectionCheckedTMapConnectionCheckedEventWynik sprawdzenia połączenia

Właściwości publiczne – tylko w kodzie (9)

WłaściwośćTypOpis
BusyBooleanTrwa zapytanie
HostBaseURLstringAdres ustawiony przez mapę (gdy BaseURL pusty)
HostTokenstringToken ustawiony przez mapę
LastCheckOKBooleanWynik ostatniego sprawdzenia
LastCheckTimeTDateTimeCzas ostatniego sprawdzenia
LastCheckErrorKindTMapProviderErrorKindRodzaj błędu sprawdzenia
LastCheckMessagestringKomunikat sprawdzenia
LastStatusJSONstringOdpowiedź /status
TokenstringToken – tylko w kodzie (nie w DFM/FMX)

Metody publiczne (17)

MetodaOpis
procedure Search(const Query: string)Wyszukiwanie (OnResults / callback)
procedure SearchInArea(const Query: string; const Area: TMapArea)Wyszukiwanie w zaznaczonym obszarze
procedure Reverse(const Lat, Lon: Double; Zoom: Integer = 18)Odwrotne geokodowanie
procedure CancelPendingAnuluje oczekujące zapytania
function SupportsKind(Kind: TMapSearchKind): BooleanCzy obsługuje rodzaj zapytania
function RedactedURL(const Request: TMapSearchRequest): stringURL z ukrytymi sekretami
function Scrub(const Text: string): stringZastępuje sekrety ***
function EffectiveBaseURL(C: TMapContinent = mcNone): stringFaktycznie używany adres
function Params(const Request: TMapSearchRequest): TNominatimParamsWszystkie parametry zapytania
function Validate(out ErrorKind: TMapProviderErrorKind; out ErrorMessage: string): BooleanWalidacja (token + URL) bez sieci
procedure SearchStructured(const Query: TNominatimStructuredQuery)Wyszukiwanie strukturalne (ulica, miasto, kod…)
procedure Lookup(const OsmIds: string)/lookup po osm_ids (maks. 50)
procedure Details(OsmType: Char; OsmId: Int64; const ClassName: string = '')/details obiektu
procedure DetailsByPlaceId(PlaceId: Int64)/details po place_id
procedure CheckConnection(const Callback: TMapConnectionCheckProc = nil)/status teraz
procedure StatusAlias CheckConnection
procedure InvalidateConnectionCacheZapomina wynik /status

Pełny opis wszystkich właściwości: dokumentacja komponentów map.

Zobacz też