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
- Komponenty
- Instalacja
- Szybki start
- Mapy kafelkowe TTileMapVCL / TTileMapFMX
- Mapy 3D T3DMapVCL / T3DMapFMX
- Punkt zerowy, marker główny, promień
- Przyciski nawigacji
- Wyszukiwanie adresów i dostawcy
- Zaznaczanie obszaru i wyszukiwanie w obszarze
- TEditMap – edycja wyglądu mapy 3D
- TMapAreas – świat, kontynenty, kraje
- TEditMapRaster – kafle rastrowe
- Teren DEM i wysokości (T3DTerrain / T3DMap.Terrain)
- Dokumentacja referencyjna
- Przepisy
- Migracja ze starej wersji
- Ograniczenia i otwarte kwestie
- 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
- Otwórz
MapComponents.groupproj. - Zbuduj kolejno
MapComponentsRT,MapComponentsVCL,MapComponentsFMX. - Zainstaluj
MapComponentsDsgn(Win32, tylko design-time). Komponenty pojawią się na stronie palety Maps. - Dodaj
Sourcedo Library path albo do ścieżki projektu (dema kompilują się bezpośrednio ze źródeł). - Windows: obok EXE skopiuj
WebView2Loader.dllo właściwej bitowości ($(BDS)\Redist\win32lubwin64). 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).
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;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):
- OpenStreetMap (
tile.openstreetmap.org): obowiązuje Tile Usage Policy OSMF – serwery są utrzymywane z darowizn, nie mają SLA; zabronione jest masowe pobieranie (prefetch, tryb offline), wymagany jest identyfikujący User-Agent/Referer i widoczna atrybucja. Przy dużym ruchu użyj komercyjnego dostawcy lub własnego serwera kafelków (tmsCustom). - Esri World Imagery: bez klucza API wolno go używać tylko w ograniczonym zakresie (zgodnie z warunkami Esri, zasadniczo niekomercyjnie); do zastosowań komercyjnych potrzebne jest konto/licencja ArcGIS. Atrybucja Esri jest obowiązkowa.
- OpenTopoMap: dane OSM + SRTM, styl CC-BY-SA; serwis prywatny o ograniczonej przepustowości – nie nadaje się do intensywnego ruchu produkcyjnego.
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(aliasEditMap),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.
- edycja:
SetColor,SetPaintColor,SetOpacity,SetVisible,SetWidth,SetZoomStops,SetValueJSON,SetCategoryColor,SetCategoryVisible; odczytGet*; BeginUpdate/EndUpdate– kilka zmian jako jeden krok cofania;Undo,Redo,CanUndo,CanRedo,UndoLimit;RestoreDefaults– powrót doDefaultSettingsFile(jeśli poprawny) lub fabrycznego wyglądu; można cofnąć, wywołujeOnRestoreDefaults;- pliki:
SettingsFile(wczytywany przy starcie, gdyAutoLoad = True),LoadFromFile,SaveToFile,LoadFromJSON,SaveToJSON,ShowOpenDialog,ShowSaveDialog; - serwer:
SaveToServer(Name, Password)(styl bazowy + zmiany →styles_api.php),LoadFromServer; - okno edytora:
ShowEditor(drzewo kategorii i warstw, kolor, krycie, szerokość, widoczność, Cofnij/Ponów, Przywróć domyślne, wczytaj/zapisz JSON).
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://.
- Kafle do zoom ≤ 12 –
planet.pmtiles(cały świat); powyżej MapLibre overzoomuje z12. - Wyższe zoomy (ścieżki, stoki) – regionalne
6-x-y.pmtilesz rodziny Mapterhorn. TileBufferdotyczy źródeł http(s) XYZ; przypmtiles://ustaw0.
{ 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=¤t=&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):
admin— jeden widget na widoczną jednostkę administracyjną (PL ~16 województw; wewnątrz stanu gęstsze podziały); temperatura = średnia z próbek; ikona obszaru NIE jest średnią kodów WMO — stany binarne jako potęgi dwójki (WBS_CLEAR=1,WBS_SUN=2,WBS_CLOUDS=4,WBS_RAIN=8), suma głosów próbek w poligonie (AreaBinaryVotes.SumBits),WinningBit→ ikona; widget w centroida (WeatherLabelAnchor= turf.centroid jeśli w środku, inaczej punkt wewnętrzny).grid— widgety na siatce próbek, limitMaxPoints/PointsPerAdmin.auto— wg zoomu /WeatherClickTarget: kraj = liczba admin1; zoom w admin = gęstsza siatka; place/punkt = 1 widget.
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)
- 2D / kafle: gradient zachmurzenia i intensywności opadów na tile/raster.
- 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: |
|
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
- Kod nie był jeszcze kompilowany w Delphi (brak Delphi na serwerze budującym).
- Endpointy
/details,/deletable,/polygonsbramki geoloc nie zostały zweryfikowane. - Katalog
/geojson/na mapa.imetroll.com nie wysyła nagłówka CORS – komponent pobiera pliki w Delphi (dla bezpośredniego użycia w przeglądarce warto dodaćAccess-Control-Allow-Origin). - Kafelki Esri – zasadniczo do zastosowań niekomercyjnych bez licencji ArcGIS.
- Brak pliku Antarktydy – tylko w pliku świata.
- FMX
TWebBrowsernie ma zdarzenia postMessage – most JS → Delphi działa przez nawigację dohttps://map-bridge.invalid/…; na nietypowych platformach może działać tylko kierunek Delphi → JS.
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=).
ApiKey/RequireApiKey(domyślnie True) — bez kluczaaekUnauthorizedMap/Map.Aircraft+AircraftInfo— AutoLink; ikony samolotów (setAircraft)InfoWindow— klik → dane; przycisk Pokaż trasę →/v1/tracks+ wykres wysokości- Alias:
TPlanes = TAircraft - Statki: zob. §13d TBoats / boatsea.imetroll.com
13d. TBoats / TShips (AIS)
Middleware jak TAircraft: forma/mapa ↔ TBoats ↔ https://boatsea.imetroll.com (?key=).
ApiKey/RequireApiKey,Area(prostokąt / kołolat/lon/radius_km/AreaId; domyślnie Bałtyk PL),IntervalSec,Active— obszar wymagany jak w flyDisplay(ikona SVG / własna, etykiety Name/MMSI/Speed, animacja)Map/BoatsInfo,InfoWindow, klik → ShowRoute → polyline + wykres SOG- Alias:
TShips = TBoats - Serwer: nginx + ships_proxy (Digitraffic AIS, fallback sample)
- Active + zaznaczenie obszaru / współrzędne /
ApplyAreaId→ automatyczne zapytanie: §13e
| 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.