sgcMaps, mappe native per Delphi, C++ Builder & .NET
Metti una vera mappa nella tua applicazione senza un controllo browser e senza una riga di JavaScript. sgcMaps disegna da sé le tile raster e vettoriali, aggiunge livelli da server WMS e WMTS, mostra migliaia di marcatori raggruppati, percorsi e zone, geocodifica gli indirizzi e continua a funzionare offline con tile locali e un router offline.
VCL, FireMonkey, Lazarus, WinForms, WPF, AvaloniaNessun controllo browser, nessun JavaScriptEdizione .NET Community gratuitaIncluso in sgcUI Enterprise
Nativo ovunqueControlli VCL, FireMonkey, Lazarus, WinForms, WPF e Avalonia che disegnano la mappa da soli.
I tuoi dati sulla mappaMarcatori raggruppati, percorsi, zone, cerchi, etichette e heatmap da codice o da file.
Funziona offlineTile da disco, un router offline e un geocoder offline, senza bisogno di chiavi API.
Mappe come immaginiGenera file PNG da una console, un servizio o un processo .NET su Linux.
FUNZIONALITÀ CHIAVE
Tutto ciò che serve a un'applicazione con mappe
Diciotto funzionalità, ciascuna con l'API reale e l'argomento della guida che la descrive.
Tile e dati della mappa
Il controllo mappa disegna ogni tile da sé, da un server di tile, da un servizio WMS o WMTS, da una sorgente vettoriale o da file su disco.
Tile e dati della mappa
Una vera mappa nel tuo form, senza browser dentro
La maggior parte dei componenti mappa incapsula una web view e una libreria JavaScript, così la tua applicazione desktop finisce per distribuire un browser. sgcMaps no. TsgcVCLMap e TsgcFMXMap scaricano, memorizzano in cache e disegnano le tile sul proprio canvas, gestiscono lo zoom con la rotellina e il trascinamento per spostarsi, e generano normali eventi Delphi. La tua mappa è un controllo nativo come tutti gli altri: si ancora, segue il tema del form e si debugga come il resto del tuo codice. Non c'è nessun processo aggiuntivo da distribuire o da mettere in sicurezza, e la mappa si comporta allo stesso modo su ogni macchina dove gira la tua applicazione.
La collezione Layers contiene uno o più elementi TsgcMapLayer, ciascuno con il proprio TileSourceType
TsgcFMXMap funziona su Windows da Delphi XE6 e su macOS, iOS e Android da Delphi 10.4
Un controllo Lazarus LCL mostra tile da disco
In .NET, SgcMapControl per WinForms, TsgcWpfMap per WPF, TsgcAvaloniaMap per Avalonia 12 e il MapView headless condividono lo stesso motore
Da destra a sinistra per arabo ed ebraico: i pulsanti di zoom, il selettore dei livelli, la bussola, la barra della scala e l'attribuzione passano sul lato opposto, mentre la mappa mantiene il suo orientamento geografico
Scegliere una mappa di base non dovrebbe significare leggere la documentazione di un server di tile. Imposta Provider su un livello e chiama sgcMapApplyProvider: il livello riceve il modello di URL, lo zoom massimo e il testo di attribuzione di quel provider. OpenStreetMap, OpenTopoMap, Esri World Imagery ed Esri World Street funzionano senza chiave. MapTiler, Thunderforest e Stadia richiedono la tua chiave API. Il tuo server di tile è a un modello di URL di distanza. Ogni livello ha il proprio provider, quindi un livello satellitare e uno stradale possono stare nella stessa mappa e l'utente passa dall'uno all'altro sulla mappa stessa.
Senza chiave: mtpOpenStreetMap, mtpOpenTopoMap, mtpEsriWorldImagery, mtpEsriWorldStreet
Con la tua chiave: mtpMapTilerStreets, mtpMapTilerSatellite, mtpThunderforestCycle, mtpThunderforestTransport, mtpStadiaAlidadeSmooth
mtpCustom con URLTemplate legge qualsiasi server {z}/{x}/{y}
L'attribuzione del provider viene disegnata sulla mappa al posto tuo
ShowLayerSwitcher inserisce un pulsante dei livelli sulla mappa
Tile vettoriali sempre nitide a qualsiasi dimensione
Le tile raster si sfocano quando le ingrandisci, e ogni cambio di stile significa nuove immagini dal server. Con le tile vettoriali il controllo riceve la geometria e disegna da sé strade, acqua, edifici ed etichette, così il testo resta nitido sugli schermi ad alta densità e nelle immagini esportate. Punta un livello a un server di Mapbox Vector Tile e lascia vuoto VectorStyleFile per usare lo stile integrato, oppure carica un file di stile MapLibre o Mapbox GL per adattarlo al tuo marchio. I livelli vettoriali funzionano sia nel controllo VCL sia in quello FireMonkey.
mtsVectorHTTP legge un server di tile vettoriali, da Delphi XE2
mtsVectorMBTiles legge un file MBTiles vettoriale locale (pacchetto offline)
mtsVectorPMTiles legge tile vettoriali da un archivio PMTiles, un file locale o un URL (pacchetto offline)
TsgcMapVectorStyle carica uno stile con LoadFromFile o LoadFromJSON
La decodifica e il disegno sono in TsgcMapTileSource_MVT, in puro codice Delphi
Comuni, aziende di servizi e agenzie cartografiche pubblicano uso del suolo, catasto e ortofoto come servizi web OGC e non come tile z/x/y. Imposta TileSourceType su mtsWMS o mtsWMTS e il livello richiede le sue immagini al servizio, come overlay trasparente su una mappa di base o come mappa di base stessa. I lettori delle capabilities elencano i livelli offerti da un servizio e configurano il livello per te, così i tuoi utenti scelgono un livello dal suo titolo invece di digitare i parametri della richiesta.
mtsWMS invia richieste GetMap WMS 1.3.0 o 1.1.1, con Layers, Styles, ImageFormat e Transparent nelle opzioni WMS del livello
mtsWMTS legge i servizi KVP e REST tramite le opzioni WMTS del livello
TsgcMapWMSCapabilities e TsgcMapWMTSCapabilities caricano il documento delle capabilities, e ApplyToLayer configura un livello a partire da esso
Un documento di eccezione del server arriva a OnTileError con il suo testo
In .NET, TileSourceType.Wms e TileSourceType.Wmts, con WmsCapabilities e WmtsCapabilities
In tutte le edizioni, compresa l'edizione Community gratuita, da Delphi 2009. La mappa resta in Web Mercator: i livelli WMS vengono richiesti in EPSG:3857, i livelli WMTS richiedono un tile matrix set Web Mercator come GoogleMapsCompatible, e GetFeatureInfo non è supportato.
Un tecnico sul campo in un seminterrato, una nave in mare o la rete di un reparto produttivo non possono dipendere da un server di tile. sgcMaps legge le tile da disco esattamente come le legge dal web. Assegna a un livello una CacheFolder e ogni tile scaricata viene conservata per l'esecuzione successiva. Per un pacchetto offline completo, TsgcMapTileDownloader scarica in anticipo un'area e un intervallo di zoom in una cartella o in un file MBTiles.
mtsFolder legge una cartella z/x/y di tile PNG o JPEG
mtsMBTiles legge un file MBTiles raster, da Delphi XE7 (FireDAC SQLite)
CountTiles ti dice la dimensione di un download prima di avviarlo; DelayMS e OnProgress lo mantengono educato e visibile
I download di massa devono rispettare i termini del provider: le tile di OpenStreetMap sono solo per la visualizzazione interattiva
Community legge le cartelle di tile z/x/y e mantiene la CacheFolder per livello. Il downloader di tile e i file MBTiles e PMTiles fanno parte del pacchetto offline.
Un archivio PMTiles contiene una piramide completa di tile in un unico file che copi su un portatile o metti su qualsiasi server web statico, senza nessun server di tile da gestire. sgcMaps legge l'archivio da un file locale, oppure direttamente da un server web con richieste HTTP range, e tiene in una cache le directory già lette, così in rete viaggiano solo le tile visibili.
mtsPMTiles per gli archivi raster PNG e JPEG, mtsVectorPMTiles per gli archivi Mapbox Vector Tile
TileSourcePath accetta un nome di file o un URL http o https
TsgcMapTileSource_PMTiles riporta l'intervallo di zoom, i limiti, il centro e i metadati dell'archivio
PMTiles versione 3; gli archivi con tile WebP vengono segnalati come non supportati
Da Delphi XE2, e nel pacchetto Registered esegece.sgcMaps per .NET
PMTiles fa parte del pacchetto offline, come MBTiles, quindi è nell'edizione Registered e non nell'edizione Community gratuita.
Metti sulla mappa i tuoi dati, mantienili leggibili a ogni livello di zoom e lascia fare i calcoli a sgcMaps.
Marcatori, forme e geometria
Migliaia di marcatori, ancora leggibili
Una flotta, una rete di negozi o una griglia di sensori diventano presto una nuvola di pin sovrapposti. Attiva il clustering e i marcatori vicini si fondono in una bolla numerata che si divide di nuovo quando l'utente ingrandisce, ricalcolata a ogni livello di zoom. Ogni marcatore ha il proprio popup, tooltip e icona, e clic, trascinamenti e clic sui cluster arrivano come eventi, così la mappa diventa parte del tuo flusso di lavoro invece di un'immagine. I marcatori si possono aggiungere in un ciclo dai tuoi dati o importare da file GeoJSON, GPX e KML, e ClearMarkers li azzera con una sola chiamata.
MarkerOptions.Clustering con GridSize, MinClusterSize e ZoomOnClick
PopupText, TooltipText e IconBitmap per ogni marcatore
Eventi OnMarkerClick, OnClusterClick e OnMarkerDragEnd
BeginUpdate e EndUpdate attorno ai caricamenti di massa; FitToMarkers li inquadra tutti
MarkerAtScreen e ClusterAtScreen eseguono l'hit test di qualsiasi pixel
La maggior parte delle schermate con mappa richiede più dei pin: il percorso di consegna pianificato, l'area servita da un deposito, un raggio attorno a un cliente, da dove arrivano gli ordini. sgcMaps disegna tutto questo come elementi del modello della mappa, con le stesse coordinate dei tuoi marcatori. Le forme possono essere rese modificabili, così un utente può trascinare i vertici di una zona con il mouse e il tuo codice viene avvisato quando la modifica termina. Le etichette posizionano il testo a una coordinata con font, colore e sfondo propri, il che mantiene i nomi delle zone e i numeri dei percorsi ancorati alla mappa.
AddPolyline con linee Dashed e Geodesic
AddPolygon con AddHole, più AddRectangle, AddCircle (RadiusMeters) e AddLabel
Le forme Editable segnalano le modifiche tramite OnShapeEdited
TsgcMapHeatmap accetta punti pesati con AddPoint e un MaxIntensity
Questo veicolo è dentro la zona? Quanto dista il deposito più vicino? Quale punto del percorso è il più vicino al cliente? Queste domande saltano fuori in ogni applicazione con mappe ed è facile sbagliare vicino ai poli o su lunghe distanze. L'unit di geometria risponde sulla sfera WGS84 con semplici funzioni che puoi chiamare anche da un servizio senza alcuna mappa. Le funzioni accettano semplici record TsgcMapCoord, e sgcMapLatLonToPixel e sgcMapPixelToLatLon convertono tra coordinate dello schermo e del mondo quando disegni i tuoi overlay.
sgcMapDistance in metri, sgcMapInitialBearing e sgcMapDestinationPoint
sgcMapPointInPolygon e sgcMapPointInPolygonWithHoles per i geofence
sgcMapNearestPointOnPolyline aggancia una posizione a un percorso
sgcMapGeodesicInterpolate e sgcMapSimplify per linee morbide e leggere
Trova indirizzi e pianifica percorsi con provider online, oppure completamente offline senza chiave API.
Ricerca e routing
Geocodifica, indicazioni e luoghi dietro un'unica API
Ogni provider di geocodifica e routing ha il proprio formato REST, le proprie chiavi e le proprie stranezze. I componenti di servizio le nascondono: scegli un provider, imposti la tua chiave quando serve e chiami gli stessi metodi, in modo sincrono o asincrono. Passare da un provider a un altro è un cambio di proprietà, non una riscrittura, e i risultati tornano come oggetti Delphi pronti da mettere sulla mappa. Ogni componente condivide la classe base TsgcMapService, quindi ApiKey, UserAgent e LastError funzionano allo stesso modo con ogni provider.
TsgcMapGeocoder: Nominatim, Google, HERE, Azure Maps, Mapbox, OpenRouteService e Geoapify
TsgcMapDirections: OSRM, OpenRouteService, Google Routes, HERE, Azure Maps, Mapbox e Geoapify
TsgcMapPlaces per l'autocompletamento degli indirizzi, TsgcMapElevation e TsgcMapTimeZone
GeocodeAsync, GetRouteAsync e SuggestAsync mantengono reattiva l'interfaccia; gli errori arrivano in OnError
Percorsi e ricerca di indirizzi senza internet e senza chiave
Il routing online fallisce proprio dove si usano le app sul campo, e ogni richiesta può costare denaro. Il router offline calcola percorsi in auto, in bici e a piedi sul dispositivo da un grafo stradale costruito una volta da un estratto di OpenStreetMap. Il geocoder offline cerca nomi di luoghi e geocodifica al contrario un clic da un indice GeoNames in SQLite. Entrambi funzionano senza rete, senza account e senza costi per richiesta. Il router e il geocoder sono componenti non visuali, quindi un servizio Windows o uno strumento console può rispondere a richieste di percorsi e indirizzi senza alcuna mappa a schermo.
TsgcMapOfflineRouter risponde a GetRoute da un grafo costruito da TsgcMapRouteGraphBuilder a partire da .osm.pbf
sgcMapAddRouteToPolylines disegna il risultato sulla mappa
TsgcMapOfflineGeocoder con ReverseGeocode, su un indice creato da TsgcMapGeoIndexBuilder
I builder da riga di comando per il grafo e per l'indice sono nella cartella Tools
Community usa i servizi online; il router e il geocoder offline fanno parte del pacchetto offline.
Scambia dati geografici con altri strumenti, genera mappe dove non c'è schermo e porta la mappa su un telefono.
File, rendering e mobile
Apri i file che i tuoi utenti hanno già
I clienti inviano tracce da un orologio GPS, zone disegnate in uno strumento GIS o un KML da un altro sistema. sgcMaps legge e scrive GeoJSON, GPX e KML direttamente nel modello della mappa, quindi un'importazione è una chiamata e un'esportazione è un'altra. Le tracce GPX arrivano con le loro statistiche e si possono colorare in base alla quota, e un lettore in streaming scorre grandi estratti di OpenStreetMap senza caricarli in memoria. Le esportazioni usano le stesse funzioni al contrario, quindi le zone che un utente ha disegnato sulla mappa si possono salvare come GeoJSON o KML e aprire in altri strumenti GIS.
sgcMapLoadGeoJSONFile e sgcMapSaveGeoJSONFile, da Delphi XE6
TsgcMapGPX con TrackStats (TotalAscent, TotalDescent) e ColorByElevation
sgcMapLoadKMLFile e sgcMapSaveKMLFile
Il lettore OpenStreetMap legge in streaming file .osm.pbf e XML tramite eventi
sgcMapGeoJSONAsText restituisce il GeoJSON della mappa come stringa
I dati geografici pubblici vengono ancora distribuiti come shapefile Esri, e i database spaziali si scambiano la geometria come Well Known Text. TsgcMapShapefile importa i punti, le linee e i poligoni di uno shapefile insieme alla sua tabella degli attributi, così ogni marcatore può mostrare il record da cui proviene. WKT e l'EWKT scritto da PostGIS vengono letti e scritti, ed è il modo più semplice per spostare una zona tra la mappa e una colonna geometrica del tuo database.
LoadFromFile legge il .shp con i suoi file .shx, .dbf, .prj e .cpg; OnItem riceve ogni riga di attributi e LabelField imposta il testo del popup dei punti
Un .prj in gradi WGS84, ETRS89 o NAD83, o in Web Mercator, si carica direttamente, e un file senza .prj viene letto come WGS84
Qualsiasi altra proiezione genera un errore chiaro, a meno che il tuo gestore OnTransform converta le coordinate
sgcMapLoadWKT e TsgcMapWKT leggono POINT, LINESTRING, POLYGON, le loro forme MULTI e GEOMETRYCOLLECTION, in gradi o in metri Web Mercator, e AsText riscrive la mappa
In tutte le edizioni da Delphi 7; in .NET, ShapefileFormat e WktFormat con un callback Transform
Bolle di consegna con il percorso, un report giornaliero con gli incidenti di oggi, una miniatura per una pagina web: molte mappe non vengono mai mostrate in una finestra. Lo stesso controllo genera un PNG o una bitmap senza essere visibile, da un'applicazione console o da un servizio Windows. Puoi verificare se tutte le tile sono arrivate prima di inviare l'immagine, così un server di tile lento non finisce mai come un quadrato grigio in un documento per il cliente. Il rendering lato server usa gli stessi livelli, marcatori e forme del controllo interattivo, quindi una mappa progettata a schermo appare identica nel PNG.
SaveToPNG e SaveToPNGFile, da Delphi 2009
RenderToBitmap e SaveToBMPFile per la tua pipeline
LastRenderMissingTiles segnala le tile non disponibili
In .NET, MapView.RenderToPng funziona anche su Linux
Un operatore pianifica su un desktop Windows e l'autista segue il piano su un telefono. TsgcFMXMap porta lo stesso modello, livelli, marcatori, forme e servizi in FireMonkey su Windows, macOS, iOS e Android, quindi il codice scritto per la mappa VCL si riutilizza. TsgcMapLocation legge la posizione del dispositivo, così la mappa può centrarsi sull'utente e seguirlo. La cache delle tile per livello funziona anche su mobile, quindi un telefono continua a mostrare le aree già caricate.
TsgcFMXMap su Windows da Delphi XE6 e su macOS, iOS e Android da Delphi 10.4 (macOS ARM da Delphi 11), con le stesse collezioni di TsgcVCLMap
TsgcMapLocation su Windows, Android, iOS e macOS
La demo FMX mostra tile, marcatori e posizione in un solo form, e la demo FMX Mobile è pensata per telefoni e tablet
Il core indipendente dal framework si compila anche per Linux a 64 bit da Delphi 10.4, per applicazioni console e server che usano le sorgenti di tile, i formati di file e i dati offline
Tre pacchetti runtime, sgcMaps (il core), sgcMapsVCL e sgcMapsFMX, così un'applicazione FireMonkey non carica più i pacchetti VCL
Le versioni minime di Delphi per ogni funzionalità sono elencate nell'argomento sull'installazione
TsgcWpfMap e TsgcAvaloniaMap portano il motore di mappe .NET in WPF e in Avalonia 12 con le funzionalità del controllo WinForms: spostamento e zoom con mouse, tocco e tastiera, livelli, marcatori, forme, stampa, esportazione PDF e UI Automation. I livelli e i marcatori si dichiarano in XAML con il prefisso sgc, e una collezione del tuo view model diventa marcatori tramite ItemsSource, così aggiungere un negozio alla collezione lo mette sulla mappa e trascinare il suo marcatore riscrive la nuova posizione.
LatitudeMember, LongitudeMember, TooltipMember, PopupMember, ColorMember e DraggableMember associano le tue proprietà ai marcatori
SelectedItem, Zoom, Bearing, CenterLatitude e CenterLongitude si collegano in entrambe le direzioni
I colori si scrivono in XAML come testo #AARRGGBB o #RRGGBB
NuGet esegece.sgcMaps.Wpf (da net8.0-windows a net10.0-windows) ed esegece.sgcMaps.Avalonia (da net8.0 a net10.0), entrambi con un pacchetto Community gratuito
I progetti WpfDemo e AvaloniaDemo mostrano la stessa finestra nei due framework
L'anteprima mostra esattamente ciò che ricevono la stampante e il PDF.
Stampa, anteprima e PDF
Stampa la vista della mappa o esporta un PDF accessibile
La mappa viene stampata in una pagina come un'immagine della vista attuale: la stessa area del controllo, con il suo centro, il suo zoom, i tile, i livelli, i marcatori e le forme. La barra della scala e l'attribuzione vengono stampate, i pulsanti di zoom, il selettore dei livelli e la bussola no, e la stampa non sposta mai la vista.
Print mostra la finestra di stampa o stampa direttamente sulla stampante predefinita, e ShowPrintPreview apre un'anteprima con navigazione tra le pagine, zoom, impostazione della pagina, stampa ed esportazione PDF
PrintSettings contiene la carta, l'orientamento, i margini, la scala e il testo dell'intestazione e del piè di pagina, e la stampante, l'anteprima e il PDF li usano tutti
ExportToPDF scrive la pagina come un'unica immagine con tag, a 192 dpi per impostazione predefinita, con un testo alternativo che indica il centro, lo zoom e il numero di livelli e marcatori
PDFALevel di TsgcUIPDFOptions aggiunge PDF/A-2a o PDF/A-3a per l'archiviazione, da solo o insieme a PDF/UA
La stampa e l'anteprima sono in tutte le edizioni, compresa l'edizione Community gratuita, su VCL, FireMonkey, WinForms, WPF e Avalonia. In FireMonkey la stampa funziona su Windows e macOS, e l'anteprima e l'esportazione PDF su tutte le piattaforme. L'esportazione PDF richiede il ponte sgcUIPDF e uno sgcPDF con licenza (il pacchetto NuGet esegece.sgcUICore.sgcPDF in .NET), quindi non è nell'edizione Community.
UI Automation per screen reader e tastiera, senza alcuna configurazione.
Accessibilità
Una mappa raggiungibile con la tastiera ed esposta a UI Automation
sgcMaps espone la mappa a Microsoft UI Automation con un testo alternativo, i marcatori come elenco e i livelli come elenco, dove ogni livello indica se è visibile. I marcatori si possono raggiungere con la tastiera.
Le frecce spostano la mappa, i tasti più e meno fanno lo zoom e Home torna alla vista iniziale
PagÙp e PagÙgiù passano al marcatore precedente o successivo, Invio attiva il marcatore con il focus e Esc rimuove il focus dal marcatore
La mappa mostra un anello di focus visibile mentre ha il focus
In .NET, i controlli mappa WinForms, WPF e Avalonia espongono la stessa struttura UI Automation e la stessa tastiera
L'accessibilità è attiva per impostazione predefinita in tutte le edizioni, compresa l'edizione Community gratuita, su VCL in ogni versione di Delphi e C++Builder da Delphi 7 a Delphi 13, su FireMonkey su Windows e su WinForms, WPF e Avalonia. In Delphi e C++Builder, AccessibleName e AccessibleDescription impostano il nome e la descrizione esposti a UI Automation, e in .NET il nome accessibile e il testo della guida standard di ciascun framework fanno lo stesso. Vedi i report di conformità sull'accessibilità, che non coprono ancora i nuovi controlli mappa WPF e Avalonia. L'immagine della mappa è descritta solo dal suo centro e dallo zoom, e il renderer della mappa non segue l'alto contrasto di Windows, perché l'immagine della mappa è composta da tile del provider.
Polilinee, poligoni e heatmap disegnati sulla stessa mappa.
Un'area, quattro provider senza chiave, ciascuno con la propria attribuzione.
CASI D'USO
Chi sviluppa con sgcMaps
Assistenza sul campo e logistica
Tecnici e autisti hanno bisogno della mappa dove la copertura è scarsa. Prepara in anticipo le tile di una regione, calcola percorsi in auto sul dispositivo con il router offline e trova gli indirizzi con il geocoder offline. Di nuovo in ufficio, lo stesso codice disegna i percorsi pianificati e le zone di consegna e genera un PNG di ogni percorso per la bolla di consegna.
Una sala di controllo osserva centinaia di veicoli, macchine o sensori contemporaneamente. Il clustering mantiene leggibile la mappa a livello nazionale e si divide in singoli pin a livello stradale. Una heatmap mostra dove si concentrano gli incidenti, i controlli geofence con point in polygon generano avvisi e gli eventi di clic sui marcatori aprono la scheda dell'asset nei tuoi form.
Strumenti di pianificazione, app sportive e software di rilievo vivono di tracce GPX, livelli KML e zone GeoJSON. sgcMaps importa ed esporta tutti e tre, mostra le statistiche delle tracce e i colori della quota, e mette il risultato su una mappa di base topografica. Il controllo FireMonkey porta le stesse funzionalità su un tablet o un telefono sul campo. Le statistiche delle tracce danno a colpo d'occhio la salita e la discesa totali di un percorso.
La stessa API in Delphi, C++ Builder e C#: tile OpenStreetMap, tre marcatori, una linea geodetica e un raggio, inquadrati sui marcatori e salvati come PNG.
Una mappa VCL costruita nel codice: un livello OpenStreetMap con cache, marcatori, una linea geodetica e un cerchio, poi un PNG del risultato.
uses
SysUtils, Controls, Graphics, sgcMaps_Classes, sgcMaps_Providers,
sgcMaps_Geometry, sgcMaps_VCL;
// OpenStreetMap with cached tiles, three capitals, a geodesic flight line
// and a 300 km radius, fitted to the markers and saved as PNG.
procedure BuildMap(aOwner: TWinControl);
var
oMap: TsgcVCLMap;
oLayer: TsgcMapLayer;
oLine: TsgcMapPolyline;
begin
oMap := TsgcVCLMap.Create(aOwner);
oMap.Parent := aOwner;
oMap.Align := alClient;
oLayer := oMap.Layers.Add;
oLayer.Name := 'OpenStreetMap';
oLayer.Provider := mtpOpenStreetMap;
sgcMapApplyProvider(oLayer);
oLayer.CacheFolder := ExtractFilePath(ParamStr(0)) + 'tile_cache';
oMap.AddMarker(48.8566, 2.3522, 'Paris', 'France');
oMap.AddMarker(52.5200, 13.4050, 'Berlin', 'Germany');
oMap.AddMarker(41.9028, 12.4964, 'Rome', 'Italy');
oMap.MarkerOptions.Clustering.Enabled := True;
oLine := oMap.AddPolyline;
oLine.Geodesic := True;
oLine.Dashed := True;
oLine.Color := clRed;
oLine.AddPoint(48.8566, 2.3522);
oLine.AddPoint(52.5200, 13.4050);
oMap.AddCircle(48.8566, 2.3522, 300000).FillOpacity := 0.15;
oMap.FitToMarkers(40);
oMap.AddLabel(50.7, 8, Format('Paris to Berlin: %.0f km',
[sgcMapDistance(48.8566, 2.3522, 52.52, 13.405) / 1000]));
oMap.SaveToPNG('europe.png', 1200, 800);
end;
Un overlay WMS e un'importazione di shapefile con i suoi attributi in Delphi, e una finestra WPF con la mappa, un livello e un marcatore dichiarati in XAML.
Un overlay WMS trasparente con una propria cache di tile, e uno shapefile i cui parchi vengono riempiti di verde in base alla tabella degli attributi. Entrambi funzionano in tutte le edizioni.
uses
Classes, SysUtils, Graphics, sgcMaps_Classes, sgcMaps_VCL, sgcMaps_Shapefile;
procedure TForm2.AddWMSLayer;
var
oLayer: TsgcMapLayer;
begin
// an overlay drawn by a WMS server
oLayer := sgcVCLMap1.Layers.Add;
oLayer.Name := 'Land use';
oLayer.TileSourceType := mtsWMS;
oLayer.URLTemplate := 'https://maps.example.com/geoserver/wms';
oLayer.WMS.Layers := 'landuse,rivers';
oLayer.WMS.Version := mwv130;
oLayer.WMS.ImageFormat := 'image/png';
oLayer.WMS.Transparent := True;
oLayer.IsBaseLayer := False;
oLayer.Opacity := 0.7;
oLayer.CacheFolder := ExtractFilePath(ParamStr(0)) + 'cache\landuse';
end;
procedure TForm2.ImportLandUse;
var
oShp: TsgcMapShapefile;
begin
oShp := TsgcMapShapefile.Create;
try
// points get the NAME field as popup text (the field must exist)
oShp.LabelField := 'NAME';
oShp.OnItem := ShapefileItem;
// reads landuse.shx, .dbf, .prj and .cpg next to the .shp
oShp.LoadFromFile('C:\Data\landuse.shp', sgcVCLMap1.Markers,
sgcVCLMap1.Polylines, sgcVCLMap1.Polygons);
memoLog.Lines.Add(Format('%d records, %d skipped, fields: %s',
[oShp.RecordCount, oShp.SkippedCount, oShp.Fields.CommaText]));
finally
oShp.Free;
end;
end;
procedure TForm2.ShapefileItem(Sender: TObject; aRecord: Integer;
aAttributes: TStrings; aItem: TCollectionItem);
begin
// aAttributes holds the .dbf row as Name=Value lines
if (aItem is TsgcMapPolygon) and (aAttributes.Values['USE'] = 'PARK') then
TsgcMapPolygon(aItem).FillColor := clGreen;
end;
using System;
using System.IO;
using System.Windows;
using esegece.sgcMaps;
namespace MapQuickStartWpf
{
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
// cache the tiles of the layer declared in XAML
MainMap.Layers[0].CacheFolder = Path.Combine(AppContext.BaseDirectory, "tile_cache");
// a line from Puerta del Sol to Retiro Park
Polyline line = MainMap.Map.AddPolyline();
line.AddPoint(40.4168, -3.7038);
line.AddPoint(40.4153, -3.6844);
line.Color = MapColors.Blue;
line.Width = 4;
MainMap.MapClick += (s, e) => Title = $"Click at {e.Latitude:F5}, {e.Longitude:F5}";
MainMap.MarkerDragEnd += (s, e) => Title = $"Dropped at {e.Item.Latitude:F5}, {e.Item.Longitude:F5}";
MainMap.TileError += (s, e) => Title = $"Tile {e.Zoom}/{e.X}/{e.Y}: {e.Error}";
}
}
}
Con sgcMaps sono incluse undici demo Delphi e otto demo .NET. Non ci sono progetti demo C++ Builder.
Solo Registered OfflineMap
Cartelle, MBTiles e tile online, marcatori e forme, più importazione di GeoJSON, GPX e KML.
MapFeatures
Provider e chiavi API, clustering dei marcatori, modifica delle forme, heatmap ed esportazione di immagini.
Services
Ricerca di luoghi, geocodifica, indicazioni, quota, fusi orari e posizione del dispositivo con i provider online. Delphi XE8 e successivi.
Solo Registered OfflineServices
Costruisci un indice GeoNames e un grafo stradale OpenStreetMap, poi cerca luoghi e calcola percorsi in auto, in bici o a piedi senza rete.
StaticRender
Un programma console che genera una mappa in un file PNG o BMP senza finestra.
FMX
La mappa FireMonkey con tile, marcatori e posizione del dispositivo, per Windows, macOS, iOS e Android. Delphi XE6 e successivi.
VectorTiles
Un server di tile vettoriali disegnato con lo stile integrato o con un tuo file di stile, con etichette nitide a ogni zoom.
FMXMobile
La mappa FireMonkey pensata per telefoni e tablet: spostamento con un dito, zoom a pizzico, grandi pulsanti di zoom, la tua posizione con un cerchio di precisione e un elenco di luoghi. Delphi 10.4 e successivi.
OGCServices
Carica un documento di capabilities WMS o WMTS da un URL o da un file, elenca i livelli e aggiunge quello scelto come overlay su OpenStreetMap, con un cursore di opacità. Delphi 2009 e successivi.
Solo Registered PMTiles
Apre un archivio PMTiles raster o vettoriale da un file o da un URL, mostra la sua intestazione e i suoi metadati, e lo aggiunge come livello centrato sull'archivio. Delphi XE2 e successivi.
ShapefileWKT
Importa uno shapefile con la sua tabella degli attributi, mostra il record di un marcatore su cui si fa clic, e importa ed esporta WKT.
WinFormsDemo
Il SgcMapControl .NET in una finestra WinForms con provider, marcatori e forme.
WpfDemo
La mappa WPF dichiarata in XAML: livelli di base e marcatori nel markup, negozi collegati come marcatori con ItemsSource, cursori di zoom e orientamento, stampa ed esportazione PDF.
AvaloniaDemo
La stessa finestra con il controllo mappa Avalonia 12 e binding compilati.
OgcServicesDemo
Il controllo mappa WinForms con un livello di base OpenStreetMap e un overlay da un servizio WMS o WMTS: carica un documento di capabilities da un URL o da un file, elenca i livelli, aggiunge quello scelto con un cursore di opacità e mostra gli errori delle tile.
Solo Registered PMTilesDemo
Il controllo mappa WinForms con un livello da un archivio PMTiles raster o vettoriale, aperto da un file o da un URL, con la sua intestazione e i suoi metadati e la mappa centrata sull'archivio.
ShapefileWktDemo
Il controllo mappa WinForms che importa uno shapefile con la sua tabella degli attributi e il record di un marcatore su cui si fa clic, più l'importazione e l'esportazione WKT degli overlay.
Solo Registered OfflineDemo
Il pacchetto offline .NET: tile, routing e geocodifica offline da file di dati locali.
ConsoleRenderDemo
Una console .NET che genera una mappa in PNG con il MapView headless, su Windows o Linux.
Demo compilate
Eseguibili pronti all'uso di ogni prodotto sgcUI, senza nulla da installare.
Cinque demo QuickStart per Delphi (VCL) si trovano in Demos\Maps\00.QuickStart. La guida PDF le spiega passo dopo passo: una prima mappa con marcatori, marcatori ed etichette aggiunti da codice, forme, gli eventi della mappa e un localizzatore di negozi.
L'edizione .NET Community gratuita (NuGet esegece.sgcMaps.Community, esegece.sgcMaps.Rendering.Community, esegece.sgcMaps.WinForms.Community, esegece.sgcMaps.Wpf.Community, esegece.sgcMaps.Avalonia.Community) ha ogni funzionalità tranne il pacchetto offline. Il pacchetto esegece.sgcMaps.Offline è solo Registered. Un progetto fa riferimento ai pacchetti Community oppure a quelli Registered, mai a entrambi.
Funzionalità
Community (gratuita)
Registered
Controlli mappa VCL, FireMonkey, WinForms, WPF e Avalonia
✓
✓
Provider di tile, server di tile HTTP e vettoriali
✓
✓
Livelli WMS e WMTS
✓
✓
Cartelle di tile z/x/y e cache delle tile per livello
✓
✓
Marcatori, clustering, forme, etichette e heatmap
✓
✓
Funzioni di geometria
✓
✓
Importazione ed esportazione di GeoJSON, GPX e KML
✓
✓
Importazione di shapefile, importazione ed esportazione WKT
✓
✓
Geocodifica online, indicazioni, luoghi, quota e fusi orari
✓
✓
Rendering statico in PNG
✓
✓
Downloader di tile per pacchetti offline
−
✓
File MBTiles e PMTiles (raster e vettoriali)
−
✓
Router offline e geocoder offline
−
✓
PIATTAFORME
Framework e piattaforme supportati
Componenti di sgcMaps
TsgcVCLMap and TsgcFMXMap
I controlli mappa per VCL e FireMonkey, più un controllo Lazarus LCL che legge le tile da disco.
Collezioni del modello
Layers, Markers, Polylines, Polygons, Rectangles, Circles, Labels e Heatmaps, condivise da ogni framework.
Servizi online
TsgcMapGeocoder, TsgcMapDirections, TsgcMapPlaces, TsgcMapElevation e TsgcMapTimeZone.
Strumenti offline
TsgcMapRouteCalculator, TsgcMapOfflineRouter, TsgcMapOfflineGeocoder, TsgcMapGeoIndexBuilder e TsgcMapTileDownloader.
Formati GIS e servizi OGC
TsgcMapShapefile, TsgcMapWKT, TsgcMapWMSCapabilities, TsgcMapWMTSCapabilities e TsgcMapTileSource_PMTiles.
TsgcMapLocation e funzioni di geometria
Posizione del dispositivo, e sgcMapDistance, direzione, punto di destinazione, interpolazione geodetica, point in polygon e semplificazione delle linee.
Mappe .NET
SgcMapControl per WinForms, TsgcWpfMap per WPF, TsgcAvaloniaMap per Avalonia 12, e MapView, il motore headless che genera PNG, anche su Linux.
Destinazione
Componente
Piattaforme
Da Delphi 7 a 13, VCL
TsgcVCLMap e il modello
Win32, Win64 da XE2 e ARM64EC in Delphi 13
Da Delphi XE6 a 13, FireMonkey
TsgcFMXMap
Windows da XE6; macOS, iOS e Android da Delphi 10.4 (macOS ARM da Delphi 11); posizione del dispositivo su Windows, Android, iOS e macOS
Da Delphi 10.4 a 13, Linux a 64 bit
Il core indipendente dal framework, nessun controllo mappa
Sorgenti di tile, servizi, formati di file e dati offline in applicazioni console e server
C++ Builder da 2007 a 13
TsgcVCLMap, TsgcFMXMap da XE6 e il modello
Solo Windows: Win32, Win64 da XE3 e Win64x in C++ Builder 13, con header .hpp generati e librerie statiche
WinForms e WPF (net8.0-windows, net9.0-windows, net10.0-windows), Avalonia 12 (net8.0, net9.0, net10.0), PNG headless su Windows e Linux
Pacchetti Delphi: sgcMaps contiene il core indipendente dal framework, sgcMapsVCL la mappa VCL e sgcMapsFMX la mappa FireMonkey, con i pacchetti di progettazione dclsgcMaps e dclsgcMapsFMX. Un progetto compilato con pacchetti runtime che elenca sgcMaps aggiunge sgcMapsVCL o sgcMapsFMX. Vedi Pacchetti e Piattaforme.
FAQ
Domande frequenti
No. Tile, marcatori e forme sono disegnati nativamente dal controllo, quindi non c'è nessuna web view, nessuna libreria JavaScript e nessun runtime del browser da distribuire.
Non per OpenStreetMap, OpenTopoMap e le tile Esri, e non per il router e il geocoder offline. Le tile di MapTiler, Thunderforest e Stadia, e i provider commerciali di geocodifica e routing, usano la tua chiave. Ogni provider ha i propri termini d'uso, che la tua applicazione deve rispettare.
Sì. Le tile possono provenire da cartelle z/x/y, da una cache per livello, da file MBTiles o da archivi PMTiles, i percorsi da TsgcMapOfflineRouter e la ricerca di indirizzi da TsgcMapOfflineGeocoder. MBTiles, PMTiles, il downloader di tile e il router e il geocoder offline fanno parte del pacchetto offline dell'edizione Registered.
GeoJSON, GPX, KML e WKT con EWKT, per importazione ed esportazione, e shapefile Esri con i loro attributi per l'importazione, con statistiche delle tracce GPX e colori della quota. Un lettore in streaming elabora anche file OpenStreetMap .osm.pbf e XML, ed è così che si costruisce il grafo stradale offline. Vedi Formati di file, Shapefile e WKT.
Il modello, il controllo VCL, gli shapefile e WKT funzionano da Delphi 7 e C++ Builder 2007. Alcune funzionalità richiedono una versione minima più alta: output PNG, server di tile, WMS e WMTS da Delphi 2009, tile vettoriali, PMTiles e router offline da XE2, FireMonkey su Windows e GeoJSON da XE6, MBTiles e geocoder offline da XE7, servizi online da XE8. FireMonkey su macOS, iOS e Android e le unità del core su Linux a 64 bit richiedono Delphi 10.4 o successivo.
Sì. Un livello con TileSourceTypemtsWMS o mtsWMTS richiede le sue immagini a un servizio WMS 1.1.1 o 1.3.0, oppure a un servizio WMTS con codifica KVP o REST, e i lettori delle capabilities configurano il livello a partire dalla descrizione del servizio. La mappa è in Web Mercator, quindi i livelli WMS vengono richiesti in EPSG:3857 e i servizi WMTS richiedono un tile matrix set Web Mercator. WMS e WMTS sono in tutte le edizioni, Community compresa. Vedi WMS e WMTS.
Sì. TsgcWpfMap (NuGet esegece.sgcMaps.Wpf) e TsgcAvaloniaMap (esegece.sgcMaps.Avalonia, Avalonia 12) ospitano lo stesso motore del SgcMapControl WinForms. I livelli e i marcatori si possono dichiarare in XAML, i marcatori collegare a una collezione con ItemsSource, e la vista collegare in entrambe le direzioni. Entrambi sono anche nell'edizione Community gratuita. Vedi Quick Start WPF e Quick Start Avalonia.
I progetti demo sono solo Delphi, ma i componenti si installano in C++ Builder da 2007 a 13 e funzionano allo stesso modo. La scheda C++ Builder nella sezione di codice qui sopra mostra la stessa mappa costruita con gli header generati.
Sì. L'edizione Community è gratuita per privati e organizzazioni con un fatturato lordo annuo inferiore a 1 milione di EUR e non più di 5 sviluppatori. Ha ogni funzionalità tranne il pacchetto offline. In .NET i pacchetti sono esegece.sgcMaps.Community, esegece.sgcMaps.Rendering.Community, esegece.sgcMaps.WinForms.Community, esegece.sgcMaps.Wpf.Community e esegece.sgcMaps.Avalonia.Community. WMS, WMTS, shapefile, WKT e i controlli WPF e Avalonia sono inclusi anche in Community. Le organizzazioni più grandi hanno bisogno di una licenza Registered.
Garanzia soddisfatti o rimborsati di 30 giorniNon sei soddisfatto? Richiedi un rimborso completo entro 30 giorni dall'acquisto. Vedi la politica di rimborso
Prova sgcMaps oggi
Il trial di sgcUI include sgcMaps con il pacchetto offline e ogni altro prodotto sgcUI. L'edizione .NET Community è gratuita su NuGet.