Delphi, C++ Builder & .NET Parte di sgcUI

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
TsgcVCLMap che mostra il centro di Madrid da tile vettoriali con marcatori di posizione rossi e blu

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.

Una vera mappa nel tuo form, senza browser dentro

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
Leggi l'argomento della guida
Scegli un provider di tile con una sola proprietà

Tile e dati della mappa

Scegli un provider di tile con una sola proprietà

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
Leggi l'argomento della guida
Tile vettoriali sempre nitide a qualsiasi dimensione

Tile e dati della 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
Leggi l'argomento della guida

Tile e dati della mappa

Livelli dai tuoi server WMS e WMTS

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.

Leggi l'argomento della guida

Tile e dati della mappa Solo Registered

Continua a lavorare quando la rete non c'è

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.

Leggi l'argomento della guida

Tile e dati della mappa Solo Registered

Un'intera regione in un solo file PMTiles

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.

Leggi l'argomento della guida

Marcatori, forme e geometria

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
Leggi l'argomento della guida
Percorsi, zone e heatmap su un'unica mappa

Marcatori, forme e geometria

Percorsi, zone e heatmap su un'unica mappa

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
Leggi l'argomento della guida

Marcatori, forme e geometria

La matematica geografica è già scritta

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
Leggi l'argomento della guida

Ricerca e routing

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
Leggi l'argomento della guida

Ricerca e routing Solo Registered

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.

Leggi l'argomento della guida

File, rendering e mobile

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
Leggi l'argomento della guida

File, rendering e mobile

Shapefile e WKT da qualsiasi GIS

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
Leggi l'argomento della guida
Genera immagini di mappe su un server

File, rendering e mobile

Genera immagini di mappe su un server

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
Leggi l'argomento della guida

File, rendering e mobile

La stessa mappa su desktop e su mobile

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
Leggi l'argomento della guida

File, rendering e mobile

La mappa in WPF e Avalonia, dichiarata in XAML

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
Leggi l'argomento della guida

Accessibilità

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.

Leggi l'argomento della guida

Guarda sgcMaps all'opera

sgcMaps nelle demo della suite sgcUI: applicazioni complete che funzionano offline con dati simulati integrati.

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.

  • Funziona offline
  • Routing offline
  • Percorsi e zone
  • Immagini di mappe
Esegui la demo OfflineServices

Tracciamento di asset e flotte

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.

  • Clustering
  • Heatmap
  • Geometria
  • Eventi
Esegui la demo MapFeatures

GIS leggero e app outdoor

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.

  • GeoJSON, GPX, KML e shapefile
  • Tile topografiche
  • FireMonkey
Esegui la demo OfflineMap

Una mappa in poche righe

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;

Leggi l'argomento della guida →

La stessa mappa in C++ Builder con gli header di sgcMaps generati.

#include <vcl.h>
#include "sgcMaps_Classes.hpp"
#include "sgcMaps_Providers.hpp"
#include "sgcMaps_Geometry.hpp"
#include "sgcMaps_VCL.hpp"

// OpenStreetMap with cached tiles, three capitals, a geodesic flight line
// and a 300 km radius, fitted to the markers and saved as PNG.
void BuildMap(TWinControl *aOwner)
{
  TsgcVCLMap *oMap = new TsgcVCLMap(aOwner);
  oMap->Parent = aOwner;
  oMap->Align = alClient;

  TsgcMapLayer *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;

  TsgcMapPolyline *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);
  int iKm = (int)(sgcMapDistance(48.8566, 2.3522, 52.52, 13.405) / 1000);
  oMap->AddLabel(50.7, 8, "Paris to Berlin: " + IntToStr(iKm) + " km");
  oMap->SaveToPNG("europe.png", 1200, 800, false);
}

Leggi l'argomento della guida →

Il MapView headless genera la stessa mappa in un file PNG, su Windows o Linux.

using System;
using System.IO;
using esegece.sgcMaps;
using esegece.sgcMaps.Rendering;

// OpenStreetMap with cached tiles, three capitals, a geodesic flight line
// and a 300 km radius, fitted to the markers and saved as PNG (no window).
public static class EuropeMap
{
    public static void Render()
    {
        var oMap = new MapView();

        Layer oLayer = oMap.Layers.Add();
        oLayer.Name = "OpenStreetMap";
        oLayer.Provider = TileProvider.OpenStreetMap;
        MapProviders.ApplyProvider(oLayer);
        oLayer.CacheFolder = Path.Combine(AppContext.BaseDirectory, "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;

        Polyline oLine = oMap.AddPolyline();
        oLine.Geodesic = true;
        oLine.Dashed = true;
        oLine.Color = MapColors.Red;
        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);
        double vKm = MapGeometry.Distance(48.8566, 2.3522, 52.52, 13.405) / 1000;
        oMap.AddLabel(50.7, 8, $"Paris to Berlin: {vKm:F0} km");
        oMap.RenderToPng("europe.png", 1200, 800);
    }
}
dotnet add package esegece.sgcMaps.Rendering

Leggi l'argomento della guida →

Livelli WMS, shapefile e la mappa in WPF

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;

Leggi l'argomento WMS → Leggi l'argomento Shapefile →

I livelli e i marcatori di un TsgcWpfMap si dichiarano in XAML con il prefisso sgc. Il code-behind aggiunge una cache di tile, una linea e tre eventi.

<Window x:Class="MapQuickStartWpf.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:sgc="https://www.esegece.com/sgcui"
        Title="sgcMaps WPF Quick Start" Width="1000" Height="700">
  <sgc:TsgcWpfMap x:Name="MainMap" CenterLatitude="40.4168" CenterLongitude="-3.7038" Zoom="14">
    <sgc:TsgcWpfMap.Layers>
      <sgc:Layer Name="OpenStreetMap" Provider="OpenStreetMap" />
    </sgc:TsgcWpfMap.Layers>
    <sgc:TsgcWpfMap.Markers>
      <sgc:Marker Latitude="40.4168" Longitude="-3.7038" PopupText="Puerta del Sol"
                  TooltipText="Drag me" Draggable="True" Color="#FFE53935" />
    </sgc:TsgcWpfMap.Markers>
  </sgc:TsgcWpfMap>
</Window>
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}";
        }
    }
}
dotnet add package esegece.sgcMaps.Wpf

Leggi l'argomento della guida →

Esegui le demo di sgcMaps

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

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

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

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.

Scarica sgcUI_bin.zip →

Guida Getting Started

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.

Scarica la guida (PDF, in inglese) →

Dove è incluso sgcMaps

sgcMaps fa parte di sgcUI Enterprise ed è venduto anche separatamente. sgcMaps è incluso anche nel bundle All-Access.

sgcMaps come pacchetto singolo

€149 / sviluppatore, codice sorgente completo, 1 anno di aggiornamenti.

Acquista sgcMaps → Vedi i prezzi →

sgcUI Enterprise

Tutti i 17 prodotti sgcUI, da €699.

Vedi Enterprise →

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−✓

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.

DestinazioneComponentePiattaforme
Da Delphi 7 a 13, VCLTsgcVCLMap e il modelloWin32, Win64 da XE2 e ARM64EC in Delphi 13
Da Delphi XE6 a 13, FireMonkeyTsgcFMXMapWindows 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 bitIl core indipendente dal framework, nessun controllo mappaSorgenti di tile, servizi, formati di file e dati offline in applicazioni console e server
C++ Builder da 2007 a 13TsgcVCLMap, TsgcFMXMap da XE6 e il modelloSolo Windows: Win32, Win64 da XE3 e Win64x in C++ Builder 13, con header .hpp generati e librerie statiche
LazarusControllo mappa LCLSolo tile da disco, non può scaricare tile
.NET 8, 9 e 10SgcMapControl, TsgcWpfMap, TsgcAvaloniaMap, MapViewWinForms 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.

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 TileSourceType mtsWMS 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.

Guida di sgcMaps

3,000+Sviluppatori
20+Anni
761+Componenti
30+Integrazioni API
5Piattaforme
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.