← Komponenty Delphi – pomoc · Dokumentacja

Map Components for Delphi – dokumentacja (PL)

English version · strona pomocy: https://help.imetroll.com/

Komponenty map dla RAD Studio 12 Athens (VCL i FireMonkey) oparte na MapLibre GL JS: mapy kafelkowe (rastrowe), mapy wektorowe 3D z własnego serwera, edytor wyglądu, obszary GeoJSON (świat → kontynenty → kraje) i wymienni dostawcy wyszukiwania adresów.

Status: kod napisany dla RAD Studio 12, jeszcze nieskompilowany w Delphi. Testy jednostkowe części niezależnych od frameworka przechodzą pod FPC 3.2 (tests/fpc/run_fpc_check.py). Proszę zgłaszać błędy kompilacji z numerem linii.

Spis treści

  1. Komponenty
  2. Instalacja
  3. Szybki start
  4. Mapy kafelkowe TTileMapVCL / TTileMapFMX
  5. Mapy 3D T3DMapVCL / T3DMapFMX
  6. Punkt zerowy, marker główny, promień
  7. Przyciski nawigacji
  8. Wyszukiwanie adresów i dostawcy
  9. Zaznaczanie obszaru i wyszukiwanie w obszarze
  10. TEditMap – edycja wyglądu mapy 3D
  11. TMapAreas – świat, kontynenty, kraje
  12. TEditMapRaster – kafle rastrowe
  13. Teren DEM i wysokości (T3DTerrain / T3DMap.Terrain)
  14. Dokumentacja referencyjna
  15. Przepisy
  16. Migracja ze starej wersji
  17. Ograniczenia i otwarte kwestie
  18. Rozwiązywanie problemów

1. Komponenty

Paleta: Maps.

Komponent Framework Opis
TTileMapVCL VCL (WebView2) Mapa rastrowa: OpenStreetMap, satelita (Esri), teren (OpenTopoMap)
TTileMapFMX FMX (TWebBrowser) To samo dla Windows, Android, macOS, iOS
T3DMapVCL VCL Mapa wektorowa 3D z mapa.imetroll.com: 2D/3D, pochylenie, budynki, motyw
T3DMapFMX FMX To samo w FireMonkey
TEditMap (alias TEdit3DMap) niewizualny Edycja kolorów, krycia, widoczności, szerokości i wartości per zoom 111 warstw mapy 3D
TMapAreas niewizualny Obszary GeoJSON: świat / kontynenty / kraje / admin-1/admin-2 + własne pliki
TEditMapRaster niewizualny Edycja / stylizacja kafli rastrowych (TTileMap*), proxy, IndexedDB/SQLite
TNominatimSearchProvider niewizualny Wyszukiwanie przez Nominatim 5.1 (geoloc.imetroll.com + token)
TCustomUrlSearchProvider niewizualny Dowolny geokoder JSON (szablon URL)
TWeather niewizualny Middleware pogody (GET+key= → JSON): UV, wiatr, nasłonecznienie; ikony+temp na mapie gdy WeatherInfo; Scene / Header / Popup → UI family
TWeatherScene niewizualny Animacja tła aplikacji pogodowej (dzień/noc, chmury, deszcz, wiatr, gwiazdy); dane tylko z TWeather

Wspólny rdzeń (MapCommon.Core) obsługuje wszystkie cztery mapy, więc mają one te same właściwości, metody i zdarzenia. Mapy 3D dodają tryb 2D/3D, motyw i EditMap.

Moduł Zawartość
MapCommon.Types typy, wyliczenia stylów, zdarzenia, funkcje pomocnicze
MapCommon.Core logika mapy (stan, odtwarzanie po przeładowaniu, wyszukiwanie, obszary)
MapCommon.MapVCL / MapCommon.MapFMX komponenty map
MapCommon.Bridge, MapCommon.PageHtml most JS ↔ Delphi (protokół v2), strona HTML
MapCommon.Search, MapCommon.Nominatim dostawcy wyszukiwania
MapCommon.EditMap, MapCommon.StyleSettings, MapCommon.LayerInfo, MapCommon.StyleDefaults TEditMap
MapCommon.EditMapVCL / MapCommon.EditMapFMX okno edytora wyglądu
MapCommon.Areas, MapCommon.AreasData, MapCommon.AreasCatalog TMapAreas
MapCommon.Location lokalizacja urządzenia (System.Sensors)
MapCommon.Weather, MapCommon.Weather.* (Types, Area, Client, Colors, Overlay, AreaResolve, Scene) TWeather, TWeatherScene
MapCommon.Reg rejestracja, edytory właściwości i komponentów

2. Instalacja

  1. Otwórz MapComponents.groupproj.
  2. Zbuduj kolejno MapComponentsRT, MapComponentsVCL, MapComponentsFMX.
  3. Zainstaluj MapComponentsDsgn (Win32, tylko design-time). Komponenty pojawią się na stronie palety Maps.
  4. Dodaj Source do Library path albo do ścieżki projektu (dema kompilują się bezpośrednio ze źródeł).
  5. Windows: obok EXE skopiuj WebView2Loader.dll o właściwej bitowości ($(BDS)\Redist\win32 lub win64). Wymagany jest WebView2 Runtime (w Windows 10/11 jest preinstalowany).
Pakiet Rodzaj Zawartość
MapComponentsRT runtime, wszystkie platformy rdzeń, most, wyszukiwanie, TEditMap, TEditMapRaster, TMapAreas
MapComponentsVCL runtime, Win32/Win64 TTileMapVCL, T3DMapVCL, okno edytora VCL
MapComponentsFMX runtime, Win/Android/macOS/iOS TTileMapFMX, T3DMapFMX, okno edytora FMX
MapComponentsDsgn design-time paleta Maps, edytory właściwości, czasowniki

Dema (Demos): DemoTileVCL (kafelki, punkt zerowy, promień, obszar), Demo3DVCL (3D + TEditMap), DemoAreasVCL (TMapAreas), Demo3DTerritoryVCL / Demo3DTerritoryFMX (DEM + województwa), DemoSearchVCL (dostawcy), DemoFMX (FMX: kafelki + obszary, 3D + edytor).

3. Szybki start

Upuść TTileMapVCL (lub TTileMapFMX) na formularz, ustaw Align = alClient i uruchom. Jeżeli na formularzu leży TNominatimSearchProvider, TMapAreas albo TEditMap, mapa sama podłączy je do pustych właściwości SearchProvider, Areas, EditMap (AutoLinkComponents = True).

VCL
uses MapCommon.Types, MapCommon.MapVCL;

procedure TForm1.FormCreate(Sender: TObject);
begin
  TileMap1.Style := tmsOpenStreetMap;     // tmsSatellite, tmsTerrain
  TileMap1.ZeroLat := 52.2297;            // zero point (Home button)
  TileMap1.ZeroLon := 21.0122;
  TileMap1.Zoom := 13;
  TileMap1.SearchToken := GetEnvironmentVariable('MAP_SEARCH_TOKEN');
end;
FMX
uses MapCommon.Types, MapCommon.MapFMX;

procedure TForm1.FormCreate(Sender: TObject);
begin
  TileMap1.Style := tmsOpenStreetMap;
  TileMap1.ZeroLat := 52.2297;
  TileMap1.ZeroLon := 21.0122;
  TileMap1.Zoom := 13;
  TileMap1.SearchToken := GetEnvironmentVariable('MAP_SEARCH_TOKEN');
end;

4. Mapy kafelkowe TTileMapVCL / TTileMapFMX

Styl wybiera się z listy (Style: TTileMapStyle). Adresów kafelków nie ma w Inspektorze obiektów: własne źródło ustawia się tylko w kodzie (CustomTileURL, CustomAttribution, CustomTileMaxZoom) razem z Style := tmsCustom.

Style Źródło Max zoom Atrybucja (wyświetlana zawsze)
tmsOpenStreetMap tile.openstreetmap.org 19 © OpenStreetMap contributors
tmsSatellite Esri World Imagery (server.arcgisonline.com) 19 Tiles © Esri — Source: Esri, i-cubed, USDA, USGS, …
tmsTerrain OpenTopoMap 17 © OpenStreetMap contributors, SRTM; styl © OpenTopoMap (CC-BY-SA)
tmsCustom CustomTileURL (tylko kod) CustomTileMaxZoom CustomAttribution

Warunki korzystania z kafelków (ważne przy wdrożeniu):

5. Mapy 3D T3DMapVCL / T3DMapFMX

Mapa wektorowa z kafelkami z mapa.imetroll.com (styl liberty, 111 warstw). Wszystko, co mają mapy kafelkowe, plus tryb 2D/3D, pochylenie, budynki 3D i motyw dzień/noc. Kolorów nie edytuje się w samej mapie – służy do tego TEditMap podłączony przez Edit3D (alias EditMap).

Style: TMap3DStyle Opis
m3sVector Styl wektorowy 3D z mapa.imetroll.com (domyślny)
m3sSatelliteHybrid Satelita Esri + budynki 3D i etykiety
m3sTerrainHybrid Teren OpenTopoMap + budynki 3D
m3sServerStyle Styl zapisany na serwerze (ServerStyleName, np. przez TEditMap.SaveToServer)
m3sCustom CustomStyleURL (tylko kod) lub LoadStyleJSON
Map3D.Style := m3sVector;             // own 3D vector tiles (mapa.imetroll.com)
Map3D.Mode := mm3D;                   // or Map3D.ToggleMode
Map3D.Pitch3D := 55;
Map3D.Theme := mtNight;
Map3D.Buildings3D := True;
// a style saved on the map server:
Map3D.ServerStyleName := 'moj-styl';
Map3D.Style := m3sServerStyle;
// custom URL - code only (public, not in the Object Inspector):
Map3D.CustomStyleURL := 'https://example.com/style.json';
Map3D.Style := m3sCustom;

StyleURL nie jest już publikowane. Jedynym „adresem” w Inspektorze pozostaje BoundariesURL (źródło danych granic, a nie styl) oraz SearchProviderURL (zapasowy adres wyszukiwarki).

6. Punkt zerowy, marker główny, promień

Punkt zerowy (ZeroLat, ZeroLon, domyślnie Warszawa 52.2297, 21.0122) to punkt odniesienia: przycisk Home leci do niego (HomeUsesZeroPoint), od niego liczone są odległości (MainMarkerDistanceFromZero, MainMarkerBearingFromZero, MainMarkerPixelOffsetFromZero – ta sama matematyka pikseli co w starym OSMMapViewer). Może mieć własną ikonę (ZeroIcon).

Marker główny – źródło MainMarkerSource:

Wartość Pozycja
mmsZeroPoint w punkcie zerowym (domyślnie)
mmsManual MainMarkerLat, MainMarkerLon / SetMainMarker
mmsDeviceLocation lokalizacja urządzenia (GPS/sieć, UpdateMyLocation); gdy niedostępna – punkt zerowy (OnLocation(Success=False))

Własny obrazek: MainMarkerIcon (TPicture w VCL, TBitmap w FMX; zapisywany jako PNG data-URL). Bez obrazka rysowana jest kropka (MainMarkerColor, MainMarkerBorderColor, MainMarkerSize, MainMarkerSquare, puls PulseEnabled/PulseColor).

Map.ZeroLat := 52.2297;
Map.ZeroLon := 21.0122;
Map.ZeroPointVisible := True;
Map.ZeroIcon.LoadFromFile('zero.png');          // TPicture (VCL) / TBitmap (FMX)
Map.MainMarkerSource := mmsDeviceLocation;      // GPS, falls back to the zero point
Map.MainMarkerIcon.LoadFromFile('pin.png');     // own image instead of the dot
Map.MainMarkerIconWidth := 32;
Map.MainMarkerIconHeight := 40;
Map.PulseEnabled := True;
ShowMessage(Format('%.0f m od punktu zerowego', [Map.MainMarkerDistanceFromZero]));

Promień – okrąg wokół markera głównego, punktu zerowego albo dowolnego punktu, z kolorami i kryciem wypełnienia i obrysu:

Map.RadiusCenter := rcMainMarker;
Map.RadiusMeters := 1500;
Map.RadiusColor := clRed;                // VCL TColor / FMX TAlphaColor
Map.RadiusFillOpacity := 0.12;
Map.RadiusLineColor := clMaroon;
Map.RadiusLineOpacity := 0.9;
Map.RadiusLineWidth := 2;
Map.RadiusLineStyle := mlsDashed;
Map.RadiusLabel := '1,5 km';
Map.RadiusVisible := True;

7. Przyciski nawigacji

Panel przycisków (NavVisible, NavPosition, NavOrientation, NavButtonSize) z kolekcją NavButtons. Każdy przycisk ma Kind, Visible, Hint, Icon (własna ikona) i Action.

Kind Akcja wbudowana
nbkSearch pokazuje pole wyszukiwania
nbkZoomIn / nbkZoomOut powiększenie / pomniejszenie
nbkHome lot do punktu zerowego (lub HomeLat/HomeLon)
nbkMyLocation lokalizacja urządzenia → marker główny
nbkSelectArea zaznaczanie obszaru (AreaShape)
nbkStyle następny styl z listy (NextStyle)
nbkMode3D 2D/3D (tylko mapy 3D)
nbkResetNorth obrót na północ

Każde kliknięcie wywołuje OnNavButtonClick(Kind); z Action = nbaEventOnly wykonywane jest tylko zdarzenie.

// own icon and hint for a built-in button
with Map.NavButtons.Find(nbkHome) do
begin
  Icon.LoadFromFile('home.png');
  Hint := 'Wróć do punktu zerowego';
end;
// hide a button
Map.NavButtons.Find(nbkStyle).Visible := False;
// only the event, no built-in action
Map.NavButtons.Find(nbkMyLocation).Action := nbaEventOnly;
Map.NavPosition := bppTopRight;
Map.NavOrientation := bpoHorizontal;

8. Wyszukiwanie adresów i dostawcy

Mapa wyszukuje przez komponent wskazany w SearchProvider (automatycznie podłączany, jeśli leży na formularzu). Gdy jest pusty, używa wewnętrznego TNominatimSearchProvider z SearchProviderURL (domyślnie https://geoloc.imetroll.com) i SearchToken (nigdy nie zapisywany w DFM).

Dostawca Zastosowanie
TNominatimSearchProvider Nominatim 5.1: search, reverse, lookup, structured, status; bramka geoloc z tokenem, kontynenty (ContinentBaseURLs)
TCustomUrlSearchProvider dowolne API JSON: SearchURL, ReverseURL, AreaSearchURL z symbolami {query} {lang} {limit} {lat} {lon} {zoom} {south} {west} {north} {east}

Walidacja przed zapytaniem (pre-flight): brak tokenu, zły format tokenu, niepoprawny URL, test /status przy pierwszym użyciu (wynik w LastCheck*), klasyfikacja błędów HTTP. Błędy trafiają do OnSearchError z rodzajem TMapProviderErrorKind i komunikatem PL/EN:

ErrorKind Znaczenie
pekNoToken brak tokenu, a serwer go wymaga (TokenRequired)
pekInvalidToken 401/403 – token odrzucony
pekBadURL niepoprawny adres (schemat, host)
pekUnreachable DNS / brak połączenia
pekTimeout przekroczony ConnectTimeout / Timeout
pekServerDown 5xx lub /status ≠ OK
pekHTTPError inny kod HTTP
pekBadResponse odpowiedź nie jest oczekiwanym JSON
pekRateLimited 429 – za dużo zapytań
pekUnsupported dostawca nie obsługuje tego rodzaju zapytania
// drop TNominatimSearchProvider on the form: every map links it automatically
NominatimSearchProvider1.BaseURL := 'https://geoloc.imetroll.com';
NominatimSearchProvider1.Token := GetEnvironmentVariable('MAP_SEARCH_TOKEN');
NominatimSearchProvider1.Language := 'pl';
NominatimSearchProvider1.CountryCodes := 'pl';
NominatimSearchProvider1.CheckConnection(
  procedure(Ok: Boolean; ErrorKind: TMapProviderErrorKind; const ErrorMessage, StatusJSON: string)
  begin
    if not Ok then
      ShowMessage(ErrorMessage);         // e.g. pekInvalidToken: "Token odrzucony (403)"
  end);
// any JSON geocoder
CustomUrlSearchProvider1.SearchURL := 'https://photon.komoot.io/api/?q={query}&limit={limit}&lang={lang}';
TileMap1.SearchProvider := CustomUrlSearchProvider1;

Zasady korzystania i licencja danych. Wyniki pochodzą z OpenStreetMap – licencja ODbL: w aplikacji musi być widoczna atrybucja „© OpenStreetMap contributors”, a udostępniane dalej bazy pochodne podlegają zasadzie share-alike. Publiczny serwer nominatim.openstreetmap.org ma własną politykę (maks. 1 zapytanie/s na całą aplikację, identyfikujący User-Agent, zakaz autouzupełniania i zapytań systematycznych, obowiązkowy cache). Komponent domyślnie używa własnej bramki geoloc.imetroll.com, ale adres jest konfigurowalny – zgodnie z polityką OSMF musi dać się zmienić bez aktualizacji programu. SearchLive (szukanie podczas pisania) włączaj tylko na własnym serwerze.

Limit zapytań po stronie klienta. TNominatimSearchProvider.MinRequestIntervalMs (domyślnie 1000 ms) ustawia zapytania w kolejce tak, by dostawca wysyłał najwyżej jedno żądanie HTTP na sekundę (sonda /status też się liczy) – nic nie jest odrzucane, kolejne wyniki po prostu przychodzą później. Po odpowiedzi 429 (pekRateLimited, zdarzenie OnError) następne żądanie wyjdzie dopiero po RateLimitBackoffMs (domyślnie 10000 ms). Dla TCustomUrlSearchProvider limit jest domyślnie wyłączony (0).

9. Zaznaczanie obszaru i wyszukiwanie w obszarze

AreaShape = masRectangle, masPolygon albo masCircle. Zaznaczanie zaczyna przycisk nbkSelectArea lub StartAreaSelection. Po zakończeniu: OnAreaSelected(Area), HasArea, Area. SearchInArea(Query) szuka wewnątrz obszaru (viewbox + filtr punkt-w-wielokącie), a z SearchOnAreaSelected = True zapytanie AreaSearchQuery uruchamia się samo.

Map.AreaShape := masPolygon;             // masRectangle, masCircle
Map.StartAreaSelection;                  // or the "select area" button
// ...
procedure TForm1.MapAreaSelected(Sender: TObject; const Area: TMapArea);
begin
  Map.SearchInArea('hydraulik');         // results -> OnSearchResults
end;

10. TEditMap – edycja wyglądu mapy 3D

Dziedziczenie Edit / Edit3D (jak InfoWindow): Edit = TEditMapRaster (mapy 2D/raster, Areas.EditPopupEnabled); Edit3D = TEditMap / TEdit3DMap (mapy 3D + teren). Właściwości: TileMap.Edit, Map3D.Edit3D (alias EditMap), Areas.Edit, Terrain.Edit3D. Szczegóły: docs/TEDIT_INHERITANCE_REQUIREMENTS.md.

TEditMap (w kodzie można używać nazwy TEdit3DMap) przechowuje zmiany wyglądu 111 warstw stylu: kolor, krycie, widoczność, szerokość linii i wartości zależne od zoomu. Zmiany są od razu stosowane na wszystkich podłączonych mapach (T3DMap*.Edit3D / EditMap) i ponownie po każdym wczytaniu stylu oraz po przeładowaniu strony.

W IDE: SettingsFile i DefaultSettingsFile mają przycisk „…” z oknem wyboru *.json; dwuklik na komponencie otwiera edytor, menu kontekstowe ma „Przywróć domyślne”. Ustawienia nie są zapisywane w DFM – edytor proponuje zapis do pliku SettingsFile.

Niepoprawny plik (zły JSON, nieznana warstwa, zły kolor, krycie poza 0..1) nie jest stosowany; lista błędów trafia do OnValidationError i LastErrors.

// T3DMapVCL1.EditMap := EditMap1 (automatic at design time)
EditMap1.SetColor('water', '#1a3a6b');
EditMap1.BeginUpdate;                    // one undo step
try
  EditMap1.SetColor('road_trunk_primary', '#ff9800');
  EditMap1.SetWidth('road_trunk_primary', 6);
  EditMap1.SetOpacity('road_trunk_primary', 0.9);
finally
  EditMap1.EndUpdate;
end;
EditMap1.SetCategoryVisible('etykiety', False);
EditMap1.Undo;
EditMap1.RestoreDefaults;                // undoable, OnRestoreDefaults
EditMap1.SaveToFile('map-settings.json');
EditMap1.ShowEditor;                     // window: tree, colour, opacity, width, undo/redo
EditMap1.SaveToServer('moj-styl', Password);   // asynchronous, OnSaved
// later, in any application:
T3DMapVCL1.ServerStyleName := 'moj-styl';
T3DMapVCL1.Style := m3sServerStyle;
procedure TForm1.EditMap1ValidationError(Sender: TObject; const Source: string; Errors: TStrings);
begin
  Memo1.Lines.Add('Plik ustawień odrzucony (' + Source + '):');
  Memo1.Lines.AddStrings(Errors);        // e.g. "layers.water.color: not a colour"
end;

Kategorie warstw (SetCategoryColor, SetCategoryVisible): tlo, teren, zielen, woda, lotniska, tunele, drogi, mosty, kolej, budynki, obiekty, granice, poi, etykiety, inne. Nazwy i opisy wszystkich 111 warstw: MapCommon.LayerInfo (MAP_LAYER_CATEGORIES, MAP_LAYERS).

11. TMapAreas – świat, kontynenty, kraje

Edycja obszaru na mapie (RMB / long-press): prawy klawisz myszy oraz na mobile długie przytrzymanie palcem (~500 ms, anulowane przy ruchu) otwierają to samo okno edycji stylu obiektu: kolor wypełnienia, kolor i grubość granicy, edytowalny tekst na środku (kolor, wielkość czcionki). Właściwość EditPopupEnabled (domyślnie True) wyłącza to okno — wtedy ani RMB, ani long-press nic nie otwierają. Strona: komenda mostu setAreasEditEnabled ({"enabled":false}).

Areas1.EditPopupEnabled := False;   // wyłącz popup edycji (np. tryb tylko do odczytu)
Areas1.EditPopupEnabled := True;    // RMB + long-press znowu otwierają edytor

Wymaganie (2026-10-05): po wyborze państwa na liście pojawia się lista jego jednostek administracyjnych (np. województwa PL, stany USA; analogicznie inne kraje).

TMapAreas wyświetla obszary GeoJSON na każdej podłączonej mapie (Areas). Wybór jest hierarchiczny:

WholeWorld = True          → cały świat: countries.geojson (258 krajów)
                             (WorldDetail = mwdProvinces → regiony admin-1 całego świata)
WholeWorld = False
  Continents = [ ... ]     → po jednym pliku *_full.geojson na zaznaczony kontynent,
                             z granicami krajów i regionami (ShowCountryOutlines / ShowRegions)
  Countries = 'PL,DE,CZ'   → opcjonalny filtr krajów (ISO alpha-2 lub alpha-3);
                             przy pustym Continents kontynenty dobierane są z krajów

Continents to zbiór (TMapAreaContinents) – w Inspektorze obiektów każdy kontynent ma własne pole wyboru, a przycisk „…” otwiera drzewo Świat › kontynenty › kraje z polami wyboru (to samo okno otwiera „…” przy Countries i dwuklik na komponencie). Zaznaczenie kontynentu zaznacza wszystkie jego kraje; zaznaczenie tylko części krajów zapisuje je w Countries.

Kontynenty (TMapAreaContinent) odpowiadają plikom na serwerze. Dlatego jest osobna Ameryka Środkowa i nie ma Antarktydy (jest tylko w pliku świata, WholeWorld). Wyliczenie TMapContinent (mcAuto, mcEurope …) z MapCommon.Types dotyczy routingu wyszukiwarki, a nie plików obszarów.

Pliki na serwerze – https://mapa.imetroll.com/geojson/ (wersja w versiongeojson.json, aktualizacja 2026-07-28):

Plik Rozmiar Zawartość Używany przez
countries.geojson 14 643 643 B 258 krajów świata WholeWorld, mwdCountries
ne_10m_admin_1_states_provinces.geojson 40 726 851 B regiony admin-1 świata (Natural Earth) WholeWorld, mwdProvinces
europe_full.geojson 33 763 583 B Europa: kraje + regiony macEurope
africa_full.geojson 21 513 435 B Afryka macAfrica
asia_full.geojson 53 755 155 B Azja macAsia
north_america_full.geojson 23 195 198 B Ameryka Północna macNorthAmerica
central_america_full.geojson 3 939 342 B Ameryka Środkowa macCentralAmerica
south_america_full.geojson 15 000 687 B Ameryka Południowa macSouthAmerica
oceania_full.geojson 6 261 526 B Australia i Oceania macOceania

Pliki pobiera Delphi (wątek w tle, Timeout), zapisuje w CacheFolder (domyślnie <cache>\MapComponents\geojson) i odświeża po zmianie versiongeojson.json (CheckVersion). Bez sieci używana jest kopia z cache. Do strony dane trafiają w porcjach po 256 KB, więc serwer nie musi mieć CORS.

MapAreas1.WholeWorld := True;            // countries.geojson (258 countries)
MapAreas1.WorldDetail := mwdCountries;   // mwdProvinces = admin-1 regions of the world
MapAreas1.WholeWorld := False;
MapAreas1.Continents := [macEurope, macAfrica];   // europe_full + africa_full
MapAreas1.ShowCountryOutlines := True;
MapAreas1.ShowRegions := True;                    // admin-1 regions inside the countries
MapAreas1.BeginUpdate;                   // one reload
try
  MapAreas1.Continents := [];            // derived from the countries
  MapAreas1.Countries := 'PL,CZ,SK';
finally
  MapAreas1.EndUpdate;
end;
MapAreas1.ShowCountry('PL');             // filter + zoom

Zdarzenia: OnAreaClick / OnAreaHover (HoverEvents) z kodem ISO kraju, nazwą i wszystkimi właściwościami obiektu, OnAreaLoaded (liczba obiektów lub błąd), OnValidationError (np. nieznany kod kraju, plik niebędący GeoJSON, współrzędne zamienione miejscami).

procedure TForm1.MapAreas1AreaClick(Sender: TObject; const SetId: string;
  const Lat, Lon: Double; const CountryISO2, FeatureName, PropertiesJSON: string);
begin
  Caption := FeatureName + ' (' + CountryISO2 + ')';
end;

Własne pliki: kolekcja Items (ścieżka lub URL, Countries, Style) oraz LoadFromFile, LoadFromURL, LoadFromString; wygląd hierarchii – HierarchyStyle (kolory CSS, krycie, grubość i styl linii, podświetlenie, etykiety LabelProperty np. name_pl, zakres zoomu).

Item := MapAreas1.LoadFromFile('C:\dane\strefy.geojson', 'Strefy dostaw');
Item.Style.FillColor := '#2e7d32';
Item.Style.FillOpacity := 0.2;
MapAreas1.FitToArea(Item);

Granice administracyjne (ShowAdministrative + AdminLevel)

Na serwerze map (mapa.imetroll.com/geojson/) są:

Poziom Źródło Plik
admin-0 (kraje) Natural Earth countries.geojson
admin-1 (województwa / stany / prowincje) Natural Earth ne_10m_admin_1_states_provinces.geojson oraz *_full.geojson (kontynenty)
admin-2 (powiaty / counties) brak na serwerze per-kraj GeoJSON z geoBoundaries (CC BY 4.0)
Areas1.ShowAdministrative := True;
Areas1.AdminLevel := malAdmin1;          // malCountry / malAdmin1 / malAdmin2
Areas1.Countries := 'PL';                // Polska → 16 województw
Areas1.ShowAdministrativeCountry('PL', malAdmin1);
// admin-2 (geoBoundaries):
Areas1.AdminLevel := malAdmin2;
Areas1.Admin2BaseURL := '';              // domyślny szablon GitHub gbOpen/{ISO}/ADM2/...
Areas1.Countries := 'PL';

Styl per poziom: CountryStyle, Admin1Style, Admin2Style (wypełnienie, obrys, grubość).

Kraj + granice w środku: przy AdminLevel = malAdmin1 (i malAdmin2) mapa pokazuje kontur państwa (CountryStyle, linia rysowana na wierzchu, co najmniej o 1 px grubsza) oraz granice jednostek admin wewnątrz (Admin1Style: własny kolor / grubość / LineStyle). Każde województwo jest osobnym obszarem (podświetlenie, OnAreaClick); kontur kraju z jednostkami w środku nie przykrywa ich wypełnieniem ani kliknięciem. Drabinka zoomu = okna MinZoom/MaxZoom stylów (te same, z których korzysta TWeather): poza oknem Admin1Style widać i wybiera się tylko kraj, w oknie – województwa.

Areas1.ShowAdministrativeCountry('PL');      // Polska + 16 województw
Areas1.CountryStyle.LineColor := '#1A237E';  // kontur państwa
Areas1.Admin1Style.LineColor := '#7E57C2';   // granice województw
Areas1.Admin1Style.MinZoom := 3.5;           // < 3,5: tylko kraj

Trwałość ustawień edytora (SettingsFile / AutoSave / AutoLoad)

JSON jak w TEditMap (format map-areas-settings v1):

{
  "format": "map-areas-settings",
  "version": 1,
  "countries": "PL",
  "showAdministrative": true,
  "adminLevel": "admin-1",
  "hierarchyStyle": { "fillColor": "#3B82F6", "lineColor": "#1D4ED8", "lineWidth": 1.5 },
  "levelStyles": {
    "country": { "fillColor": "#3B82F6", "lineWidth": 1 },
    "admin-1": { "fillColor": "#60A5FA", "lineWidth": 1.5 },
    "admin-2": { "fillColor": "#93C5FD", "lineWidth": 1 }
  }
}
Areas1.SettingsFile := 'areas-settings.json';
Areas1.AutoLoad := True;    // przy otwarciu formularza
Areas1.AutoSave := True;    // po każdej zmianie właściwości / stylu

Strona HTML dodatkowo zapisuje opcje zestawów w localStorage (mapcomponents.areas.settings.v1). Opcjonalnie można trzymać ten sam JSON w bazie / na serwerze (np. endpoint jak TEditMap.SaveToServer) — komponent tego nie wymusza.

12. TEditMapRaster – kafle rastrowe {#editmapraster}

TEditMapRaster to host Edit (2D). Łączy się z TTileMap* (Map / TileMap.Edit, AutoLinkComponents). EditPopupEnabled dziedziczą powiązane TMapAreas (Areas.Edit).

Funkcja Opis
a) edycja pikseli PaintMode = rpmPaint / rpmCrop / rpmOpacity na canvasie kafelka; wynik → IndexedDB + SQLite (modified=1)
b) proxy tools/server/tile_proxy.py (lub .php) — nie wdrażany z pakietami; notatki instalacji w tools/server/README.md; adres źródła i klucz API trzymane po stronie serwera (TILE_UPSTREAM, TILE_APIKEY), wysyłanie edytowanych kafli wymaga TILE_TOKEN
c) stylizacja CSS filter + paint MapLibre + opcjonalna mapa kolorów; style wbudowane: neutral, google-like, apple-like, night + własny JSON
Raster1.Map := TileMap1;                                 // lub AutoDetect
Raster1.UrlTemplate := 'https://tile.example.com/{z}/{x}/{y}.png?key={apikey}';
Raster1.ApiKey := GetEnvironmentVariable('MAP_TILE_KEY'); // doklejane automatycznie
Raster1.ProxyURL := 'http://127.0.0.1:8090';              // opcjonalnie
Raster1.StyleName := 'night';                             // bez przeładowania mapy
Raster1.ApplyBuiltinStyle(mrsGoogleLike);
Raster1.LocalStore := True;                              // IndexedDB first, then server
Raster1.RefreshTile(12, 2273, 1383);                     // cache-bust + drop local

Przykład konfiguracji JSON (ConfigFile):

{
  "format": "map-raster-config",
  "version": 1,
  "urlTemplate": "https://{s}.tiles.example.com/{z}/{x}/{y}.png?key={apikey}",
  "apiKey": "DEMO-KEY",
  "cacheFolder": "",
  "proxyURL": "http://127.0.0.1:8090",
  "defaultStyle": "night"
}

Przykład stylu JSON:

{
  "format": "map-raster-style",
  "version": 1,
  "name": "night",
  "brightness": 0.7,
  "contrast": 1.1,
  "saturation": 0.55,
  "cssFilter": "brightness(0.700) contrast(1.100) saturate(0.550)",
  "colorMap": {
    "pairs": [
      { "from": "#F2EFE9", "to": "#1A2332", "tolerance": 18 },
      { "from": "#AAD3DF", "to": "#0B1A2A", "tolerance": 24 }
    ]
  }
}

Lokalny magazyn: IndexedDB w stronie; SQLite MBTiles-like (tiles + kolumna modified) w folderze danych aplikacji (StoreFile / CacheFolder). Kolejność: lokalnie → serwer/proxy.
Uwaga na politykę OSM i ToS Google/Apple — zob. tools/server/README.md.

13. Teren DEM i wysokości (T3DTerrain / T3DMap.Terrain) {#terrain}

Komponent palety T3DTerrain (MapCommon.Terrain, pakiet RT, paleta Maps) oraz właściwość zagnieżdżona Terrain na T3DMapVCL / T3DMapFMX (MapLibre raster-dem + setTerrain) pokazują prawdziwą wysokość terenu w metrach n.p.m. dla całego świata. Po włączeniu Enabled mapa 3D wznosi się według DEM; „Pokaż wysokości” (ShowElevation) odczytuje wysokość pod kursorem / kliknięciem (OnElevation) i pozwala oznaczyć punkty (ShowElevationSpots). Styl satelitarny m3sSatelliteHybrid na mapach 3D pozostaje.

T3DTerrain – powiązania (auto-link)

Właściwość Znaczenie
Map T3DMapVCL / T3DMapFMX (auto-link)
EditMap opcjonalne TEditMap (auto-link)
AutoLinkComponents domyślnie True – łączy puste Map / EditMap z formularza
Enabled włącza teren na powiązanej mapie (auto-True przy powiązaniu z Map)
Exaggeration skala pionowa (domyślnie 1.3)
SourceURL źródło DEM (domyślnie MAP_DEM_DEFAULT_URL)
Encoding mteTerrarium / mteMapbox
ShowElevation „Pokaż wysokości” (domyślnie True na T3DTerrain)
ShowElevationLabels etykiety „▲ N m n.p.m.” na mapie (niezależnie od poziomnic)
ShowContourLines poziomnice / linie wysokości (niezależnie od etykiet)
ShowHillshade cieniowanie stoków (wyróżnienie wzgórz)
ShowObjectElevation budynek/POI: teren + wysokość obiektu + dach m n.p.m.
ContourIntervalM / ContourColor / ContourWidth gęstość i wygląd poziomnic
TileBuffer prefetch pierścienia kafli XYZ (dla pmtiles:// ustaw 0)
OnElevation / OnObjectElevation klik: wysokość terenu / obiektu

Gdy T3DTerrain zostanie powiązany z mapą 3D (i opcjonalnie z TEditMap), teren 3D włącza się automatycznie (Enabled := True + ApplyToMap). Nested T3DMap*.Terrain nadal działa bez osobnego komponentu.

Widok samodzielny: T3DTerrainVCL / T3DTerrainFMX (paleta Maps) to mapa 3D z domyślnym terenem (EditSubjectKind = eskTerrain) – EditMap może się do niej podłączyć bez osobnego T3DMap*. Gdy na formie jest też T3DMap*, jedno TEditMap wystarczy: EditSubject przełącza edycję warstw mapy (eskMapLayers) vs opcji terenu (eskTerrain); metody SetTerrainContourLines / SetTerrainElevationLabels / SetTerrainHillshade / SetTerrainObjectElevation ustawiają nakładki niezależnie (tylko etykiety, tylko linie, obie, żadna).

Etykiety wysokości i poziomnice są niezależne. Budynki i POI pozostają na DEM; przy ShowObjectElevation klik odczytuje teren / wysokość obiektu / dach (OnObjectElevation).

Źródło DEM (Mapterhorn planet.pmtiles)

Domyślne źródło (MAP_DEM_DEFAULT_URL):

pmtiles://https://mapa.imetroll.com/terrain/planet.pmtiles

Archiwum Mapterhorn (~331 GB, kafle WebP 512 px, kodowanie Terrarium, zoom 0–12), serwowane z CORS i Range. MapLibre ładuje je jako raster-dem przez protokół pmtiles:// (url: źródła, bez dopisywania /{z}/{x}/{y}). Biblioteka PMTiles JS (MAP_DEFAULT_PMTILES_JS / PMTilesJSURL) jest doklejana automatycznie, gdy SourceURL zaczyna się od pmtiles://.

{ Preferowane: komponent palety (auto-link + auto-enable) }
Terrain1.Map := Map3D;           // lub AutoLinkComponents na formie
Terrain1.EditMap := EditMap1;    // opcjonalnie
Terrain1.Exaggeration := 1.5;
Terrain1.ShowElevation := True;
Terrain1.OnElevation := TerrainElevation;
Terrain1.ShowElevationSpots([49.2510], [19.9338], ['Giewont']);

{ Albo nested właściwość mapy: }
Map3D.Terrain.SourceURL := MAP_DEM_DEFAULT_URL;  // bez /{z}/{x}/{y}
Map3D.Terrain.Encoding := mteTerrarium;
Map3D.Terrain.TileBuffer := 0;
Map3D.Terrain.ShowElevation := True;
Map3D.Terrain.Enabled := True;

Strona pomocy: T3DTerrain.

Demo na żywo (HTML): help.imetroll.com/demo/t3dterrain.html – ta sama strona mapy co w komponencie, z przełącznikami Exaggeration / etykiety / poziomnice / hillshade / wysokości obiektów i przelotami Tatry–Alpy–Himalaje.

Demo Delphi: Demos/Demo3DTerritoryVCL, Demos/Demo3DTerritoryFMX.

13a. TWeather – middleware pogody

TWeather (moduł MapCommon.Weather, paleta Maps) to middleware między formularzem/mapą a serwerem https://weather.imetroll.com/v1/forecast — nie moduł wykresów. Przyjmuje parametry od programisty, dokleja key= (ApiKey / Key, ApiKeyParam='key'), wysyła GET, zwraca JSON w OnDataReady(JSON) / DataJSON. Wykresy Chart.js są opcjonalne (Charts, domyślnie wyłączone).

Co wysłać / co wraca (I/O)

Kierunek Treść
Do TWeather ApiKey (wymagany gdy RequireApiKey=True), ForecastKind (wfkCurrent / wfkHourly / wfkDaily7), Area (lat/lon, bbox, województwo…), opcjonalnie Parameters, Interval
GET do serwera /v1/forecast?latitude=&longitude=&current=&hourly=&daily=&forecast_days=&timezone=auto&key=…
Z serwera → OnDataReady JSON jak Open-Meteo: current, hourly, daily + pole icon

Pola (m.in.): temperatura, wilgotność, UV (uv_index), wiatr (wind_speed_10m + wind_direction_10m), odczuwalna (apparent_temperature), dzień/noc (is_day), opady, nasłonecznienie: sunshine_duration [s] oraz shortwave_radiation [W/m²] (daily: shortwave_radiation_sum [MJ/m²]).

Serwer wymaga ?key= na /v1/* (HTTP 401 bez klucza). Komponent bez ApiKey → wekUnauthorized.

Mapa i prezentacja

Właściwość Znaczenie
Map.Weather / Weather.Map AutoLink dwustronny
Map.WeatherInfo True = mapa rysuje pogodę z JSON; False = ignoruje nakładkę/etykiety
Display.ShowAreaLabels Ikona + temperatura na obszarach (wzorzec HTML AM; primary)
Display.LabelDensity 0/1/2 — thin wielu widgetów po zoomie (AM HTML)
Display.DensityMode admin / grid / auto — model rozmieszczenia widgetów
PointsPerAdmin Limit punktów/widgetów na jednostkę admin (tryb grid; 0 = tylko MaxPoints)
WidgetStyle Border/text/background/color/opacity CreateWidget
Map.WeatherClickMode Auto: kraj→województwo→punkt wg widocznych granic; AreaAverage / Point
Map.WeatherPointModeMinZoom Od tego zoomu Auto = punkt (domyślnie 8)
CreateWidget / CreateWidgetsForAreas Widget ikona+wartość na centroida; treść z programisty (OnWidgetContent)
Display.IconMotion wimStatic / wimPulse / wimWave
Display.LabelChrome tło pod ikoną+temp / same etykiety
Display.Opacity krycie
Display.ScaleFactor mnożnik skali ikon (gdy viewport ≥ MinScreenWidth)
Display.MinScreenWidth poniżej = bez powiększania; od tej szerokości skalowanie w górę
Display.UseCustomIcons / CustomIcons własne PNG (WMO code=url) zamiast emoji
Interval alias AutoRefreshMinutes — aplikacja cykliczna bez Chart.js

DensityMode (AM HTML centroid + średnia):

Votes := Weather1.Data.AreaBinaryVotes;
Win := Votes.WinningBit;   // remis: rain > clouds > sun > clear
Icon := WeatherBinaryStateIcon(Win, True, Weather1.Data.AverageCurrent(wpTemperature2m));
// AverageCurrent(wpWeatherCode) = WMO zwycięskiego bitu (0/1/3/61), nie mean(codes)
Weather1.Display.DensityMode := wdnmAdmin;
Weather1.CreateWidgetsForAreas;

Zdarzenia mapy (programista obsługuje): Map.OnMapClick, TMapAreas.OnAreaClick (lewy); prawy/long-press = edycja obszaru gdy EditPopupEnabled. Pozostałe właściwości zapytania: Sections, GridResolutionKm, MaxPoints, ForecastDays, PastDays, Timezone, TemperatureUnit, WindSpeedUnit, PrecipitationUnit, Models, CacheTTLSeconds, TimeoutMs, MaxRetries, MaxPointsPerRequest, MinRequestIntervalMs. Zdarzenia dodatkowe: OnProgress, OnResolveArea, OnChartsRequest (opcjonalne). Metody: Request / Refresh / RefreshAsync, DataJSON, UpdateDisplay, ClearDisplay, DetectLinkedComponents, ChartsJSON / ChartsJSONAt, HourlySeries / HourlySeriesAt.

Weather1.ApiKey := GetEnvironmentVariable('WEATHER_API_KEY');
Weather1.ForecastKind := wfkDaily7;
Weather1.Area.Kind := wakRegion;
Weather1.Area.RegionName := 'mazowieckie';
TileMap1.WeatherInfo := True;
Weather1.Display.ShowAreaLabels := True;
Weather1.Display.ScaleFactor := 1.4;
Weather1.Display.MinScreenWidth := 768;
Weather1.OnDataReady := Weather1DataReady;  // procedure(..., const JSON: string)
Weather1.Request;

Roadmap 2c (po middleware / ikonach — nie blokuje bieżącego API)

  1. 2D / kafle: gradient zachmurzenia i intensywności opadów na tile/raster.
  2. 3D: żywe chmury na wysokościach + warstwa deszczu razem z chmurami.

Demo: https://help.imetroll.com/demo/tweather-icons.html · https://help.imetroll.com/demo/tweather-click-point.html

Powiązanie ze sceną / UI: Weather.Scene ↔ Scene.Weather; Weather.Header ↔ TWeatherHeader; HourStrip / DayItems / Popup — AutoLink. Scene i widoki nie wołają serwera — tylko ApplyJSON / OnDataReady / DataJSON.

13b. TWeatherScene – animacja tła aplikacji pogodowej

TWeatherScene (MapCommon.Weather.Scene, paleta Maps) to lekka scenografia tła (dzień/noc, chmury, deszcz, słońce, wiatr, gwiazdy) za panelami z danymi. Nie jest mapą i nie woła weather.imetroll.com.

Kierunek Opis
TWeather → Scene Weather.Scene := WeatherScene1 albo WeatherScene1.Weather := Weather1 (AutoLink). Po OnDataReady Scene robi ApplyJSON.
Ręcznie WeatherScene1.ApplyJSON(Weather1.DataJSON) / ApplyFromWeather.
Host Host (TPanel / TImage / IWeatherSceneHost) dostaje SceneJSON + zdarzenie OnStateChanged.

Presety: wspAuto, wspClear, wspPartlyCloudy, wspOvercast, wspRain, wspNightClear, wspNightCloudy.

Właściwości: Weather, Host, AutoLinkComponents, Active, Preset, Options (Animated, ShowStarsAtNight, IntensityScale, SoftClouds), IsDay, CloudCover, PrecipIntensity, WindDirectionDeg, WindSpeedMs, SunVisible, StarsVisible, Overcast. Publiczne: LastSceneJSON, SceneJSON, ApplyJSON, ApplyFromWeather, RefreshHost, Clear, DetectLinkedComponents. Zdarzenia: OnStateChanged.

Rodzina UI (AutoLink tylko do TWeather)

Upuść na formę obok TWeather — rejestrują się przez RegisterLinkedView i wypełniają się na OnDataReady (bez GET):

Komponent Rola
TWeatherScene Animacja tła; Labels (caption, kolory, fonty)
TWeatherHeader Nagłówek AM HTML (ikona + obszar + temp); klik ikony → HourStrip
TWeatherHourStrip Pasek godzin (WMO + temp); Style; ikony built-in/custom
TWeatherDayItems Kafelki ~7 dni
TWeatherChart Wykres: Series[] (Title/legenda, Parameter, line/bar), ShowLegend, ShowXTicks/ShowYTicks, X/YValueFormat, punkty (ShowPoints, PointColor, PointOpacity, PointStyle filled/hollow)

Ikony: WeatherIconEmoji / WeatherWmoCodeDesc / WeatherCustomIconUrl. Tabela kodów WMO: help komponenty/tweather.html#kody-wmo.

Demo: https://help.imetroll.com/demo/tweather-area-popup.html

14. Dokumentacja referencyjna

Tabele generowane są z tej samej specyfikacji co kod (tools/gen_components.py).

14.1 Właściwości wspólne (wszystkie cztery mapy)

Właściwość Typ Domyślnie Opis
CenterLat Double – Środek mapy – szerokość geogr. (start / bieżący)
CenterLon Double – Środek mapy – długość geogr.
Zoom Double – Powiększenie 0..22
Pitch Double – Pochylenie w stopniach
Bearing Double – Obrót w stopniach
Language string – Język etykiet (pl, en, de …)
ShowScale Boolean True Podziałka (przy wczytaniu strony)
ShowNavigationControl Boolean False Kontrolka MapLibre (zoom/kompas) obok panelu przycisków
LoadingText string – Tekst podczas ładowania
AllowPopupHTML Boolean False False = dymki jako czysty tekst (bezpieczne)
ZeroLat Double – Punkt zerowy – szerokość (domyślnie Warszawa 52.2297)
ZeroLon Double – Punkt zerowy – długość (domyślnie 21.0122)
ZeroPointVisible Boolean False Rysuj znacznik punktu zerowego
ZeroTitle string – Podpowiedź znacznika punktu zerowego
ZeroIconWidth Integer 24 Szerokość ikony ZeroIcon (px)
ZeroIconHeight Integer 24 Wysokość ikony ZeroIcon (px)
HomeUsesZeroPoint Boolean True Przycisk „Home” leci do punktu zerowego
HomeLat Double – Cel „Home”, gdy HomeUsesZeroPoint = False
HomeLon Double – jw. – długość
HomeZoom Double – Zoom po „Home”
MainMarkerSource TMapMainMarkerSource mmsZeroPoint mmsZeroPoint / mmsManual / mmsDeviceLocation (awaryjnie punkt zerowy)
MainMarkerVisible Boolean True Widoczność markera głównego
MainMarkerLat Double – Pozycja przy mmsManual – szerokość
MainMarkerLon Double – Pozycja przy mmsManual – długość
MainMarkerSize Integer 18 Średnica kropki (bez ikony), px
MainMarkerSquare Boolean False Kwadrat zamiast koła
MainMarkerBorderWidth Integer 3 Grubość obramowania
MainMarkerBorderDashed Boolean False Obramowanie przerywane
MainMarkerOpacity Double – Przezroczystość 0..1
MainMarkerTitle string – Podpowiedź
MainMarkerDraggable Boolean False Użytkownik może przeciągać (OnMainMarkerMoved)
MainMarkerIconWidth Integer 32 Szerokość ikony MainMarkerIcon
MainMarkerIconHeight Integer 32 Wysokość ikony MainMarkerIcon
MainMarkerIconScale Double – Skala ikony
PulseEnabled Boolean True Pulsujący pierścień
PulseDurationMs Integer 1800 Czas jednego pulsu (ms)
LocationTimeoutMs Integer 5000 Limit czasu czujnika lokalizacji
RadiusVisible Boolean False Okrąg promienia
RadiusMeters Double – Promień w metrach
RadiusCenter TMapRadiusCenter rcMainMarker rcMainMarker / rcZeroPoint / rcManual
RadiusLat Double – Środek przy rcManual – szerokość
RadiusLon Double – Środek przy rcManual – długość
RadiusFillOpacity Double – Krycie wypełnienia 0..1
RadiusLineOpacity Double – Krycie obrysu 0..1
RadiusLineWidth Double – Grubość obrysu px (0 = brak)
RadiusLineStyle TMapLineStyle mlsSolid mlsSolid / mlsDashed / mlsDotted
RadiusLabel string – Tekst w środku, np. „2 km”
NavVisible Boolean True Panel przycisków nawigacji
NavPosition TMapButtonPanelPosition bppTopLeft Narożnik panelu
NavOrientation TMapButtonPanelOrientation bpoVertical Pionowo / poziomo
NavButtonSize Integer 36 Rozmiar przycisku px
SearchPlaceholder string – Podpowiedź pola wyszukiwania
SearchNoResultsText string – Tekst „brak wyników”
SearchSearchingText string – Tekst „szukam…”
SearchMinChars Integer 3 Minimalna liczba znaków
SearchLive Boolean False Szukaj podczas pisania (uwaga na limity!)
SearchShowDistance Boolean True Odległość od markera głównego w wynikach
SearchUseArea Boolean True Pole wyszukiwania szuka w zaznaczonym obszarze
SearchProviderURL string – Zapasowy adres Nominatim, gdy SearchProvider pusty
SearchToken string – Token – NIGDY w DFM, ustaw w kodzie
AreaShape TMapAreaShape masRectangle Kształt przycisku „Zaznacz obszar”
AreaFillOpacity Double – Krycie wypełnienia obszaru
SearchOnAreaSelected Boolean False Po zaznaczeniu uruchom AreaSearchQuery
AreaSearchQuery string – np. „restauracja”, „hydraulik”
BoundariesURL string – Kafelki wektorowe / TileJSON / PMTiles z granicami (źródło danych, nie styl)
BoundariesKind TMapBoundariesKind mbkVectorTiles mbkVectorTiles / mbkTileJSON / mbkPMTiles
BoundariesSourceLayer string – Warstwa źródłowa
BoundariesVisible Boolean False Pokaż granice

Dodatkowo: MainMarkerIcon, ZeroIcon (TPicture / TBitmap), NavButtons, SearchProvider, Areas, AutoLinkComponents; VCL: WebView2UserDataFolder, WebView2BrowserFolder, DevToolsEnabled, OpenLinksExternally; FMX: BridgeTransport.

14.2 Kolory

Właściwość VCL (TColor) FMX (TAlphaColor) Opis
MainMarkerColor $00E5881E $FF1E88E5 Kolor markera głównego
MainMarkerBorderColor clWhite $FFFFFFFF Kolor obramowania
PulseColor $00E5881E $FF1E88E5 Kolor pulsu
RadiusColor $000080FF $FFFF8000 Kolor wypełnienia promienia
RadiusLineColor clNone $00000000 Kolor obrysu (clNone = RadiusColor)
AreaColor $00E8731A $FF1A73E8 Kolor zaznaczanego obszaru
BoundariesColor $00B83D7A $FF7A3DB8 Kolor granic

14.3 Tylko mapy 3D

Właściwość Typ Domyślnie Opis
Mode TMapMode mm2D mm2D / mm3D
Pitch3D Double – Pochylenie w trybie 3D
Theme TMapTheme mtDay mtDay / mtNight
Buildings3D Boolean True Bryły budynków w 3D
ServerStyleName string – Nazwa stylu zapisanego na serwerze (Style = m3sServerStyle)
BaseRasterOpacity Double – Krycie podkładu satelita/teren w stylach hybrydowych

Plus Style: TMap3DStyle i EditMap: TEditMap. Mapy kafelkowe mają Style: TTileMapStyle.

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

CustomTileURL, CustomAttribution, CustomTileMaxZoom (kafelki), CustomStyleURL (3D), Core, Browser, IsMapReady, View, MarkerCount, LastResults, Area, HasArea.

14.5 Zdarzenia

Zdarzenie Typ Opis
OnMapReady TNotifyEvent Strona i styl gotowe
OnMapClick TMapClickEvent Kliknięcie (Lat, Lon)
OnMarkerClick TMapMarkerClickEvent Kliknięcie markera (Id)
OnZoomChanged TMapZoomChangedEvent Zmiana zoomu
OnMoveEnd TMapMoveEndEvent Koniec przesuwania (View)
OnSearchResults TMapSearchResultsEvent Wyniki wyszukiwania
OnSearchError TMapSearchErrorEvent Błąd wyszukiwania (ErrorKind pek*, HTTP, komunikat PL/EN)
OnSearchResultSelected TMapSearchResultSelectedEvent Wybór wyniku w polu wyszukiwania
OnJSError TMapJSErrorEvent Błąd strony / WebView2 / mostu
OnStyleLoaded TNotifyEvent Styl wczytany
OnAreaSelected TMapAreaSelectedEvent Zaznaczono obszar (prostokąt/wielokąt/koło)
OnNavButtonClick TMapNavButtonClickEvent Kliknięto przycisk panelu (Kind)
OnLocation TMapLocationEvent Wynik lokalizacji urządzenia
OnMainMarkerMoved TMapClickEvent Marker główny przeciągnięty

Tylko mapy 3D:

Zdarzenie Typ Opis
OnStyleJSON TMapStyleJSONEvent Odpowiedź RequestStyleJSON
OnStyleSaved TMapStyleSavedEvent SaveStyleJSON zakończony
OnModeChanged TNotifyEvent Przełączono 2D/3D
OnElevation TMapElevationEvent

14.6 Metody

Metoda
procedure ExecuteJS(const Script: string);
procedure RequestJSON(const Cmd, ArgsJSON: string; const Handler: TMapResultProc);
procedure SetView(const Lat, Lon, AZoom: Double; Animate: Boolean = False);
procedure FlyTo(const Lat, Lon: Double; const AZoom: Double = -1; DurationMs: Integer = 1500);
procedure FitBounds(const South, West, North, East: Double; PaddingPx: Integer = 40; const MaxZoom: Double = 17);
procedure FitMarkers(PaddingPx: Integer = 50; const MaxZoom: Double = 16; IncludeMainMarker: Boolean = False);
procedure SetInteractive(Enabled: Boolean);
procedure GoHome;
procedure SetZeroPoint(const Lat, Lon: Double);
procedure AddMarkerCSS(const Id: string; const Lat, Lon: Double; const CSSColor: string; const Title: string = ''; const PopupText: string = ''; const PopupHTML: string = '');
procedure RemoveMarker(const Id: string);
procedure ClearMarkers;
function HasMarker(const Id: string): Boolean;
function TryGetMarker(const Id: string; out Marker: TMapMarker): Boolean;
procedure OpenMarkerPopup(const Id: string);
procedure SetMainMarker(const Lat, Lon: Double; Visible: Boolean = True);
procedure UpdateMyLocation;
procedure ShowRadius(const Meters: Double; const LabelText: string = '');
procedure ClearRadius;
function MainMarkerDistanceFromZero: Double;
function MainMarkerBearingFromZero: Double;
procedure MainMarkerPixelOffsetFromZero(Zoom: Integer; out DX, DY: Double);
function DistanceFromMainMarker(const Lat, Lon: Double): Double;
procedure StartAreaSelection; overload;
procedure StartAreaSelection(Shape: TMapAreaShape); overload;
procedure CancelAreaSelection;
procedure SetArea(const Area: TMapArea);
procedure ClearArea;
procedure ShowSearchBox(Show: Boolean = True; const Query: string = '');
procedure SearchAddress(const Query: string);
procedure SearchStructured(const Q: TNominatimStructuredQuery);
procedure SearchInArea(const Query: string); overload;
procedure SearchInArea(const Query: string; const Area: TMapArea); overload;
procedure ReverseGeocode(const Lat, Lon: Double; Zoom: Integer = 18);
procedure LookupOsmIds(const OsmIds: string);
procedure CheckSearchConnection;
procedure NextStyle;
procedure SetRasterEdit(const ArgsJSON: string);
procedure RefreshTile(Z, X, Y: Integer);

Tylko mapy 3D:

Metoda
procedure Set2D;
procedure Set3D;
procedure ToggleMode;
procedure LoadStyleJSON(const StyleJSON: string);
procedure LoadStyleJSONFromFile(const FileName: string);
procedure SaveStyleJSON(const FileName: string);
procedure RequestStyleJSON;
procedure SetLayerVisible(const LayerId: string; Visible: Boolean);
procedure ClearStyleOverrides;
procedure ShowElevationSpots(const Lats, Lons: array of Double; const Names: array of string);
procedure ClearElevationSpots;
procedure QueryElevation(const Lat, Lon: Double; const Callback: TMapResultProc);

Oraz AddMarker(Id, Lat, Lon, Color, Title, PopupText) i AddMarker(Id, Lat, Lon, Icon, …), Reload, DetectLinkedComponents.

14.7 Pełne API wszystkich komponentów (generowane z kodu)

Poniższe tabele są generowane z deklaracji w Source/*.pas (tools/api_ref.py) – zawierają każdą opublikowaną właściwość i zdarzenie (także dziedziczone), właściwości publiczne i metody publiczne.

TTileMapVCL (MapCommon.MapVCL)

Właściwości opublikowane

Właściwość Typ Domyślnie Opis
Align (inherited) Standardowa właściwość kontrolki VCL
Anchors (inherited) Standardowa właściwość kontrolki VCL
Constraints (inherited) Standardowa właściwość kontrolki VCL
Margins (inherited) Standardowa właściwość kontrolki VCL
AlignWithMargins (inherited) Standardowa właściwość kontrolki VCL
Padding (inherited) Standardowa właściwość kontrolki VCL
TabOrder (inherited) Standardowa właściwość kontrolki VCL
TabStop (inherited) Standardowa właściwość kontrolki VCL
Visible (inherited) Standardowa właściwość kontrolki VCL
Enabled (inherited) Standardowa właściwość kontrolki VCL
Color (inherited) $00DCE4E8 Standardowa właściwość kontrolki VCL
ParentBackground (inherited) False Standardowa właściwość kontrolki VCL
Style TTileMapStyle tmsOpenStreetMap Styl mapy (enum): kafle OSM / satelita / teren / własne (TTileMap) lub styl wektorowy (T3DMap)
CenterLat (inherited) Środek mapy – szerokość geogr. (start / bieżący)
CenterLon (inherited) Środek mapy – długość geogr.
Zoom (inherited) Powiększenie 0..22
Pitch (inherited) Pochylenie w stopniach
Bearing (inherited) Obrót w stopniach
Language (inherited) Język etykiet (pl, en, de …)
ShowScale (inherited) Podziałka (przy wczytaniu strony)
ShowNavigationControl (inherited) Kontrolka MapLibre (zoom/kompas) obok panelu przycisków
LoadingText (inherited) Tekst podczas ładowania
AllowPopupHTML (inherited) False = dymki jako czysty tekst (bezpieczne)
ZeroLat (inherited) Punkt zerowy – szerokość (domyślnie Warszawa 52.2297)
ZeroLon (inherited) Punkt zerowy – długość (domyślnie 21.0122)
ZeroPointVisible (inherited) Rysuj znacznik punktu zerowego
ZeroTitle (inherited) Podpowiedź znacznika punktu zerowego
ZeroIconWidth (inherited) Szerokość ikony ZeroIcon (px)
ZeroIconHeight (inherited) Wysokość ikony ZeroIcon (px)
HomeUsesZeroPoint (inherited) Przycisk „Home” leci do punktu zerowego
HomeLat (inherited) Cel „Home”, gdy HomeUsesZeroPoint = False
HomeLon (inherited) jw. – długość
HomeZoom (inherited) Zoom po „Home”
MainMarkerSource (inherited) mmsZeroPoint / mmsManual / mmsDeviceLocation (awaryjnie punkt zerowy)
MainMarkerVisible (inherited) Widoczność markera głównego
MainMarkerLat (inherited) Pozycja przy mmsManual – szerokość
MainMarkerLon (inherited) Pozycja przy mmsManual – długość
MainMarkerSize (inherited) Średnica kropki (bez ikony), px
MainMarkerSquare (inherited) Kwadrat zamiast koła
MainMarkerBorderWidth (inherited) Grubość obramowania
MainMarkerBorderDashed (inherited) Obramowanie przerywane
MainMarkerOpacity (inherited) Przezroczystość 0..1
MainMarkerTitle (inherited) Podpowiedź
MainMarkerDraggable (inherited) Użytkownik może przeciągać (OnMainMarkerMoved)
MainMarkerIconWidth (inherited) Szerokość ikony MainMarkerIcon
MainMarkerIconHeight (inherited) Wysokość ikony MainMarkerIcon
MainMarkerIconScale (inherited) Skala ikony
PulseEnabled (inherited) Pulsujący pierścień
PulseDurationMs (inherited) Czas jednego pulsu (ms)
LocationTimeoutMs (inherited) Limit czasu czujnika lokalizacji
RadiusVisible (inherited) Okrąg promienia
RadiusMeters (inherited) Promień w metrach
RadiusCenter (inherited) rcMainMarker / rcZeroPoint / rcManual
RadiusLat (inherited) Środek przy rcManual – szerokość
RadiusLon (inherited) Środek przy rcManual – długość
RadiusFillOpacity (inherited) Krycie wypełnienia 0..1
RadiusLineOpacity (inherited) Krycie obrysu 0..1
RadiusLineWidth (inherited) Grubość obrysu px (0 = brak)
RadiusLineStyle (inherited) mlsSolid / mlsDashed / mlsDotted
RadiusLabel (inherited) Tekst w środku, np. „2 km”
NavVisible (inherited) Panel przycisków nawigacji
NavPosition (inherited) Narożnik panelu
NavOrientation (inherited) Pionowo / poziomo
NavButtonSize (inherited) Rozmiar przycisku px
SearchPlaceholder (inherited) Podpowiedź pola wyszukiwania
SearchNoResultsText (inherited) Tekst „brak wyników”
SearchSearchingText (inherited) Tekst „szukam…”
SearchMinChars (inherited) Minimalna liczba znaków
SearchLive (inherited) Szukaj podczas pisania (uwaga na limity!)
SearchShowDistance (inherited) Odległość od markera głównego w wynikach
SearchUseArea (inherited) Pole wyszukiwania szuka w zaznaczonym obszarze
SearchProviderURL (inherited) Zapasowy adres Nominatim, gdy SearchProvider pusty
SearchToken (inherited) Token – NIGDY w DFM, ustaw w kodzie
AreaShape (inherited) Kształt przycisku „Zaznacz obszar”
AreaFillOpacity (inherited) Krycie wypełnienia obszaru
SearchOnAreaSelected (inherited) Po zaznaczeniu uruchom AreaSearchQuery
AreaSearchQuery (inherited) np. „restauracja”, „hydraulik”
BoundariesURL (inherited) Kafelki wektorowe / TileJSON / PMTiles z granicami (źródło danych, nie styl)
BoundariesKind (inherited) mbkVectorTiles / mbkTileJSON / mbkPMTiles
BoundariesSourceLayer (inherited) Warstwa źródłowa
BoundariesVisible (inherited) Pokaż granice
MainMarkerColor (inherited) Kolor markera głównego
MainMarkerBorderColor (inherited) Kolor obramowania
PulseColor (inherited) Kolor pulsu
RadiusColor (inherited) Kolor wypełnienia promienia
RadiusLineColor (inherited) Kolor obrysu (clNone = RadiusColor)
AreaColor (inherited) Kolor zaznaczanego obszaru
BoundariesColor (inherited) Kolor granic
MainMarkerIcon (inherited) Ikona markera głównego (TPicture / TBitmap, PNG/SVG)
ZeroIcon (inherited) Ikona punktu zerowego
NavButtons (inherited) Kolekcja przycisków panelu nawigacji (rodzaj, widoczność, podpowiedź, kolejność)
SearchProvider (inherited) Powiązany dostawca wyszukiwania (TNominatimSearchProvider / TCustomUrlSearchProvider)
Areas (inherited) Powiązany komponent TMapAreas (granice, regiony, własne GeoJSON)
Edit (inherited)
Weather (inherited)
WeatherInfo (inherited)
WeatherClickMode (inherited)
WeatherPointModeMinZoom (inherited)
Aircraft (inherited)
AircraftInfo (inherited)
Boats (inherited)
BoatsInfo (inherited)
AutoLinkComponents (inherited) Automatycznie łącz pierwszy dostawcę wyszukiwania / TMapAreas / TEditMap z formy
WebView2UserDataFolder (inherited) Folder danych użytkownika WebView2 ('' = folder danych aplikacji)
WebView2BrowserFolder (inherited) Folder wersji stałej (Fixed Version) runtime WebView2; '' = runtime systemowy
DevToolsEnabled (inherited) Narzędzia deweloperskie przeglądarki (F12) – tylko do debugowania
OpenLinksExternally (inherited) Linki z dymków otwieraj w przeglądarce systemowej

Zdarzenia

Zdarzenie Typ Opis
OnResize (inherited) Standardowa właściwość kontrolki VCL
OnMapReady (inherited) Strona i styl gotowe
OnMapClick (inherited) Kliknięcie (Lat, Lon)
OnMarkerClick (inherited) Kliknięcie markera (Id)
OnZoomChanged (inherited) Zmiana zoomu
OnMoveEnd (inherited) Koniec przesuwania (View)
OnSearchResults (inherited) Wyniki wyszukiwania
OnSearchError (inherited) Błąd wyszukiwania (ErrorKind pek*, HTTP, komunikat PL/EN)
OnSearchResultSelected (inherited) Wybór wyniku w polu wyszukiwania
OnJSError (inherited) Błąd strony / WebView2 / mostu
OnStyleLoaded (inherited) Styl wczytany
OnAreaSelected (inherited) Zaznaczono obszar (prostokąt/wielokąt/koło)
OnNavButtonClick (inherited) Kliknięto przycisk panelu (Kind)
OnLocation (inherited) Wynik lokalizacji urządzenia
OnMainMarkerMoved (inherited) Marker główny przeciągnięty

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

Właściwość Typ Opis
Core TMapCore Wspólny rdzeń mapy (TMapCore) – dla zaawansowanych
Browser TEdgeBrowser Wewnętrzna kontrolka przeglądarki (TEdgeBrowser / TWebBrowser)
IsMapReady Boolean True po OnMapReady
View TMapView Bieżący widok (środek, zoom, pochylenie, obrót, granice)
MarkerCount Integer Liczba markerów
LastResults TMapGeoResults Ostatnie wyniki wyszukiwania
Area TMapArea Zaznaczony obszar (kształt, punkty, prostokąt, koło)
HasArea Boolean Czy obszar jest zaznaczony
CustomTileURL string Tylko w kodzie: szablon kafli {z}/{x}/{y} dla Style = tmsCustom
CustomAttribution string Atrybucja kafli własnych
CustomTileMaxZoom Integer Maksymalny zoom kafli własnych

Metody publiczne

Metoda Opis
function ResolveUserDataFolder: string Zwraca (i tworzy) folder danych WebView2
procedure Reload Przeładowuje stronę; cały stan jest odtwarzany
function EffectiveWeatherClickTarget: TWeatherClickTarget
procedure DetectLinkedComponents Wyszukuje na formie i łączy dostawcę / TMapAreas / TEditMap
function MapCore: TMapCore IMapCoreProvider – rdzeń dla TEditMapRaster
procedure ExecuteJS(const Script: string) Wykonuje JavaScript na stronie mapy
procedure RequestJSON(const Cmd, ArgsJSON: string; const Handler: TMapResultProc) Polecenie strony z odpowiedzią JSON (callback)
procedure SetView(const Lat, Lon, AZoom: Double; Animate: Boolean = False) Ustawia środek / zoom / pochylenie / obrót
procedure FlyTo(const Lat, Lon: Double; const AZoom: Double = -1; DurationMs: Integer = 1500) Animowany przelot do punktu
procedure FitBounds(const South, West, North, East: Double; PaddingPx: Integer = 40; const MaxZoom: Double = 17) Dopasuj widok do prostokąta
procedure FitMarkers(PaddingPx: Integer = 50; const MaxZoom: Double = 16; IncludeMainMarker: Boolean = False) Dopasuj widok do markerów
procedure SetInteractive(Enabled: Boolean) Włącza / wyłącza interakcję (przesuwanie, zoom)
procedure GoHome Jak przycisk „Home”
procedure SetZeroPoint(const Lat, Lon: Double) Ustawia punkt zerowy
procedure AddMarkerCSS(const Id: string; const Lat, Lon: Double; const CSSColor: string; const Title: string = ''; const PopupText: string = ''; const PopupHTML: string = '') Marker z kolorem CSS
procedure RemoveMarker(const Id: string) Usuwa marker
procedure ClearMarkers Usuwa wszystkie markery
function HasMarker(const Id: string): Boolean Czy marker o Id istnieje
function TryGetMarker(const Id: string; out Marker: TMapMarker): Boolean Odczyt markera po Id
procedure OpenMarkerPopup(const Id: string) Otwiera dymek markera
procedure SetMainMarker(const Lat, Lon: Double; Visible: Boolean = True) Ustawia pozycję markera głównego (mmsManual)
procedure UpdateMyLocation Odczyt lokalizacji urządzenia (OnLocation)
procedure ShowRadius(const Meters: Double; const LabelText: string = '') Pokazuje okrąg promienia
procedure ClearRadius Ukrywa okrąg promienia
function MainMarkerDistanceFromZero: Double Odległość markera głównego od punktu zerowego (m)
function MainMarkerBearingFromZero: Double Azymut markera głównego od punktu zerowego
procedure MainMarkerPixelOffsetFromZero(Zoom: Integer; out DX, DY: Double) Przesunięcie w pikselach względem punktu zerowego
function DistanceFromMainMarker(const Lat, Lon: Double): Double Odległość punktu od markera głównego (m)
procedure StartAreaSelection Rozpoczyna zaznaczanie obszaru
procedure CancelAreaSelection Przerywa zaznaczanie
procedure SetArea(const Area: TMapArea) Ustawia obszar z kodu
procedure ClearArea Czyści obszar
procedure ShowSearchBox(Show: Boolean = True; const Query: string = '') Pokazuje / ukrywa pole wyszukiwania
procedure SearchAddress(const Query: string) Wyszukiwanie adresu (OnSearchResults)
procedure SearchStructured(const Q: TNominatimStructuredQuery) Wyszukiwanie strukturalne (ulica, miasto, kod…)
procedure SearchInArea(const Query: string) Wyszukiwanie w zaznaczonym obszarze
procedure ReverseGeocode(const Lat, Lon: Double; Zoom: Integer = 18) Adres dla współrzędnych
procedure LookupOsmIds(const OsmIds: string) Wyszukiwanie po identyfikatorach OSM
procedure CheckSearchConnection Sprawdza połączenie z serwerem wyszukiwania
procedure NextStyle Następny styl (jak przycisk „Styl”)
procedure SetRasterEdit(const ArgsJSON: string) Ustawienia edycji / stylizacji rastra (używane przez TEditMapRaster)
procedure RefreshTile(Z, X, Y: Integer) Odświeża kafel z/x/y (cache-busting; z < 0 = wszystkie)

TTileMapFMX (MapCommon.MapFMX)

Właściwości opublikowane

Właściwość Typ Domyślnie Opis
Align (inherited) Standardowa właściwość kontrolki FMX
Anchors (inherited) Standardowa właściwość kontrolki FMX
Margins (inherited) Standardowa właściwość kontrolki FMX
Padding (inherited) Standardowa właściwość kontrolki FMX
Position (inherited) Standardowa właściwość kontrolki FMX
Width (inherited) Standardowa właściwość kontrolki FMX
Height (inherited) Standardowa właściwość kontrolki FMX
Size (inherited) Standardowa właściwość kontrolki FMX
Visible (inherited) Standardowa właściwość kontrolki FMX
Enabled (inherited) Standardowa właściwość kontrolki FMX
Style TTileMapStyle tmsOpenStreetMap Styl mapy (enum): kafle OSM / satelita / teren / własne (TTileMap) lub styl wektorowy (T3DMap)
CenterLat (inherited) Środek mapy – szerokość geogr. (start / bieżący)
CenterLon (inherited) Środek mapy – długość geogr.
Zoom (inherited) Powiększenie 0..22
Pitch (inherited) Pochylenie w stopniach
Bearing (inherited) Obrót w stopniach
Language (inherited) Język etykiet (pl, en, de …)
ShowScale (inherited) Podziałka (przy wczytaniu strony)
ShowNavigationControl (inherited) Kontrolka MapLibre (zoom/kompas) obok panelu przycisków
LoadingText (inherited) Tekst podczas ładowania
AllowPopupHTML (inherited) False = dymki jako czysty tekst (bezpieczne)
ZeroLat (inherited) Punkt zerowy – szerokość (domyślnie Warszawa 52.2297)
ZeroLon (inherited) Punkt zerowy – długość (domyślnie 21.0122)
ZeroPointVisible (inherited) Rysuj znacznik punktu zerowego
ZeroTitle (inherited) Podpowiedź znacznika punktu zerowego
ZeroIconWidth (inherited) Szerokość ikony ZeroIcon (px)
ZeroIconHeight (inherited) Wysokość ikony ZeroIcon (px)
HomeUsesZeroPoint (inherited) Przycisk „Home” leci do punktu zerowego
HomeLat (inherited) Cel „Home”, gdy HomeUsesZeroPoint = False
HomeLon (inherited) jw. – długość
HomeZoom (inherited) Zoom po „Home”
MainMarkerSource (inherited) mmsZeroPoint / mmsManual / mmsDeviceLocation (awaryjnie punkt zerowy)
MainMarkerVisible (inherited) Widoczność markera głównego
MainMarkerLat (inherited) Pozycja przy mmsManual – szerokość
MainMarkerLon (inherited) Pozycja przy mmsManual – długość
MainMarkerSize (inherited) Średnica kropki (bez ikony), px
MainMarkerSquare (inherited) Kwadrat zamiast koła
MainMarkerBorderWidth (inherited) Grubość obramowania
MainMarkerBorderDashed (inherited) Obramowanie przerywane
MainMarkerOpacity (inherited) Przezroczystość 0..1
MainMarkerTitle (inherited) Podpowiedź
MainMarkerDraggable (inherited) Użytkownik może przeciągać (OnMainMarkerMoved)
MainMarkerIconWidth (inherited) Szerokość ikony MainMarkerIcon
MainMarkerIconHeight (inherited) Wysokość ikony MainMarkerIcon
MainMarkerIconScale (inherited) Skala ikony
PulseEnabled (inherited) Pulsujący pierścień
PulseDurationMs (inherited) Czas jednego pulsu (ms)
LocationTimeoutMs (inherited) Limit czasu czujnika lokalizacji
RadiusVisible (inherited) Okrąg promienia
RadiusMeters (inherited) Promień w metrach
RadiusCenter (inherited) rcMainMarker / rcZeroPoint / rcManual
RadiusLat (inherited) Środek przy rcManual – szerokość
RadiusLon (inherited) Środek przy rcManual – długość
RadiusFillOpacity (inherited) Krycie wypełnienia 0..1
RadiusLineOpacity (inherited) Krycie obrysu 0..1
RadiusLineWidth (inherited) Grubość obrysu px (0 = brak)
RadiusLineStyle (inherited) mlsSolid / mlsDashed / mlsDotted
RadiusLabel (inherited) Tekst w środku, np. „2 km”
NavVisible (inherited) Panel przycisków nawigacji
NavPosition (inherited) Narożnik panelu
NavOrientation (inherited) Pionowo / poziomo
NavButtonSize (inherited) Rozmiar przycisku px
SearchPlaceholder (inherited) Podpowiedź pola wyszukiwania
SearchNoResultsText (inherited) Tekst „brak wyników”
SearchSearchingText (inherited) Tekst „szukam…”
SearchMinChars (inherited) Minimalna liczba znaków
SearchLive (inherited) Szukaj podczas pisania (uwaga na limity!)
SearchShowDistance (inherited) Odległość od markera głównego w wynikach
SearchUseArea (inherited) Pole wyszukiwania szuka w zaznaczonym obszarze
SearchProviderURL (inherited) Zapasowy adres Nominatim, gdy SearchProvider pusty
SearchToken (inherited) Token – NIGDY w DFM, ustaw w kodzie
AreaShape (inherited) Kształt przycisku „Zaznacz obszar”
AreaFillOpacity (inherited) Krycie wypełnienia obszaru
SearchOnAreaSelected (inherited) Po zaznaczeniu uruchom AreaSearchQuery
AreaSearchQuery (inherited) np. „restauracja”, „hydraulik”
BoundariesURL (inherited) Kafelki wektorowe / TileJSON / PMTiles z granicami (źródło danych, nie styl)
BoundariesKind (inherited) mbkVectorTiles / mbkTileJSON / mbkPMTiles
BoundariesSourceLayer (inherited) Warstwa źródłowa
BoundariesVisible (inherited) Pokaż granice
MainMarkerColor (inherited) Kolor markera głównego
MainMarkerBorderColor (inherited) Kolor obramowania
PulseColor (inherited) Kolor pulsu
RadiusColor (inherited) Kolor wypełnienia promienia
RadiusLineColor (inherited) Kolor obrysu (clNone = RadiusColor)
AreaColor (inherited) Kolor zaznaczanego obszaru
BoundariesColor (inherited) Kolor granic
MainMarkerIcon (inherited) Ikona markera głównego (TPicture / TBitmap, PNG/SVG)
ZeroIcon (inherited) Ikona punktu zerowego
NavButtons (inherited) Kolekcja przycisków panelu nawigacji (rodzaj, widoczność, podpowiedź, kolejność)
SearchProvider (inherited) Powiązany dostawca wyszukiwania (TNominatimSearchProvider / TCustomUrlSearchProvider)
Areas (inherited) Powiązany komponent TMapAreas (granice, regiony, własne GeoJSON)
Edit (inherited)
Weather (inherited)
WeatherInfo (inherited)
WeatherClickMode (inherited)
WeatherPointModeMinZoom (inherited)
Aircraft (inherited)
AircraftInfo (inherited)
Boats (inherited)
BoatsInfo (inherited)
AutoLinkComponents (inherited) Automatycznie łącz pierwszy dostawcę wyszukiwania / TMapAreas / TEditMap z formy
BridgeTransport (inherited) Kanał komunikacji strona ↔ Delphi: mbtAuto / WebView2 / WebBrowser (FMX)

Zdarzenia

Zdarzenie Typ Opis
OnResized (inherited) Standardowa właściwość kontrolki FMX
OnMapReady (inherited) Strona i styl gotowe
OnMapClick (inherited) Kliknięcie (Lat, Lon)
OnMarkerClick (inherited) Kliknięcie markera (Id)
OnZoomChanged (inherited) Zmiana zoomu
OnMoveEnd (inherited) Koniec przesuwania (View)
OnSearchResults (inherited) Wyniki wyszukiwania
OnSearchError (inherited) Błąd wyszukiwania (ErrorKind pek*, HTTP, komunikat PL/EN)
OnSearchResultSelected (inherited) Wybór wyniku w polu wyszukiwania
OnJSError (inherited) Błąd strony / WebView2 / mostu
OnStyleLoaded (inherited) Styl wczytany
OnAreaSelected (inherited) Zaznaczono obszar (prostokąt/wielokąt/koło)
OnNavButtonClick (inherited) Kliknięto przycisk panelu (Kind)
OnLocation (inherited) Wynik lokalizacji urządzenia
OnMainMarkerMoved (inherited) Marker główny przeciągnięty

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

Właściwość Typ Opis
Core TMapCore Wspólny rdzeń mapy (TMapCore) – dla zaawansowanych
Browser TWebBrowser Wewnętrzna kontrolka przeglądarki (TEdgeBrowser / TWebBrowser)
IsMapReady Boolean True po OnMapReady
View TMapView Bieżący widok (środek, zoom, pochylenie, obrót, granice)
MarkerCount Integer Liczba markerów
LastResults TMapGeoResults Ostatnie wyniki wyszukiwania
Area TMapArea Zaznaczony obszar (kształt, punkty, prostokąt, koło)
HasArea Boolean Czy obszar jest zaznaczony
BridgeMessagesSeen Integer Licznik odebranych komunikatów mostu (diagnostyka)
CustomTileURL string Tylko w kodzie: szablon kafli {z}/{x}/{y} dla Style = tmsCustom
CustomAttribution string Atrybucja kafli własnych
CustomTileMaxZoom Integer Maksymalny zoom kafli własnych

Metody publiczne

Metoda Opis
procedure Reload Przeładowuje stronę; cały stan jest odtwarzany
function EffectiveWeatherClickTarget: TWeatherClickTarget
procedure DetectLinkedComponents Wyszukuje na formie i łączy dostawcę / TMapAreas / TEditMap
function MapCore: TMapCore IMapCoreProvider – rdzeń dla TEditMapRaster
procedure ExecuteJS(const Script: string) Wykonuje JavaScript na stronie mapy
procedure RequestJSON(const Cmd, ArgsJSON: string; const Handler: TMapResultProc) Polecenie strony z odpowiedzią JSON (callback)
procedure SetView(const Lat, Lon, AZoom: Double; Animate: Boolean = False) Ustawia środek / zoom / pochylenie / obrót
procedure FlyTo(const Lat, Lon: Double; const AZoom: Double = -1; DurationMs: Integer = 1500) Animowany przelot do punktu
procedure FitBounds(const South, West, North, East: Double; PaddingPx: Integer = 40; const MaxZoom: Double = 17) Dopasuj widok do prostokąta
procedure FitMarkers(PaddingPx: Integer = 50; const MaxZoom: Double = 16; IncludeMainMarker: Boolean = False) Dopasuj widok do markerów
procedure SetInteractive(Enabled: Boolean) Włącza / wyłącza interakcję (przesuwanie, zoom)
procedure GoHome Jak przycisk „Home”
procedure SetZeroPoint(const Lat, Lon: Double) Ustawia punkt zerowy
procedure AddMarkerCSS(const Id: string; const Lat, Lon: Double; const CSSColor: string; const Title: string = ''; const PopupText: string = ''; const PopupHTML: string = '') Marker z kolorem CSS
procedure RemoveMarker(const Id: string) Usuwa marker
procedure ClearMarkers Usuwa wszystkie markery
function HasMarker(const Id: string): Boolean Czy marker o Id istnieje
function TryGetMarker(const Id: string; out Marker: TMapMarker): Boolean Odczyt markera po Id
procedure OpenMarkerPopup(const Id: string) Otwiera dymek markera
procedure SetMainMarker(const Lat, Lon: Double; Visible: Boolean = True) Ustawia pozycję markera głównego (mmsManual)
procedure UpdateMyLocation Odczyt lokalizacji urządzenia (OnLocation)
procedure ShowRadius(const Meters: Double; const LabelText: string = '') Pokazuje okrąg promienia
procedure ClearRadius Ukrywa okrąg promienia
function MainMarkerDistanceFromZero: Double Odległość markera głównego od punktu zerowego (m)
function MainMarkerBearingFromZero: Double Azymut markera głównego od punktu zerowego
procedure MainMarkerPixelOffsetFromZero(Zoom: Integer; out DX, DY: Double) Przesunięcie w pikselach względem punktu zerowego
function DistanceFromMainMarker(const Lat, Lon: Double): Double Odległość punktu od markera głównego (m)
procedure StartAreaSelection Rozpoczyna zaznaczanie obszaru
procedure CancelAreaSelection Przerywa zaznaczanie
procedure SetArea(const Area: TMapArea) Ustawia obszar z kodu
procedure ClearArea Czyści obszar
procedure ShowSearchBox(Show: Boolean = True; const Query: string = '') Pokazuje / ukrywa pole wyszukiwania
procedure SearchAddress(const Query: string) Wyszukiwanie adresu (OnSearchResults)
procedure SearchStructured(const Q: TNominatimStructuredQuery) Wyszukiwanie strukturalne (ulica, miasto, kod…)
procedure SearchInArea(const Query: string) Wyszukiwanie w zaznaczonym obszarze
procedure ReverseGeocode(const Lat, Lon: Double; Zoom: Integer = 18) Adres dla współrzędnych
procedure LookupOsmIds(const OsmIds: string) Wyszukiwanie po identyfikatorach OSM
procedure CheckSearchConnection Sprawdza połączenie z serwerem wyszukiwania
procedure NextStyle Następny styl (jak przycisk „Styl”)
procedure SetRasterEdit(const ArgsJSON: string) Ustawienia edycji / stylizacji rastra (używane przez TEditMapRaster)
procedure RefreshTile(Z, X, Y: Integer) Odświeża kafel z/x/y (cache-busting; z < 0 = wszystkie)

T3DMapVCL (MapCommon.MapVCL)

Właściwości opublikowane

Właściwość Typ Domyślnie Opis
Align (inherited) Standardowa właściwość kontrolki VCL
Anchors (inherited) Standardowa właściwość kontrolki VCL
Constraints (inherited) Standardowa właściwość kontrolki VCL
Margins (inherited) Standardowa właściwość kontrolki VCL
AlignWithMargins (inherited) Standardowa właściwość kontrolki VCL
Padding (inherited) Standardowa właściwość kontrolki VCL
TabOrder (inherited) Standardowa właściwość kontrolki VCL
TabStop (inherited) Standardowa właściwość kontrolki VCL
Visible (inherited) Standardowa właściwość kontrolki VCL
Enabled (inherited) Standardowa właściwość kontrolki VCL
Color (inherited) $00DCE4E8 Standardowa właściwość kontrolki VCL
ParentBackground (inherited) False Standardowa właściwość kontrolki VCL
Style TMap3DStyle m3sVector Styl mapy (enum): kafle OSM / satelita / teren / własne (TTileMap) lub styl wektorowy (T3DMap)
CenterLat (inherited) Środek mapy – szerokość geogr. (start / bieżący)
CenterLon (inherited) Środek mapy – długość geogr.
Zoom (inherited) Powiększenie 0..22
Pitch (inherited) Pochylenie w stopniach
Bearing (inherited) Obrót w stopniach
Language (inherited) Język etykiet (pl, en, de …)
ShowScale (inherited) Podziałka (przy wczytaniu strony)
ShowNavigationControl (inherited) Kontrolka MapLibre (zoom/kompas) obok panelu przycisków
LoadingText (inherited) Tekst podczas ładowania
AllowPopupHTML (inherited) False = dymki jako czysty tekst (bezpieczne)
ZeroLat (inherited) Punkt zerowy – szerokość (domyślnie Warszawa 52.2297)
ZeroLon (inherited) Punkt zerowy – długość (domyślnie 21.0122)
ZeroPointVisible (inherited) Rysuj znacznik punktu zerowego
ZeroTitle (inherited) Podpowiedź znacznika punktu zerowego
ZeroIconWidth (inherited) Szerokość ikony ZeroIcon (px)
ZeroIconHeight (inherited) Wysokość ikony ZeroIcon (px)
HomeUsesZeroPoint (inherited) Przycisk „Home” leci do punktu zerowego
HomeLat (inherited) Cel „Home”, gdy HomeUsesZeroPoint = False
HomeLon (inherited) jw. – długość
HomeZoom (inherited) Zoom po „Home”
MainMarkerSource (inherited) mmsZeroPoint / mmsManual / mmsDeviceLocation (awaryjnie punkt zerowy)
MainMarkerVisible (inherited) Widoczność markera głównego
MainMarkerLat (inherited) Pozycja przy mmsManual – szerokość
MainMarkerLon (inherited) Pozycja przy mmsManual – długość
MainMarkerSize (inherited) Średnica kropki (bez ikony), px
MainMarkerSquare (inherited) Kwadrat zamiast koła
MainMarkerBorderWidth (inherited) Grubość obramowania
MainMarkerBorderDashed (inherited) Obramowanie przerywane
MainMarkerOpacity (inherited) Przezroczystość 0..1
MainMarkerTitle (inherited) Podpowiedź
MainMarkerDraggable (inherited) Użytkownik może przeciągać (OnMainMarkerMoved)
MainMarkerIconWidth (inherited) Szerokość ikony MainMarkerIcon
MainMarkerIconHeight (inherited) Wysokość ikony MainMarkerIcon
MainMarkerIconScale (inherited) Skala ikony
PulseEnabled (inherited) Pulsujący pierścień
PulseDurationMs (inherited) Czas jednego pulsu (ms)
LocationTimeoutMs (inherited) Limit czasu czujnika lokalizacji
RadiusVisible (inherited) Okrąg promienia
RadiusMeters (inherited) Promień w metrach
RadiusCenter (inherited) rcMainMarker / rcZeroPoint / rcManual
RadiusLat (inherited) Środek przy rcManual – szerokość
RadiusLon (inherited) Środek przy rcManual – długość
RadiusFillOpacity (inherited) Krycie wypełnienia 0..1
RadiusLineOpacity (inherited) Krycie obrysu 0..1
RadiusLineWidth (inherited) Grubość obrysu px (0 = brak)
RadiusLineStyle (inherited) mlsSolid / mlsDashed / mlsDotted
RadiusLabel (inherited) Tekst w środku, np. „2 km”
NavVisible (inherited) Panel przycisków nawigacji
NavPosition (inherited) Narożnik panelu
NavOrientation (inherited) Pionowo / poziomo
NavButtonSize (inherited) Rozmiar przycisku px
SearchPlaceholder (inherited) Podpowiedź pola wyszukiwania
SearchNoResultsText (inherited) Tekst „brak wyników”
SearchSearchingText (inherited) Tekst „szukam…”
SearchMinChars (inherited) Minimalna liczba znaków
SearchLive (inherited) Szukaj podczas pisania (uwaga na limity!)
SearchShowDistance (inherited) Odległość od markera głównego w wynikach
SearchUseArea (inherited) Pole wyszukiwania szuka w zaznaczonym obszarze
SearchProviderURL (inherited) Zapasowy adres Nominatim, gdy SearchProvider pusty
SearchToken (inherited) Token – NIGDY w DFM, ustaw w kodzie
AreaShape (inherited) Kształt przycisku „Zaznacz obszar”
AreaFillOpacity (inherited) Krycie wypełnienia obszaru
SearchOnAreaSelected (inherited) Po zaznaczeniu uruchom AreaSearchQuery
AreaSearchQuery (inherited) np. „restauracja”, „hydraulik”
BoundariesURL (inherited) Kafelki wektorowe / TileJSON / PMTiles z granicami (źródło danych, nie styl)
BoundariesKind (inherited) mbkVectorTiles / mbkTileJSON / mbkPMTiles
BoundariesSourceLayer (inherited) Warstwa źródłowa
BoundariesVisible (inherited) Pokaż granice
Mode TMapMode mm2D mm2D / mm3D
Pitch3D Double Pochylenie w trybie 3D
Theme TMapTheme mtDay mtDay / mtNight
Buildings3D Boolean True Bryły budynków w 3D
ServerStyleName string Nazwa stylu zapisanego na serwerze (Style = m3sServerStyle)
BaseRasterOpacity Double Krycie podkładu satelita/teren w stylach hybrydowych
MainMarkerColor (inherited) Kolor markera głównego
MainMarkerBorderColor (inherited) Kolor obramowania
PulseColor (inherited) Kolor pulsu
RadiusColor (inherited) Kolor wypełnienia promienia
RadiusLineColor (inherited) Kolor obrysu (clNone = RadiusColor)
AreaColor (inherited) Kolor zaznaczanego obszaru
BoundariesColor (inherited) Kolor granic
Terrain TMapTerrainSettings Teren DEM (T3DMap*): Enabled, Exaggeration (1,3), SourceURL (XYZ PNG), Encoding (mteTerrarium / mteMapbox), ShowElevation („Pokaż wysokości”), TileBuffer (bufor kafli wokół widoku)
MainMarkerIcon (inherited) Ikona markera głównego (TPicture / TBitmap, PNG/SVG)
ZeroIcon (inherited) Ikona punktu zerowego
NavButtons (inherited) Kolekcja przycisków panelu nawigacji (rodzaj, widoczność, podpowiedź, kolejność)
SearchProvider (inherited) Powiązany dostawca wyszukiwania (TNominatimSearchProvider / TCustomUrlSearchProvider)
Areas (inherited) Powiązany komponent TMapAreas (granice, regiony, własne GeoJSON)
Edit (inherited)
Weather (inherited)
WeatherInfo (inherited)
WeatherClickMode (inherited)
WeatherPointModeMinZoom (inherited)
Aircraft (inherited)
AircraftInfo (inherited)
Boats (inherited)
BoatsInfo (inherited)
Edit3D (inherited)
EditMap (inherited) Powiązany TEditMap (kolory, przezroczystość, grubość warstw)
AutoLinkComponents (inherited) Automatycznie łącz pierwszy dostawcę wyszukiwania / TMapAreas / TEditMap z formy
WebView2UserDataFolder (inherited) Folder danych użytkownika WebView2 ('' = folder danych aplikacji)
WebView2BrowserFolder (inherited) Folder wersji stałej (Fixed Version) runtime WebView2; '' = runtime systemowy
DevToolsEnabled (inherited) Narzędzia deweloperskie przeglądarki (F12) – tylko do debugowania
OpenLinksExternally (inherited) Linki z dymków otwieraj w przeglądarce systemowej

Zdarzenia

Zdarzenie Typ Opis
OnResize (inherited) Standardowa właściwość kontrolki VCL
OnMapReady (inherited) Strona i styl gotowe
OnMapClick (inherited) Kliknięcie (Lat, Lon)
OnMarkerClick (inherited) Kliknięcie markera (Id)
OnZoomChanged (inherited) Zmiana zoomu
OnMoveEnd (inherited) Koniec przesuwania (View)
OnSearchResults (inherited) Wyniki wyszukiwania
OnSearchError (inherited) Błąd wyszukiwania (ErrorKind pek*, HTTP, komunikat PL/EN)
OnSearchResultSelected (inherited) Wybór wyniku w polu wyszukiwania
OnJSError (inherited) Błąd strony / WebView2 / mostu
OnStyleLoaded (inherited) Styl wczytany
OnAreaSelected (inherited) Zaznaczono obszar (prostokąt/wielokąt/koło)
OnNavButtonClick (inherited) Kliknięto przycisk panelu (Kind)
OnLocation (inherited) Wynik lokalizacji urządzenia
OnMainMarkerMoved (inherited) Marker główny przeciągnięty
OnStyleJSON TMapStyleJSONEvent Odpowiedź RequestStyleJSON
OnStyleSaved TMapStyleSavedEvent SaveStyleJSON zakończony
OnModeChanged TNotifyEvent Przełączono 2D/3D
OnElevation TMapElevationEvent Klik przy Terrain.ShowElevation lub wynik QueryElevation: Lat, Lon, metry n.p.m. (NaN = brak danych)

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

Właściwość Typ Opis
Core TMapCore Wspólny rdzeń mapy (TMapCore) – dla zaawansowanych
Browser TEdgeBrowser Wewnętrzna kontrolka przeglądarki (TEdgeBrowser / TWebBrowser)
IsMapReady Boolean True po OnMapReady
View TMapView Bieżący widok (środek, zoom, pochylenie, obrót, granice)
MarkerCount Integer Liczba markerów
LastResults TMapGeoResults Ostatnie wyniki wyszukiwania
Area TMapArea Zaznaczony obszar (kształt, punkty, prostokąt, koło)
HasArea Boolean Czy obszar jest zaznaczony
CustomStyleURL string Tylko w kodzie: URL stylu dla Style = m3sCustom

Metody publiczne

Metoda Opis
function ResolveUserDataFolder: string Zwraca (i tworzy) folder danych WebView2
procedure Reload Przeładowuje stronę; cały stan jest odtwarzany
function EffectiveWeatherClickTarget: TWeatherClickTarget
procedure DetectLinkedComponents Wyszukuje na formie i łączy dostawcę / TMapAreas / TEditMap
function MapCore: TMapCore IMapCoreProvider – rdzeń dla TEditMapRaster
procedure ExecuteJS(const Script: string) Wykonuje JavaScript na stronie mapy
procedure RequestJSON(const Cmd, ArgsJSON: string; const Handler: TMapResultProc) Polecenie strony z odpowiedzią JSON (callback)
procedure SetView(const Lat, Lon, AZoom: Double; Animate: Boolean = False) Ustawia środek / zoom / pochylenie / obrót
procedure FlyTo(const Lat, Lon: Double; const AZoom: Double = -1; DurationMs: Integer = 1500) Animowany przelot do punktu
procedure FitBounds(const South, West, North, East: Double; PaddingPx: Integer = 40; const MaxZoom: Double = 17) Dopasuj widok do prostokąta
procedure FitMarkers(PaddingPx: Integer = 50; const MaxZoom: Double = 16; IncludeMainMarker: Boolean = False) Dopasuj widok do markerów
procedure SetInteractive(Enabled: Boolean) Włącza / wyłącza interakcję (przesuwanie, zoom)
procedure GoHome Jak przycisk „Home”
procedure SetZeroPoint(const Lat, Lon: Double) Ustawia punkt zerowy
procedure AddMarkerCSS(const Id: string; const Lat, Lon: Double; const CSSColor: string; const Title: string = ''; const PopupText: string = ''; const PopupHTML: string = '') Marker z kolorem CSS
procedure RemoveMarker(const Id: string) Usuwa marker
procedure ClearMarkers Usuwa wszystkie markery
function HasMarker(const Id: string): Boolean Czy marker o Id istnieje
function TryGetMarker(const Id: string; out Marker: TMapMarker): Boolean Odczyt markera po Id
procedure OpenMarkerPopup(const Id: string) Otwiera dymek markera
procedure SetMainMarker(const Lat, Lon: Double; Visible: Boolean = True) Ustawia pozycję markera głównego (mmsManual)
procedure UpdateMyLocation Odczyt lokalizacji urządzenia (OnLocation)
procedure ShowRadius(const Meters: Double; const LabelText: string = '') Pokazuje okrąg promienia
procedure ClearRadius Ukrywa okrąg promienia
function MainMarkerDistanceFromZero: Double Odległość markera głównego od punktu zerowego (m)
function MainMarkerBearingFromZero: Double Azymut markera głównego od punktu zerowego
procedure MainMarkerPixelOffsetFromZero(Zoom: Integer; out DX, DY: Double) Przesunięcie w pikselach względem punktu zerowego
function DistanceFromMainMarker(const Lat, Lon: Double): Double Odległość punktu od markera głównego (m)
procedure StartAreaSelection Rozpoczyna zaznaczanie obszaru
procedure CancelAreaSelection Przerywa zaznaczanie
procedure SetArea(const Area: TMapArea) Ustawia obszar z kodu
procedure ClearArea Czyści obszar
procedure ShowSearchBox(Show: Boolean = True; const Query: string = '') Pokazuje / ukrywa pole wyszukiwania
procedure SearchAddress(const Query: string) Wyszukiwanie adresu (OnSearchResults)
procedure SearchStructured(const Q: TNominatimStructuredQuery) Wyszukiwanie strukturalne (ulica, miasto, kod…)
procedure SearchInArea(const Query: string) Wyszukiwanie w zaznaczonym obszarze
procedure ReverseGeocode(const Lat, Lon: Double; Zoom: Integer = 18) Adres dla współrzędnych
procedure LookupOsmIds(const OsmIds: string) Wyszukiwanie po identyfikatorach OSM
procedure CheckSearchConnection Sprawdza połączenie z serwerem wyszukiwania
procedure NextStyle Następny styl (jak przycisk „Styl”)
procedure SetRasterEdit(const ArgsJSON: string) Ustawienia edycji / stylizacji rastra (używane przez TEditMapRaster)
procedure RefreshTile(Z, X, Y: Integer) Odświeża kafel z/x/y (cache-busting; z < 0 = wszystkie)
procedure Set2D Tryb 2D
procedure Set3D Tryb 3D
procedure ToggleMode Przełącza 2D/3D
procedure LoadStyleJSON(const StyleJSON: string) Wczytuje styl MapLibre z tekstu JSON
procedure LoadStyleJSONFromFile(const FileName: string) Wczytuje styl z pliku
procedure SaveStyleJSON(const FileName: string) Zapisuje styl na serwerze (OnStyleSaved)
procedure RequestStyleJSON Pobiera bieżący styl (OnStyleJSON)
procedure SetLayerVisible(const LayerId: string; Visible: Boolean) Widoczność warstwy stylu
procedure ClearStyleOverrides Usuwa zmiany warstw (kolory itp.)
procedure ShowElevationSpots(const Lats, Lons: array of Double; const Names: array of string) Etykiety wysokości n.p.m. w punktach (Lats, Lons, Names)
procedure ClearElevationSpots Usuwa etykiety wysokości
procedure QueryElevation(const Lat, Lon: Double; const Callback: TMapResultProc) Wysokość n.p.m. w punkcie (callback JSON {"meters":…})

T3DMapFMX (MapCommon.MapFMX)

Właściwości opublikowane

Właściwość Typ Domyślnie Opis
Align (inherited) Standardowa właściwość kontrolki FMX
Anchors (inherited) Standardowa właściwość kontrolki FMX
Margins (inherited) Standardowa właściwość kontrolki FMX
Padding (inherited) Standardowa właściwość kontrolki FMX
Position (inherited) Standardowa właściwość kontrolki FMX
Width (inherited) Standardowa właściwość kontrolki FMX
Height (inherited) Standardowa właściwość kontrolki FMX
Size (inherited) Standardowa właściwość kontrolki FMX
Visible (inherited) Standardowa właściwość kontrolki FMX
Enabled (inherited) Standardowa właściwość kontrolki FMX
Style TMap3DStyle m3sVector Styl mapy (enum): kafle OSM / satelita / teren / własne (TTileMap) lub styl wektorowy (T3DMap)
CenterLat (inherited) Środek mapy – szerokość geogr. (start / bieżący)
CenterLon (inherited) Środek mapy – długość geogr.
Zoom (inherited) Powiększenie 0..22
Pitch (inherited) Pochylenie w stopniach
Bearing (inherited) Obrót w stopniach
Language (inherited) Język etykiet (pl, en, de …)
ShowScale (inherited) Podziałka (przy wczytaniu strony)
ShowNavigationControl (inherited) Kontrolka MapLibre (zoom/kompas) obok panelu przycisków
LoadingText (inherited) Tekst podczas ładowania
AllowPopupHTML (inherited) False = dymki jako czysty tekst (bezpieczne)
ZeroLat (inherited) Punkt zerowy – szerokość (domyślnie Warszawa 52.2297)
ZeroLon (inherited) Punkt zerowy – długość (domyślnie 21.0122)
ZeroPointVisible (inherited) Rysuj znacznik punktu zerowego
ZeroTitle (inherited) Podpowiedź znacznika punktu zerowego
ZeroIconWidth (inherited) Szerokość ikony ZeroIcon (px)
ZeroIconHeight (inherited) Wysokość ikony ZeroIcon (px)
HomeUsesZeroPoint (inherited) Przycisk „Home” leci do punktu zerowego
HomeLat (inherited) Cel „Home”, gdy HomeUsesZeroPoint = False
HomeLon (inherited) jw. – długość
HomeZoom (inherited) Zoom po „Home”
MainMarkerSource (inherited) mmsZeroPoint / mmsManual / mmsDeviceLocation (awaryjnie punkt zerowy)
MainMarkerVisible (inherited) Widoczność markera głównego
MainMarkerLat (inherited) Pozycja przy mmsManual – szerokość
MainMarkerLon (inherited) Pozycja przy mmsManual – długość
MainMarkerSize (inherited) Średnica kropki (bez ikony), px
MainMarkerSquare (inherited) Kwadrat zamiast koła
MainMarkerBorderWidth (inherited) Grubość obramowania
MainMarkerBorderDashed (inherited) Obramowanie przerywane
MainMarkerOpacity (inherited) Przezroczystość 0..1
MainMarkerTitle (inherited) Podpowiedź
MainMarkerDraggable (inherited) Użytkownik może przeciągać (OnMainMarkerMoved)
MainMarkerIconWidth (inherited) Szerokość ikony MainMarkerIcon
MainMarkerIconHeight (inherited) Wysokość ikony MainMarkerIcon
MainMarkerIconScale (inherited) Skala ikony
PulseEnabled (inherited) Pulsujący pierścień
PulseDurationMs (inherited) Czas jednego pulsu (ms)
LocationTimeoutMs (inherited) Limit czasu czujnika lokalizacji
RadiusVisible (inherited) Okrąg promienia
RadiusMeters (inherited) Promień w metrach
RadiusCenter (inherited) rcMainMarker / rcZeroPoint / rcManual
RadiusLat (inherited) Środek przy rcManual – szerokość
RadiusLon (inherited) Środek przy rcManual – długość
RadiusFillOpacity (inherited) Krycie wypełnienia 0..1
RadiusLineOpacity (inherited) Krycie obrysu 0..1
RadiusLineWidth (inherited) Grubość obrysu px (0 = brak)
RadiusLineStyle (inherited) mlsSolid / mlsDashed / mlsDotted
RadiusLabel (inherited) Tekst w środku, np. „2 km”
NavVisible (inherited) Panel przycisków nawigacji
NavPosition (inherited) Narożnik panelu
NavOrientation (inherited) Pionowo / poziomo
NavButtonSize (inherited) Rozmiar przycisku px
SearchPlaceholder (inherited) Podpowiedź pola wyszukiwania
SearchNoResultsText (inherited) Tekst „brak wyników”
SearchSearchingText (inherited) Tekst „szukam…”
SearchMinChars (inherited) Minimalna liczba znaków
SearchLive (inherited) Szukaj podczas pisania (uwaga na limity!)
SearchShowDistance (inherited) Odległość od markera głównego w wynikach
SearchUseArea (inherited) Pole wyszukiwania szuka w zaznaczonym obszarze
SearchProviderURL (inherited) Zapasowy adres Nominatim, gdy SearchProvider pusty
SearchToken (inherited) Token – NIGDY w DFM, ustaw w kodzie
AreaShape (inherited) Kształt przycisku „Zaznacz obszar”
AreaFillOpacity (inherited) Krycie wypełnienia obszaru
SearchOnAreaSelected (inherited) Po zaznaczeniu uruchom AreaSearchQuery
AreaSearchQuery (inherited) np. „restauracja”, „hydraulik”
BoundariesURL (inherited) Kafelki wektorowe / TileJSON / PMTiles z granicami (źródło danych, nie styl)
BoundariesKind (inherited) mbkVectorTiles / mbkTileJSON / mbkPMTiles
BoundariesSourceLayer (inherited) Warstwa źródłowa
BoundariesVisible (inherited) Pokaż granice
Mode TMapMode mm2D mm2D / mm3D
Pitch3D Double Pochylenie w trybie 3D
Theme TMapTheme mtDay mtDay / mtNight
Buildings3D Boolean True Bryły budynków w 3D
ServerStyleName string Nazwa stylu zapisanego na serwerze (Style = m3sServerStyle)
BaseRasterOpacity Double Krycie podkładu satelita/teren w stylach hybrydowych
MainMarkerColor (inherited) Kolor markera głównego
MainMarkerBorderColor (inherited) Kolor obramowania
PulseColor (inherited) Kolor pulsu
RadiusColor (inherited) Kolor wypełnienia promienia
RadiusLineColor (inherited) Kolor obrysu (clNone = RadiusColor)
AreaColor (inherited) Kolor zaznaczanego obszaru
BoundariesColor (inherited) Kolor granic
Terrain TMapTerrainSettings Teren DEM (T3DMap*): Enabled, Exaggeration (1,3), SourceURL (XYZ PNG), Encoding (mteTerrarium / mteMapbox), ShowElevation („Pokaż wysokości”), TileBuffer (bufor kafli wokół widoku)
MainMarkerIcon (inherited) Ikona markera głównego (TPicture / TBitmap, PNG/SVG)
ZeroIcon (inherited) Ikona punktu zerowego
NavButtons (inherited) Kolekcja przycisków panelu nawigacji (rodzaj, widoczność, podpowiedź, kolejność)
SearchProvider (inherited) Powiązany dostawca wyszukiwania (TNominatimSearchProvider / TCustomUrlSearchProvider)
Areas (inherited) Powiązany komponent TMapAreas (granice, regiony, własne GeoJSON)
Edit (inherited)
Weather (inherited)
WeatherInfo (inherited)
WeatherClickMode (inherited)
WeatherPointModeMinZoom (inherited)
Aircraft (inherited)
AircraftInfo (inherited)
Boats (inherited)
BoatsInfo (inherited)
Edit3D (inherited)
EditMap (inherited) Powiązany TEditMap (kolory, przezroczystość, grubość warstw)
AutoLinkComponents (inherited) Automatycznie łącz pierwszy dostawcę wyszukiwania / TMapAreas / TEditMap z formy
BridgeTransport (inherited) Kanał komunikacji strona ↔ Delphi: mbtAuto / WebView2 / WebBrowser (FMX)

Zdarzenia

Zdarzenie Typ Opis
OnResized (inherited) Standardowa właściwość kontrolki FMX
OnMapReady (inherited) Strona i styl gotowe
OnMapClick (inherited) Kliknięcie (Lat, Lon)
OnMarkerClick (inherited) Kliknięcie markera (Id)
OnZoomChanged (inherited) Zmiana zoomu
OnMoveEnd (inherited) Koniec przesuwania (View)
OnSearchResults (inherited) Wyniki wyszukiwania
OnSearchError (inherited) Błąd wyszukiwania (ErrorKind pek*, HTTP, komunikat PL/EN)
OnSearchResultSelected (inherited) Wybór wyniku w polu wyszukiwania
OnJSError (inherited) Błąd strony / WebView2 / mostu
OnStyleLoaded (inherited) Styl wczytany
OnAreaSelected (inherited) Zaznaczono obszar (prostokąt/wielokąt/koło)
OnNavButtonClick (inherited) Kliknięto przycisk panelu (Kind)
OnLocation (inherited) Wynik lokalizacji urządzenia
OnMainMarkerMoved (inherited) Marker główny przeciągnięty
OnStyleJSON TMapStyleJSONEvent Odpowiedź RequestStyleJSON
OnStyleSaved TMapStyleSavedEvent SaveStyleJSON zakończony
OnModeChanged TNotifyEvent Przełączono 2D/3D
OnElevation TMapElevationEvent Klik przy Terrain.ShowElevation lub wynik QueryElevation: Lat, Lon, metry n.p.m. (NaN = brak danych)

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

Właściwość Typ Opis
Core TMapCore Wspólny rdzeń mapy (TMapCore) – dla zaawansowanych
Browser TWebBrowser Wewnętrzna kontrolka przeglądarki (TEdgeBrowser / TWebBrowser)
IsMapReady Boolean True po OnMapReady
View TMapView Bieżący widok (środek, zoom, pochylenie, obrót, granice)
MarkerCount Integer Liczba markerów
LastResults TMapGeoResults Ostatnie wyniki wyszukiwania
Area TMapArea Zaznaczony obszar (kształt, punkty, prostokąt, koło)
HasArea Boolean Czy obszar jest zaznaczony
BridgeMessagesSeen Integer Licznik odebranych komunikatów mostu (diagnostyka)
CustomStyleURL string Tylko w kodzie: URL stylu dla Style = m3sCustom

Metody publiczne

Metoda Opis
procedure Reload Przeładowuje stronę; cały stan jest odtwarzany
function EffectiveWeatherClickTarget: TWeatherClickTarget
procedure DetectLinkedComponents Wyszukuje na formie i łączy dostawcę / TMapAreas / TEditMap
function MapCore: TMapCore IMapCoreProvider – rdzeń dla TEditMapRaster
procedure ExecuteJS(const Script: string) Wykonuje JavaScript na stronie mapy
procedure RequestJSON(const Cmd, ArgsJSON: string; const Handler: TMapResultProc) Polecenie strony z odpowiedzią JSON (callback)
procedure SetView(const Lat, Lon, AZoom: Double; Animate: Boolean = False) Ustawia środek / zoom / pochylenie / obrót
procedure FlyTo(const Lat, Lon: Double; const AZoom: Double = -1; DurationMs: Integer = 1500) Animowany przelot do punktu
procedure FitBounds(const South, West, North, East: Double; PaddingPx: Integer = 40; const MaxZoom: Double = 17) Dopasuj widok do prostokąta
procedure FitMarkers(PaddingPx: Integer = 50; const MaxZoom: Double = 16; IncludeMainMarker: Boolean = False) Dopasuj widok do markerów
procedure SetInteractive(Enabled: Boolean) Włącza / wyłącza interakcję (przesuwanie, zoom)
procedure GoHome Jak przycisk „Home”
procedure SetZeroPoint(const Lat, Lon: Double) Ustawia punkt zerowy
procedure AddMarkerCSS(const Id: string; const Lat, Lon: Double; const CSSColor: string; const Title: string = ''; const PopupText: string = ''; const PopupHTML: string = '') Marker z kolorem CSS
procedure RemoveMarker(const Id: string) Usuwa marker
procedure ClearMarkers Usuwa wszystkie markery
function HasMarker(const Id: string): Boolean Czy marker o Id istnieje
function TryGetMarker(const Id: string; out Marker: TMapMarker): Boolean Odczyt markera po Id
procedure OpenMarkerPopup(const Id: string) Otwiera dymek markera
procedure SetMainMarker(const Lat, Lon: Double; Visible: Boolean = True) Ustawia pozycję markera głównego (mmsManual)
procedure UpdateMyLocation Odczyt lokalizacji urządzenia (OnLocation)
procedure ShowRadius(const Meters: Double; const LabelText: string = '') Pokazuje okrąg promienia
procedure ClearRadius Ukrywa okrąg promienia
function MainMarkerDistanceFromZero: Double Odległość markera głównego od punktu zerowego (m)
function MainMarkerBearingFromZero: Double Azymut markera głównego od punktu zerowego
procedure MainMarkerPixelOffsetFromZero(Zoom: Integer; out DX, DY: Double) Przesunięcie w pikselach względem punktu zerowego
function DistanceFromMainMarker(const Lat, Lon: Double): Double Odległość punktu od markera głównego (m)
procedure StartAreaSelection Rozpoczyna zaznaczanie obszaru
procedure CancelAreaSelection Przerywa zaznaczanie
procedure SetArea(const Area: TMapArea) Ustawia obszar z kodu
procedure ClearArea Czyści obszar
procedure ShowSearchBox(Show: Boolean = True; const Query: string = '') Pokazuje / ukrywa pole wyszukiwania
procedure SearchAddress(const Query: string) Wyszukiwanie adresu (OnSearchResults)
procedure SearchStructured(const Q: TNominatimStructuredQuery) Wyszukiwanie strukturalne (ulica, miasto, kod…)
procedure SearchInArea(const Query: string) Wyszukiwanie w zaznaczonym obszarze
procedure ReverseGeocode(const Lat, Lon: Double; Zoom: Integer = 18) Adres dla współrzędnych
procedure LookupOsmIds(const OsmIds: string) Wyszukiwanie po identyfikatorach OSM
procedure CheckSearchConnection Sprawdza połączenie z serwerem wyszukiwania
procedure NextStyle Następny styl (jak przycisk „Styl”)
procedure SetRasterEdit(const ArgsJSON: string) Ustawienia edycji / stylizacji rastra (używane przez TEditMapRaster)
procedure RefreshTile(Z, X, Y: Integer) Odświeża kafel z/x/y (cache-busting; z < 0 = wszystkie)
procedure Set2D Tryb 2D
procedure Set3D Tryb 3D
procedure ToggleMode Przełącza 2D/3D
procedure LoadStyleJSON(const StyleJSON: string) Wczytuje styl MapLibre z tekstu JSON
procedure LoadStyleJSONFromFile(const FileName: string) Wczytuje styl z pliku
procedure SaveStyleJSON(const FileName: string) Zapisuje styl na serwerze (OnStyleSaved)
procedure RequestStyleJSON Pobiera bieżący styl (OnStyleJSON)
procedure SetLayerVisible(const LayerId: string; Visible: Boolean) Widoczność warstwy stylu
procedure ClearStyleOverrides Usuwa zmiany warstw (kolory itp.)
procedure ShowElevationSpots(const Lats, Lons: array of Double; const Names: array of string) Etykiety wysokości n.p.m. w punktach (Lats, Lons, Names)
procedure ClearElevationSpots Usuwa etykiety wysokości
procedure QueryElevation(const Lat, Lon: Double; const Callback: TMapResultProc) Wysokość n.p.m. w punkcie (callback JSON {"meters":…})

TEditMap (MapCommon.EditMap)

Właściwości opublikowane

Właściwość Typ Domyślnie Opis
SettingsFile string Plik JSON ustawień wczytywany przy starcie (AutoLoad)
DefaultSettingsFile string Własny plik domyślny dla RestoreDefaults
AutoLoad Boolean True Wczytaj SettingsFile przy starcie
ServerStyleName string Nazwa stylu zapisanego na serwerze (Style = m3sServerStyle)
UndoLimit Integer 100 Liczba kroków cofania
Timeout Integer 15000 Limit czasu wywołań serwera (ms)
EditSubject TMapEditSubjectKind eskMapLayers

Zdarzenia

Zdarzenie Typ Opis
OnChange TMapEditChangeEvent Każda zmiana ustawień (warstwa, właściwość)
OnRestoreDefaults TNotifyEvent Przywrócono domyślne
OnValidationError TMapEditValidationEvent Błąd walidacji JSON / pliku
OnLoaded TMapEditFileEvent Wczytano ustawienia (plik / serwer)
OnSaved TMapEditSavedEvent Zapisano (plik / serwer)
OnSubjectChanged TNotifyEvent
OnTerrainOptionChanged TMapEditTerrainOptionEvent

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

Właściwość Typ Opis
Subjects TMapEditSubjectKinds
Settings TMapStyleSettings Bieżące ustawienia warstw
LastErrors TStringList Błędy ostatniej walidacji
Modified Boolean Zmiany od ostatniego zapisu / wczytania
ServerPassword string Hasło API stylów (tylko w kodzie, nie zapisywane)
ServerURL string URL API stylów (tylko w kodzie)
BaseStyleURL string Styl bazowy łączony z ustawieniami przy SaveToServer

Metody publiczne

Metoda Opis
procedure AttachStyleTarget(const Target: IMapStyleTarget) Wewnętrzne: rejestracja mapy (IMapStyleSource)
procedure DetachStyleTarget(const Target: IMapStyleTarget) Wewnętrzne: wyrejestrowanie mapy
function CurrentChangesJSON: string Bieżące zmiany jako JSON
function CurrentChangesJSONFor(Kind: TMapEditSubjectKind): string
function CurrentTerrainOptionsJSON: string
function ActiveSubject: TMapEditSubjectKind
function SubjectDescription: string
function TargetCount: Integer
function TargetKind(Index: Integer): TMapEditSubjectKind
function TargetName(Index: Integer): string
procedure SetTerrainOption(const Prop, ValueJSON: string)
function GetTerrainOption(const Prop: string): string
procedure ClearTerrainOptions
procedure SetTerrainContourLines(Visible: Boolean)
procedure SetTerrainElevationLabels(Visible: Boolean)
procedure SetTerrainHillshade(Visible: Boolean)
procedure SetTerrainObjectElevation(Visible: Boolean)
procedure SetTerrainContourColor(const CSSColor: string)
procedure SetTerrainContourStyle(const IntervalM, WidthPx: Double)
procedure EnsureAutoLoaded Wykonuje AutoLoad teraz
procedure BeginUpdate Grupuje zmiany w jeden krok cofania
procedure EndUpdate Kończy grupę zmian
procedure SetColor(const LayerId, CSSColor: string) Kolor warstwy (CSS)
procedure SetPaintColor(const LayerId, Prop, CSSColor: string) Kolor dowolnej właściwości paint
procedure SetOpacity(const LayerId: string; const Value: Double) Przezroczystość warstwy 0..1
procedure SetVisible(const LayerId: string; Value: Boolean) Widoczność warstwy
procedure SetWidth(const LayerId: string; const Value: Double) Grubość linii warstwy
procedure SetZoomStops(const LayerId, Prop: string; const Stops: TMapZoomStops) Wartości zależne od zoomu
procedure SetValueJSON(const LayerId: string; Section: TMapStyleSection; const Prop, ValueJSON: string) Dowolna wartość paint/layout jako JSON
procedure SetCategoryColor(const Category, CSSColor: string) Jeden kolor dla kategorii warstw (np. water)
procedure SetCategoryVisible(const Category: string; Value: Boolean) Widoczność kategorii warstw
function GetColor(const LayerId: string): string Odczyt koloru
function GetOpacity(const LayerId: string): Double Odczyt przezroczystości
function GetVisible(const LayerId: string): Boolean Odczyt widoczności
function GetWidth(const LayerId: string): Double Odczyt grubości
function GetZoomStops(const LayerId, Prop: string): TMapZoomStops Odczyt wartości zależnych od zoomu
function GetValueJSON(const LayerId: string; Section: TMapStyleSection; const Prop: string): string Odczyt wartości jako JSON
function CanUndo: Boolean Czy można cofnąć
function CanRedo: Boolean Czy można ponowić
function Undo: Boolean Cofnij
function Redo: Boolean Ponów
procedure RestoreDefaults Przywraca domyślne (DefaultSettingsFile lub fabryczne); można cofnąć
function IsDefault: Boolean Czy ustawienia są domyślne
function LoadFromJSON(const JSONText: string; const Source: string = 'json'): Boolean Waliduje i stosuje JSON ustawień
function SaveToJSON(Indent: Integer = 2): string Ustawienia jako JSON
function LoadFromFile(const FileName: string): Boolean Wczytuje plik JSON
function SaveToFile(const FileName: string): Boolean Zapisuje plik JSON
function ShowOpenDialog: Boolean Okno otwierania pliku *.json
function ShowSaveDialog: Boolean Okno zapisu pliku *.json
procedure ShowEditor Okno edytora (drzewo warstw, kolory, cofanie)
procedure SaveToServer(const Name: string; const Password: string = '') Zapisuje styl na serwerze map pod nazwą (asynchronicznie, OnSaved)
procedure LoadFromServer(const Name: string) Wczytuje styl z serwera (OnLoaded)

TEditMapRaster (MapCommon.EditMapRaster)

Właściwości opublikowane

Właściwość Typ Domyślnie Opis
Map TComponent Mapa TTileMapVCL/FMX (lub T3DMap*); wykrywana automatycznie (FreeNotification)
AutoDetect Boolean True Gdy Map = nil, podłącz pierwszą mapę z formy (preferuje TTileMap*)
AutoLinkComponents Boolean True Automatycznie łącz pierwszy dostawcę wyszukiwania / TMapAreas / TEditMap z formy
Enabled Boolean True Włącza edycję / stylizację
EditPopupEnabled Boolean True
UrlTemplate string Szablon kafli z {z}/{x}/{y}/{s}/{apikey}
ApiKey string Klucz API – dopisywany przez {apikey} (lub ?key=); ustaw w kodzie / pliku konfiguracji
ProxyURL string Opcjonalne proxy kafli (tools/server); kafle: /tile/{z}/{x}/{y}.png
CacheFolder string Folder cache / magazynu ('' = folder danych aplikacji)
ConfigFile string Plik konfiguracji JSON (map-raster-config v1)
StyleName string neutral / google-like / apple-like / night / custom – zmiana w locie, bez przeładowania
CustomStyleJSON string Własny styl JSON (map-raster-style v1) dla StyleName = custom
PaintMode TMapRasterPaintMode rpmNone rpmNone / rpmPaint / rpmCrop / rpmOpacity – edycja pikseli kafla kliknięciem
Opacity Double Krycie warstwy rastrowej 0..1
LocalStore Boolean True IndexedDB w stronie (najpierw lokalnie, potem serwer)
BrushColor string Kolor pędzla CSS (rpmPaint)
BrushSize Integer 6 Rozmiar pędzla px
StoreFile string Plik SQLite (MBTiles + kolumna modified); '' = folder danych aplikacji

Zdarzenia

Zdarzenie Typ Opis
OnStyleChanged TNotifyEvent Zmieniono styl
OnConfigLoaded TNotifyEvent Wczytano konfigurację
OnEditPopupChanged TNotifyEvent
OnTileEdited TMapRasterTileEditedEvent Kafel edytowany na stronie (już zapisany w Store, modified = 1)

Metody publiczne

Metoda Opis
procedure DetectMap Szuka mapy na formie (gdy Map = nil)
procedure DetectLinkedComponents Wyszukuje na formie i łączy dostawcę / TMapAreas / TEditMap
function LoadConfigFromFile(const FileName: string = ''): Boolean Wczytuje konfigurację JSON
function SaveConfigToFile(const FileName: string = ''): Boolean Zapisuje konfigurację JSON
function LoadConfigJSON(const JSONText: string): Boolean Konfiguracja z tekstu JSON
function SaveConfigJSON(Indent: Integer = 2): string Konfiguracja jako JSON
procedure ApplyBuiltinStyle(Style: TMapRasterBuiltinStyle) Styl wbudowany (rbsNeutral, rbsGoogleLike, rbsAppleLike, rbsNight)
procedure ApplyStyleJSON(const JSONText: string) Własny styl JSON (mapowanie kolorów, jasność, kontrast, nasycenie)
procedure RefreshTile(Z, X, Y: Integer) Wymusza odświeżenie kafla (cache-busting, usunięcie z IndexedDB/SQLite)
procedure RefreshAllTiles Odświeża wszystkie kafle
function ExpandTileURL(Z, X, Y: Integer; const Subdomain: string = 'a'): string URL kafla po rozwinięciu szablonu (+ApiKey / proxy)
function CurrentCssFilter: string Bieżący filtr CSS stylu
function Store: TMapRasterTileStore Magazyn SQLite (Put/Get/Delete/Clear/ModifiedTiles/MarkClean)

TMapAreas (MapCommon.Areas)

Właściwości opublikowane

Właściwość Typ Domyślnie Opis
Active Boolean True False = nic nie jest wczytywane ani pokazywane
EditPopupEnabled Boolean True RMB + long-press (~500 ms) otwierają edytor stylu obszaru; False wyłącza oba
Edit TEditMapRaster
AutoLinkComponents Boolean True Automatycznie łącz pierwszy dostawcę wyszukiwania / TMapAreas / TEditMap z formy
WholeWorld Boolean False Cały świat w jednym pliku (państwa lub admin-1)
WorldDetail TMapWorldDetail mwdCountries mwdCountries / mwdAdmin1 dla WholeWorld
Continents TMapAreaContinents [] Kontynenty do wczytania (zestaw)
Countries string Filtr ISO w wybranych kontynentach (np. PL,DE,CZ)
ShowCountryOutlines Boolean True Obrysy państw / regionów admin-1 z plików kontynentów
ShowRegions Boolean False Wypełnienie regionów
HierarchyStyle TMapAreaStyle Styl hierarchii (wypełnienie, obrys, grubość, etykiety)
ShowAdministrative Boolean False Jawne granice administracyjne wybranych państw na poziomie AdminLevel
AdminLevel TMapAdminLevel malCountry malCountry / malAdmin1 (województwa, Natural Earth) / malAdmin2 (powiaty, geoBoundaries)
CountryStyle TMapAreaStyle Styl poziomu państw (wypełnienie, kolor obrysu, grubość)
Admin1Style TMapAreaStyle Styl poziomu admin-1
Admin2Style TMapAreaStyle Styl poziomu admin-2
SettingsFile string Plik JSON ustawień (map-areas-settings v1)
AutoLoad Boolean True Wczytaj SettingsFile przy otwarciu
AutoSave Boolean False Zapisuj SettingsFile po każdej zmianie
Items TMapAreaItems Własne pliki / URL / teksty GeoJSON (kolekcja ze stylem)
CacheFolder string Folder cache GeoJSON ('' = folder danych aplikacji)
UseCache Boolean True Używaj cache plików
CheckVersion Boolean True Porównuj versiongeojson.json z cache (raz na uruchomienie)
Timeout Integer 60000 Limit czasu pobierania (ms)
FitOnLoad Boolean False Dopasuj widok po wczytaniu

Zdarzenia

Zdarzenie Typ Opis
OnAreaClick TMapAreaEvent Kliknięcie obszaru (SetId, Lat, Lon, właściwości)
OnAreaHover TMapAreaEvent Najechanie na obszar
OnAreaLoaded TMapAreaLoadedEvent Zestaw wczytany (liczba obiektów / błąd)
OnValidationError TMapAreaValidationEvent Błąd walidacji GeoJSON / ustawień
OnSettingsLoaded TNotifyEvent Wczytano plik ustawień
OnSettingsSaved TNotifyEvent Zapisano plik ustawień

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

Właściwość Typ Opis
BaseURL string Adres katalogu GeoJSON (tylko w kodzie)
Admin2BaseURL string Szablon URL ADM2 ({ISO}/{iso}); domyślnie geoBoundaries (CC BY 4.0)
ServerVersion string Wersja danych na serwerze

Metody publiczne

Metoda Opis
procedure AttachAreasTarget(const Target: IMapAreasTarget) Wewnętrzne: rejestracja mapy
procedure DetachAreasTarget(const Target: IMapAreasTarget) Wewnętrzne: wyrejestrowanie mapy
procedure ReplayAreasTo(const Target: IMapAreasTarget) Wewnętrzne: odtworzenie zestawów na mapie
procedure BeginUpdate Wstrzymuje przebudowę do EndUpdate
procedure EndUpdate Przebudowuje po zmianach
procedure Refresh Ponownie wczytuje hierarchię i pliki
function LoadFromFile(const FileName: string; const ACaption: string = ''): TMapAreaItem Dodaje własny plik GeoJSON
function LoadFromURL(const URL: string; const ACaption: string = ''): TMapAreaItem Dodaje GeoJSON z URL
function LoadFromString(const GeoJSON: string; const ACaption: string = ''): TMapAreaItem Dodaje GeoJSON z tekstu
procedure Clear Usuwa własne pliki
procedure FitToArea(const SetId: string; PaddingPx: Integer = 30; const MaxZoom: Double = 12) Dopasowuje widok do zestawu
procedure ShowCountry(const ISO: string) Wybiera państwo i przybliża
function HierarchySetIds: TArray<string> Identyfikatory zestawów hierarchii
function HierarchyState(const SetId: string): TMapAreaState Stan zestawu (pobieranie / gotowy / błąd)
procedure ClearCache Usuwa pliki z cache
function SaveToJSON(Indent: Integer = 2): string Ustawienia jako JSON (map-areas-settings v1)
function LoadFromJSON(const JSONText: string): Boolean Stosuje ustawienia z JSON
function SaveSettingsToFile(const FileName: string = ''): Boolean Zapisuje ustawienia do pliku
function LoadSettingsFromFile(const FileName: string = ''): Boolean Wczytuje ustawienia z pliku
procedure EnsureAutoLoaded Wykonuje AutoLoad teraz
procedure ShowAdministrativeCountry(const ISO: string; Level: TMapAdminLevel = malAdmin1) Pokazuje państwo z podziałem (np. PL + województwa)
function GetAreaFileText(const FileName: string; out Text, ErrorMessage: string): Boolean

TNominatimSearchProvider (MapCommon.Search)

Właściwości opublikowane

Właściwość Typ Domyślnie Opis
Language string Język wyników i komunikatów (pl, en, de …)
Limit Integer 10 Maksymalna liczba wyników
ConnectTimeout Integer 5000 Limit czasu połączenia (ms)
Timeout Integer 15000 Limit czasu odpowiedzi (ms)
UserAgent string Nagłówek User-Agent – identyfikuj aplikację
MinRequestIntervalMs Integer 1000 Minimalny odstęp między zapytaniami (kolejka); Nominatim: 1000
RateLimitBackoffMs Integer 10000 Przerwa po HTTP 429
BaseURL string Adres serwera Nominatim
TokenRequired Boolean True Wymagaj tokenu
TokenFormat TMapTokenFormat mtfAuto Sposób przekazania tokenu (mtfAuto, nagłówek, parametr)
OutputFormat TNominatimFormat nfJSONv2 Format odpowiedzi (jsonv2, geojson…)
Outputs TNominatimOutputs [noAddressDetails] Dodatkowe dane (adres, extratags, namedetails…)
CountryCodes string Filtr krajów ISO (np. pl,de)
Layers TNominatimLayers [] Warstwy Nominatim (address, poi, railway…)
FeatureType TNominatimFeatureType nftNone Typ obiektu (country, state, city, settlement)
ExcludePlaceIds string Wykluczone place_id
ViewBox string Preferowany obszar lon1,lat1,lon2,lat2
Bounded Boolean False Tylko wyniki w ViewBox
Dedupe Boolean True Usuwanie duplikatów
Polygon TNominatimPolygon npNone Zwracany kształt (geojson, kml, svg, text)
PolygonThreshold Double Uproszczenie kształtu
Email string E-mail kontaktowy (polityka Nominatim)
DetailsOptions TNominatimDetailsOptions Opcje zapytania /details
Continent TMapContinent mcAuto Kontynent (mcAuto = według widoku)
ContinentFilter Boolean False Filtruj wyniki do kontynentu
SendContinentHint Boolean True Wysyłaj podpowiedź kontynentu
ContinentBaseURLs TStrings Serwery per kontynent (eu=…, as=…)
CheckServerStatus Boolean True Sprawdzaj /status przed pierwszym zapytaniem
StatusCacheSeconds Integer 300 Ważność wyniku /status (s)

Zdarzenia

Zdarzenie Typ Opis
OnResults TMapSearchResultsEvent Wyniki wyszukiwania
OnError TMapSearchErrorEvent Każdy błąd (ErrorKind, HTTP, komunikat PL/EN)
OnConnectionChecked TMapConnectionCheckedEvent Wynik sprawdzenia połączenia

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

Właściwość Typ Opis
Busy Boolean Trwa zapytanie
HostBaseURL string Adres ustawiony przez mapę (gdy BaseURL pusty)
HostToken string Token ustawiony przez mapę
LastCheckOK Boolean Wynik ostatniego sprawdzenia
LastCheckTime TDateTime Czas ostatniego sprawdzenia
LastCheckErrorKind TMapProviderErrorKind Rodzaj błędu sprawdzenia
LastCheckMessage string Komunikat sprawdzenia
LastStatusJSON string Odpowiedź /status
Token string Token – tylko w kodzie (nie w DFM/FMX)

Metody publiczne

Metoda Opis
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 CancelPending Anuluje oczekujące zapytania
function SupportsKind(Kind: TMapSearchKind): Boolean Czy obsługuje rodzaj zapytania
function RedactedURL(const Request: TMapSearchRequest): string URL z ukrytymi sekretami
function Scrub(const Text: string): string Zastępuje sekrety ***
function EffectiveBaseURL(C: TMapContinent = mcNone): string Faktycznie używany adres
function Params(const Request: TMapSearchRequest): TNominatimParams Wszystkie parametry zapytania
function Validate(out ErrorKind: TMapProviderErrorKind; out ErrorMessage: string): Boolean Walidacja (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 Status Alias CheckConnection
procedure InvalidateConnectionCache Zapomina wynik /status

TCustomUrlSearchProvider (MapCommon.Search)

Właściwości opublikowane

Właściwość Typ Domyślnie Opis
Language string Język wyników i komunikatów (pl, en, de …)
Limit Integer 10 Maksymalna liczba wyników
ConnectTimeout Integer 5000 Limit czasu połączenia (ms)
Timeout Integer 15000 Limit czasu odpowiedzi (ms)
UserAgent string Nagłówek User-Agent – identyfikuj aplikację
MinRequestIntervalMs Integer 0 Minimalny odstęp między zapytaniami (kolejka); Nominatim: 1000
RateLimitBackoffMs Integer 10000 Przerwa po HTTP 429
SearchURL string Szablon URL wyszukiwania ({query}, {limit}, {lang}, {apikey}…)
ReverseURL string Szablon URL reverse ({lat}, {lon}…)
AreaSearchURL string Szablon dla wyszukiwania w obszarze ('' = SearchURL)
Params TStrings Dodatkowe parametry Name=Value
Headers TStrings Dodatkowe nagłówki HTTP Name=Value
ApiKey string Klucz API – tylko w kodzie, używany przez {apikey}
CountryCodes string Filtr krajów ISO (np. pl,de)
ResponseFormat TMapResponseFormat mrfAuto mrfAuto / Nominatim / Photon / GeoJSON

Zdarzenia

Zdarzenie Typ Opis
OnResults TMapSearchResultsEvent Wyniki wyszukiwania
OnError TMapSearchErrorEvent Każdy błąd (ErrorKind, HTTP, komunikat PL/EN)

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

Właściwość Typ Opis
Busy Boolean Trwa zapytanie
HostBaseURL string Adres ustawiony przez mapę (gdy BaseURL pusty)
HostToken string Token ustawiony przez mapę

Metody publiczne

Metoda Opis
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 CancelPending Anuluje oczekujące zapytania
function SupportsKind(Kind: TMapSearchKind): Boolean Czy obsługuje rodzaj zapytania
function RedactedURL(const Request: TMapSearchRequest): string URL z ukrytymi sekretami
function Scrub(const Text: string): string Zastępuje sekrety ***

15. Przepisy

13.1 Opiekunka do dzieci w promieniu 2 km

// Babysitters within 2 km of the user
Map.MainMarkerSource := mmsDeviceLocation;
Map.RadiusMeters := 2000;
Map.RadiusLabel := '2 km';
Map.RadiusVisible := True;
for B in Babysitters do
  if Map.DistanceFromMainMarker(B.Lat, B.Lon) <= 2000 then
    Map.AddMarker(B.Id, B.Lat, B.Lon, clFuchsia, B.Name, B.Phone);
Map.FitMarkers(50, 15, True);

13.2 Hydraulik w zaznaczonej dzielnicy

// Plumber: select the district, search inside it
Map.AreaShape := masRectangle;
Map.AreaSearchQuery := 'hydraulik';
Map.SearchOnAreaSelected := True;
Map.StartAreaSelection;

13.3 Restauracje na mapie 3D nocą

// Restaurants with popups, night theme on the 3D map
Map3D.Theme := mtNight;
for R in Restaurants do
  Map3D.AddMarker(R.Id, R.Lat, R.Lon, clRed, R.Name, R.Cuisine + ', ' + R.Hours);
Map3D.FitMarkers;

16. Migracja ze starej wersji

Wersja 2 nie zawiera już nazwy firmy w identyfikatorach. Stary prefiks (nazwa firmy) zapisano poniżej jako Old, np. TOldMapVCL oznacza dawną klasę mapy VCL. Zmiany nazw:

Było Jest
OldMaps.groupproj MapComponents.groupproj
pakiety OldMapsRT/VCL/FMX/Dsgn MapComponentsRT/VCL/FMX/Dsgn
strona palety Old Maps Maps
TOldMapVCL TTileMapVCL (kafelki) lub T3DMapVCL (wektor 3D)
TOldMapFMX TTileMapFMX lub T3DMapFMX
Old.Maps.Types MapCommon.Types
Old.Maps.Core (TImMapCore) MapCommon.Core (TMapCore)
Old.Maps.Bridge MapCommon.Bridge
Old.Maps.Geocoder (TImGeocoder) MapCommon.Nominatim + MapCommon.Search (TNominatimSearchProvider)
Old.Maps.PageHtml, Web/Old.Maps.Page.html MapCommon.PageHtml, Web/MapCommon.Page.html
Old.Maps.VCL / .FMX MapCommon.MapVCL / MapCommon.MapFMX
Old.Maps.Reg MapCommon.Reg
prefiks typów TIm… (TImMapView, TImGeoResult, TImMapMode …) TMap… (TMapView, TMapGeoResult, TMapMode …)
TImBridgeTransport (ibt…) TMapBridgeTransport (mbt…)
TImContinent (ic…) TMapContinent (mc…)
JS window.ImMap, most old-bridge.invalid window.MapBridge, map-bridge.invalid
StyleURL (published) Style (wyliczenie) + CustomStyleURL / CustomTileURL (public)
GeoLocBaseURL, GeoLocToken SearchProviderURL, SearchToken lub TNominatimSearchProvider.BaseURL/Token
SearchLanguage, CountryCodes, SearchLimit, SearchViewBox, SearchBounded, Continent, ContinentBaseURLs, GeoConnectTimeout, GeoResponseTimeout właściwości TNominatimSearchProvider (Language, CountryCodes, Limit, ViewBox, Bounded, Continent, ContinentBaseURLs, ConnectTimeout, Timeout)
ShowNavigation NavVisible (panel przycisków) / ShowNavigationControl (kontrolka MapLibre)
OnGeocodeResults, OnGeocodeError OnSearchResults, OnSearchError (z ErrorKind)
MapLibreJSURL, MapLibreCSSURL, PMTilesJSURL (published) Core.MapLibreJSURL … (tylko kod)

Najprostsza droga: w DFM/FMX zamień nazwy klas, w uses nazwy modułów, potem otwórz formularz – IDE zgłosi usunięte właściwości (np. StyleURL, GeoLocToken), które trzeba przenieść według tabeli.

Ze starych komponentów OSMWebBrowserVCL / OSMMapViewerVCL: MarkerLat/Lon → MainMarkerLat/Lon lub SetMainMarker; AreaShow*/Radius* → RadiusVisible, RadiusMeters, ShowRadius; ButtonPanel* → NavButtons; SelectArea*, OnAreaSelected → AreaShape, StartAreaSelection, OnAreaSelected; OnMapClick(Lon, Lat, var MoveMarker) → OnMapClick(Sender; const Lat, Lon) (odwrotna kolejność parametrów).

17. Ograniczenia i otwarte kwestie

18. Rozwiązywanie problemów

Objaw Przyczyna / rozwiązanie
Szary panel, OnJSError „WebView2 could not be created” brak WebView2 Runtime lub WebView2Loader.dll o złej bitowości obok EXE
Mapa działa tylko w jedną stronę (FMX) OnJSError z Source = 'bridge'; spróbuj BridgeTransport := mbtIFrame
OnSearchError z pekNoToken / pekInvalidToken ustaw SearchToken lub Token dostawcy w kodzie; token odrzucony (401/403)
pekRateLimited (429) za dużo zapytań – wyłącz SearchLive, dodaj cache
Brak kafelków satelitarnych limit lub blokada Esri – użyj tmsOpenStreetMap lub własnego źródła
TEditMap nie zmienia mapy mapa kafelkowa (edycja dotyczy tylko T3DMap*), brak EditMap albo AutoLinkComponents = False
„add MapCommon.EditMapVCL or MapCommon.EditMapFMX to uses” ShowEditor/ShowOpenDialog bez modułu okna – dodaj go do uses (mapy robią to same)
Plik ustawień nie wczytuje się OnValidationError / LastErrors podaje warstwę i pole
Obszary się nie pojawiają OnAreaLoaded(Success=False); brak sieci przy pustym cache; nieznany kod w Countries (OnValidationError)
Wolne pierwsze wczytanie kontynentu pliki mają 4–54 MB; kolejne uruchomienia korzystają z cache
Komponent nie łączy się automatycznie działa tylko dla pustej właściwości i komponentu z tego samego formularza; AutoLinkComponents

13b2. TWeatherPopup / TInfoWindowWeather — jedno okno jak AM HTML

Jedno okno pogody (modal #0a3a8c jak stary weatherModal): składa Scene + HourStrip + DayItems + Chart. Klik obszaru (ShowOnAreaClick, domyślnie True) → ShowAt → TWeather.ApplyCoords + Refresh → PopupJSON. Alias: TInfoWindowWeather = TWeatherPopup. Unit MapCommon.Weather.Popup.

Składa widgety ze starego AM HTML: TWeatherHeader (ikona + info obszaru; klik ikony → HourStrip), TWeatherScene, TWeatherHourStrip, TWeatherDayItems, TWeatherChart. Demo: prawy klik obszaru → pełne okno; checkboxy ShowHeader / ShowHourStrip / …; ShowAt = invoke.

Nie używaj TMapInfoWindow do pogody — InfoWindow zostaje dla markerów, samolotów (TAircraft) i łodzi (TBoats).

Właściwość Opis
Weather, Header, Scene, HourStrip, DayItems, Chart Powiązania (AutoLink; reverse Weather.Popup)
ShowOnAreaClick / ShowOnMapClick Kiedy otwierać okno (RMB = areaContextClick gdy EditPopup off)
AutoRequest ShowAt odpytuje TWeather
ShowHeader / ShowScene / ShowHourStrip / ShowDayItems / ShowChart Bloki w oknie (checkboxy)
Style.GradientTop #0a3a8c (jak AM HTML)
PopupJSON Składanka (WeatherComposePopupJSON)

Metody: Show / ShowAt / ShowForJSON / Hide / ApplyJSON. Zdarzenia: OnShow, OnHide, OnPopup.

13c. TAircraft / TPlanes (ADS-B)

Middleware jak TWeather: forma/mapa ↔ TAircraft ↔ https://fly.imetroll.com (?key=).

13d. TBoats / TShips (AIS)

Middleware jak TAircraft: forma/mapa ↔ TBoats ↔ https://boatsea.imetroll.com (?key=).

Parametr GET TBoats Opis
lamin lomin lamax lomax bakRectangle / ApplyBounds Prostokąt WGS84
lat lon radius_km bakRadius / ApplyCoords Koło (max 1500 km)
area=gdansk ApplyAreaId / Area.AreaId Katalog GET /v1/areas (gdansk, finland-gulf, pl-coast…)
key= ApiKey Wymagany na /v1/states, /v1/tracks
Boats1.Active := True;
Boats1.BeginAreaSelect;                 // lub BeginAreaSelect(bakRadius)
Boats1.ApplyCoords(54.52, 18.65, 30);
Boats1.ApplyAreaId('finland-gulf');     // dobre pokrycie Digitraffic
Boats1.ShowRouteAsync(LastMmsi);        // trasa + SOG

Demo: https://help.imetroll.com/demo/tboats.html · API: https://boatsea.imetroll.com/

13d.1 Klasy statków (AIS → ShipClass)

Serwer boatsea i Delphi (BoatsClassifyShip) przypisują każdemu statkowi klasę: container, bulk, cargo, tanker, chemical, gas, passenger, hsc, fishing, military, law, sar, tug, pilot, dredger, special, sailing, pleasure, wig, aton, beacon, other, unknown (enum TBoatsShipClass = bsc*). Typ AIS jest zgrubny (70 = cargo, 80 = tanker), więc kontenerowiec / masowiec / chemikaliowiec / gazowiec wynikają z cyfry ładunku niebezpiecznego (x1–x4 = kat. A–D → S.Hazard) i nazwy (MSC/MAERSK → container, LNG/LPG → gas, ORP/HMS → military).

Delphi Opis
Display.TypeIcons (True), Display.TypeIconBaseURL Ikona wg klasy: https://boatsea.imetroll.com/static/ships/<klasa>.svg
Display.ClassFilter np. [bscTanker, bscChemical, bscGas]; [] = wszystkie
Display.LabelField := blfShipClass Etykieta = nazwa klasy
S.ShipClass, S.Hazard, S.LengthM, S.BeamM Klasa, kat. ładunku A–D, wymiary AIS
BoatsShipClassLabel / Color / Id / IconURL Opis PL/EN, kolor, id, URL ikony

JSON ships[]: ship_class, ship_class_label, ship_class_label_en, ship_class_color, icon_url, hazard, ais_type_desc, class_basis, length_m, beam_m; katalog GET /v1/ship-classes?key=.

13e. Active: zaznaczenie obszaru / współrzędne → automatyczne zapytanie (TAircraft, TBoats, TWeather)

Gdy komponent ma Active = True i jest podpięty do mapy, każde zaznaczenie obszaru na mapie (przycisk nawigacji Zaznacz obszar lub BeginAreaSelect; prostokąt / koło, pan mapy zablokowany) albo podanie współrzędnych od razu wysyła zapytanie (RefreshAsync). Zapytanie trwające dla starego obszaru jest porzucane (TWeather: anulowane). Active = False → zmienia się tylko Area.

Metoda TAircraft / TBoats TWeather
ApplyCoords(Lat, Lon, RadiusKm) koło → lat/lon/radius_km koło → wakPolygon (siatka w kole)
ApplyCoords(Lat, Lon) koło o promieniu Area.RadiusKm (80 / 50 km) jeden punkt (wakPoints)
ApplyCoordsText(Edit1.Text) "52.23, 21.01, 50", "52,23; 21,01; 50", "52.23 21.01 50km", "lat=52.2 lon=21 r=30" jw.
ApplyBounds(S, W, N, E) prostokąt → lamin…lomax wakBBox
ApplyAreaId('gdansk') nazwany obszar serwera (area=) –
ApplyMapArea(Map.Area) prostokąt / koło z mapy prostokąt / koło / wielokąt

Właściwości: UseMapAreaSelection, AutoRequestOnAreaSelect, ShowAreaOnMap (wszystkie domyślnie True), zdarzenie OnAreaApplied. Map.OnAreaSelected pozostaje zdarzeniem programisty – komponenty słuchają mapy przez TMapCore.AddAreaSelectedListener (multicast), więc jedno zaznaczenie może zasilić naraz samoloty, statki i pogodę.

Aircraft1.Active := True;  Boats1.Active := True;  Weather1.Active := True;
Aircraft1.BeginAreaSelect;                 // rysuj na mapie → wszystkie trzy pytają serwery
Boats1.ApplyCoords(54.52, 18.65, 30);      // Zatoka Gdańska, 30 km
if not Weather1.ApplyCoordsText(Edit1.Text) then ShowMessage('lat, lon[, km]');

Serwery są area-scoped (obszar wymagany, inaczej HTTP 400): fly.imetroll.com/v1/states, boatsea.imetroll.com/v1/states (lamin… | lat/lon/radius_km | area=; lista: /v1/areas) oraz weather.imetroll.com/v1/area (siatka punktów pogody dla obszaru; /v1/area/areas). Demo: help.imetroll.com/demo/taircraft.html, tboats.html, tweather-area-select.html.