Delphi, C++ Builder & .NET Onderdeel van sgcUI

sgcMaps, native kaarten voor Delphi, C++ Builder & .NET

Zet een echte kaart in je toepassing zonder browsercontrol en zonder één regel JavaScript. sgcMaps tekent raster- en vectortiles zelf, voegt lagen van WMS- en WMTS-servers toe, toont duizenden geclusterde markers, routes en zones, geocodeert adressen en blijft offline werken met lokale tiles en een offline router.

VCL, FireMonkey, Lazarus, WinForms, WPF, AvaloniaGeen browsercontrol, geen JavaScriptGratis .NET Community-editieInbegrepen in sgcUI Enterprise
TsgcVCLMap toont het centrum van Madrid uit vectortiles met rode en blauwe locatiemarkers

Alles wat een kaarttoepassing nodig heeft

Achttien functies, elk met de echte API en het helponderwerp erachter.

Tiles en kaartgegevens

De kaartcontrol tekent elke tile zelf, vanaf een tileserver, een WMS- of WMTS-service, een vectorbron of bestanden op schijf.

Een echte kaart in je formulier, zonder browser erin

Tiles en kaartgegevens

Een echte kaart in je formulier, zonder browser erin

De meeste kaartcomponenten verpakken een webview en een JavaScript-bibliotheek, waardoor je desktoptoepassing uiteindelijk een browser meelevert. sgcMaps niet. TsgcVCLMap en TsgcFMXMap downloaden, cachen en tekenen de tiles op hun eigen canvas, verwerken zoomen met het muiswiel en slepen om te pannen, en geven gewone Delphi-events. Je kaart is een native control zoals elke andere: hij dockt, volgt het thema van het formulier en debugt zoals de rest van je code. Er is geen extra proces om uit te rollen of te beveiligen, en de kaart gedraagt zich hetzelfde op elke machine waarop je toepassing draait.

  • De collectie Layers bevat een of meer TsgcMapLayer-items, elk met een eigen TileSourceType
  • TsgcFMXMap draait op Windows vanaf Delphi XE6, en op macOS, iOS en Android vanaf Delphi 10.4
  • Een Lazarus LCL-control toont tiles van schijf
  • In .NET delen SgcMapControl voor WinForms, TsgcWpfMap voor WPF, TsgcAvaloniaMap voor Avalonia 12 en de headless MapView één engine
  • Rechts naar links voor Arabisch en Hebreeuws: de zoomknoppen, laagwisselaar, kompas, schaalbalk en bronvermelding verhuizen naar de andere kant, terwijl de kaart zijn geografische oriëntatie behoudt
Het helponderwerp lezen
Kies een tileprovider met één eigenschap

Tiles en kaartgegevens

Kies een tileprovider met één eigenschap

Een basiskaart kiezen mag niet betekenen dat je de documentatie van een tileserver moet lezen. Stel Provider in op een laag en roep sgcMapApplyProvider aan: de laag krijgt het URL-sjabloon, het maximale zoomniveau en de bronvermelding van die provider. OpenStreetMap, OpenTopoMap, Esri World Imagery en Esri World Street werken zonder sleutel. MapTiler, Thunderforest en Stadia gebruiken je eigen API-sleutel. Je eigen tileserver is één URL-sjabloon verwijderd. Elke laag heeft zijn eigen provider, dus een satellietlaag en een straatlaag kunnen in dezelfde kaart zitten en de gebruiker schakelt er op de kaart zelf tussen.

  • Zonder sleutel: mtpOpenStreetMap, mtpOpenTopoMap, mtpEsriWorldImagery, mtpEsriWorldStreet
  • Met je sleutel: mtpMapTilerStreets, mtpMapTilerSatellite, mtpThunderforestCycle, mtpThunderforestTransport, mtpStadiaAlidadeSmooth
  • mtpCustom met URLTemplate leest elke {z}/{x}/{y}-server
  • De bronvermelding van de provider wordt voor je op de kaart getekend
  • ShowLayerSwitcher zet een laagknop op de kaart
Het helponderwerp lezen
Vectortiles die scherp blijven op elk formaat

Tiles en kaartgegevens

Vectortiles die scherp blijven op elk formaat

Rastertiles worden wazig als je ze schaalt, en elke stijlwijziging betekent nieuwe afbeeldingen van de server. Bij vectortiles ontvangt de control de geometrie en tekent hij wegen, water, gebouwen en labels zelf, zodat tekst scherp blijft op high-DPI-schermen en in geëxporteerde afbeeldingen. Wijs een laag naar een Mapbox Vector Tile-server en laat VectorStyleFile leeg om de ingebouwde stijl te gebruiken, of laad een MapLibre- of Mapbox GL-stijlbestand om bij je huisstijl te passen. Vectorlagen werken in de VCL- en de FireMonkey-control.

  • mtsVectorHTTP leest een vectortileserver, vanaf Delphi XE2
  • mtsVectorMBTiles leest een lokaal vector-MBTiles-bestand (offlinepakket)
  • mtsVectorPMTiles leest vectortiles uit een PMTiles-archief, een lokaal bestand of een URL (offlinepakket)
  • TsgcMapVectorStyle laadt een stijl met LoadFromFile of LoadFromJSON
  • Decoderen en tekenen zitten in TsgcMapTileSource_MVT, in gewone Delphi-code
Het helponderwerp lezen

Tiles en kaartgegevens

Lagen van je eigen WMS- en WMTS-servers

Gemeenten, nutsbedrijven en kaartinstanties publiceren landgebruik, kadaster en luchtfoto's als OGC-webservices in plaats van als z/x/y-tiles. Stel TileSourceType in op mtsWMS of mtsWMTS en de laag vraagt haar afbeeldingen op bij de service, als transparante overlay op een basiskaart of als de basiskaart zelf. De capabilitieslezers tonen de lagen die een service aanbiedt en stellen de laag voor je in, zodat je gebruikers een laag kiezen op titel in plaats van aanvraagparameters te typen.

  • mtsWMS verstuurt WMS 1.3.0- of 1.1.1-GetMap-verzoeken, met Layers, Styles, ImageFormat en Transparent in de WMS-opties van de laag
  • mtsWMTS leest KVP- en REST-services via de WMTS-opties van de laag
  • TsgcMapWMSCapabilities en TsgcMapWMTSCapabilities laden het capabilitiesdocument, en ApplyToLayer stelt er een laag mee in
  • Een exceptiedocument van de server bereikt OnTileError met de tekst ervan
  • In .NET TileSourceType.Wms en TileSourceType.Wmts, met WmsCapabilities en WmtsCapabilities

In elke editie, ook in de gratis Community-editie, vanaf Delphi 2009. De kaart blijft in Web Mercator: WMS-lagen worden opgevraagd in EPSG:3857, WMTS-lagen hebben een Web Mercator tile matrix set nodig, zoals GoogleMapsCompatible, en GetFeatureInfo wordt niet ondersteund.

Het helponderwerp lezen

Tiles en kaartgegevens Alleen geregistreerd

Blijf werken als het netwerk wegvalt

Een monteur in een kelder, een schip op zee of een fabrieksnetwerk kan niet afhankelijk zijn van een tileserver. sgcMaps leest tiles van schijf precies zoals van het web. Geef een laag een CacheFolder en elke tile die hij ophaalt, wordt bewaard voor de volgende keer. Voor een volledig offlinepakket haalt TsgcMapTileDownloader vooraf een gebied en een zoombereik op in een map of een MBTiles-bestand.

  • mtsFolder leest een z/x/y-map met PNG- of JPEG-tiles
  • mtsMBTiles leest een raster-MBTiles-bestand, vanaf Delphi XE7 (FireDAC SQLite)
  • CountTiles geeft de grootte van een download voordat je begint; DelayMS en OnProgress houden hem beleefd en zichtbaar
  • Bulkdownloads moeten de voorwaarden van de provider respecteren: OpenStreetMap-tiles zijn alleen voor interactief bekijken

Community leest z/x/y-tilemappen en houdt de CacheFolder per laag bij. De tiledownloader en de MBTiles- en PMTiles-bestanden horen bij het offlinepakket.

Het helponderwerp lezen

Tiles en kaartgegevens Alleen geregistreerd

Een hele regio in één PMTiles-bestand

Een PMTiles-archief bevat een complete tilepiramide in één bestand dat je naar een laptop kopieert of op een willekeurige statische webserver zet, zonder tileserver die draaiende moet blijven. sgcMaps leest het archief uit een lokaal bestand, of rechtstreeks van een webserver met HTTP range-verzoeken, en houdt de mappen die het heeft gelezen in een cache, zodat alleen de zichtbare tiles over het netwerk gaan.

  • mtsPMTiles voor rasterarchieven met PNG en JPEG, mtsVectorPMTiles voor Mapbox Vector Tile-archieven
  • TileSourcePath accepteert een bestandsnaam of een http- of https-URL
  • TsgcMapTileSource_PMTiles geeft het zoombereik, de grenzen, het midden en de metadata van het archief
  • PMTiles versie 3; archieven met WebP-tiles worden gemeld als niet ondersteund
  • Vanaf Delphi XE2, en in het geregistreerde pakket esegece.sgcMaps voor .NET

PMTiles hoort bij het offlinepakket, net als MBTiles, en zit dus in de geregistreerde editie en niet in de gratis Community-editie.

Het helponderwerp lezen

Markers, vormen en geometrie

Zet je eigen gegevens op de kaart, houd ze leesbaar op elk zoomniveau en reken ermee.

Markers, vormen en geometrie

Duizenden markers, nog steeds leesbaar

Een wagenpark, een winkelnetwerk of een sensorraster verandert snel in een wolk van overlappende spelden. Zet clustering aan en markers dichtbij elkaar smelten samen tot één genummerde bel die weer uiteenvalt als de gebruiker inzoomt, opnieuw berekend op elk zoomniveau. Elke marker heeft zijn eigen popup, tooltip en pictogram, en klikken, slepen en clusterklikken komen binnen als events, zodat de kaart onderdeel van je werkproces wordt in plaats van een plaatje. Markers kun je in een lus uit je gegevens toevoegen of importeren uit GeoJSON-, GPX- en KML-bestanden, en ClearMarkers zet ze met één aanroep terug.

  • MarkerOptions.Clustering met GridSize, MinClusterSize en ZoomOnClick
  • PopupText, TooltipText en IconBitmap per marker
  • De events OnMarkerClick, OnClusterClick en OnMarkerDragEnd
  • BeginUpdate en EndUpdate rond bulklaadacties; FitToMarkers toont ze allemaal
  • MarkerAtScreen en ClusterAtScreen doen een hittest op elke pixel
Het helponderwerp lezen
Routes, zones en heatmaps op één kaart

Markers, vormen en geometrie

Routes, zones en heatmaps op één kaart

De meeste kaartschermen hebben meer nodig dan spelden: de geplande bezorgroute, het gebied dat een depot bedient, een straal rond een klant, waar de bestellingen vandaan komen. sgcMaps tekent ze allemaal als items van het kaartmodel, in dezelfde coördinaten als je markers. Vormen kunnen bewerkbaar worden gemaakt, zodat een gebruiker de hoekpunten van een zone met de muis kan slepen en je code hoort wanneer de bewerking eindigt. Labels plaatsen tekst op een coördinaat met een eigen lettertype, kleur en achtergrond, zodat zonenamen en routenummers aan de kaart gekoppeld blijven.

  • AddPolyline met Dashed- en Geodesic-lijnen
  • AddPolygon met AddHole, plus AddRectangle, AddCircle (RadiusMeters) en AddLabel
  • Editable-vormen melden wijzigingen via OnShapeEdited
  • TsgcMapHeatmap neemt gewogen punten met AddPoint en een MaxIntensity
Het helponderwerp lezen

Markers, vormen en geometrie

De geowiskunde is al geschreven

Zit dit voertuig in de zone? Hoe ver is het dichtstbijzijnde depot? Welk punt van de route ligt het dichtst bij de klant? Deze vragen komen in elke kaarttoepassing voor en gaan makkelijk fout bij de polen of over lange afstanden. De geometrie-unit beantwoordt ze op de WGS84-bol met gewone functies die je ook vanuit een service zonder kaart kunt aanroepen. De functies nemen gewone TsgcMapCoord-records, en sgcMapLatLonToPixel en sgcMapPixelToLatLon rekenen om tussen scherm- en wereldcoördinaten als je eigen overlays tekent.

  • sgcMapDistance in meters, sgcMapInitialBearing en sgcMapDestinationPoint
  • sgcMapPointInPolygon en sgcMapPointInPolygonWithHoles voor geofences
  • sgcMapNearestPointOnPolyline snapt een positie naar een route
  • sgcMapGeodesicInterpolate en sgcMapSimplify voor vloeiende, lichte lijnen
Het helponderwerp lezen

Zoeken en routeren

Vind adressen en plan routes met online providers, of volledig offline zonder API-sleutel.

Zoeken en routeren

Geocodering, routebeschrijvingen en plaatsen achter één API

Elke geocodeer- en routeringsprovider heeft zijn eigen REST-formaat, sleutels en eigenaardigheden. De servicecomponenten verbergen die: je kiest een provider, stelt je sleutel in als die nodig is en roept dezelfde methoden aan, synchroon of async. Van provider wisselen is een eigenschap wijzigen, geen herschrijving, en resultaten komen terug als Delphi-objecten die klaar zijn om op de kaart te zetten. Elke component deelt de basisklasse TsgcMapService, dus ApiKey, UserAgent en LastError werken voor elke provider hetzelfde.

  • TsgcMapGeocoder: Nominatim, Google, HERE, Azure Maps, Mapbox, OpenRouteService en Geoapify
  • TsgcMapDirections: OSRM, OpenRouteService, Google Routes, HERE, Azure Maps, Mapbox en Geoapify
  • TsgcMapPlaces voor adresautocomplete, TsgcMapElevation en TsgcMapTimeZone
  • GeocodeAsync, GetRouteAsync en SuggestAsync houden de UI responsief; fouten komen binnen in OnError
Het helponderwerp lezen

Zoeken en routeren Alleen geregistreerd

Routes en adressen zoeken zonder internet en zonder sleutel

Online routering faalt precies waar veldapps worden gebruikt, en elk verzoek kan geld kosten. De offline router berekent auto-, fiets- en wandelroutes op het apparaat uit een routegraaf die één keer is gebouwd uit een OpenStreetMap-extract. De offline geocoder zoekt plaatsnamen en geocodeert een klik terug uit een GeoNames-index in SQLite. Beide draaien zonder netwerk, zonder account en zonder kosten per verzoek. De router en de geocoder zijn niet-visuele componenten, dus een Windows-service of een consoletool kan route- en adresverzoeken beantwoorden zonder kaart op het scherm.

  • TsgcMapOfflineRouter beantwoordt GetRoute uit een graaf die TsgcMapRouteGraphBuilder uit .osm.pbf heeft gebouwd
  • sgcMapAddRouteToPolylines tekent het resultaat op de kaart
  • TsgcMapOfflineGeocoder met ReverseGeocode, over een index van TsgcMapGeoIndexBuilder
  • Opdrachtregelbuilders voor de graaf en de index staan in de map Tools

Community gebruikt de onlineservices; de offline router en geocoder horen bij het offlinepakket.

Het helponderwerp lezen

Bestanden, renderen en mobiel

Wissel geodata uit met andere tools, render kaarten waar geen scherm is en neem de kaart mee naar een telefoon, een WPF-venster of een Avalonia-venster.

Bestanden, renderen en mobiel

Open de bestanden die je gebruikers al hebben

Klanten sturen tracks van een gps-horloge, zones getekend in een GIS-tool of een KML uit een ander systeem. sgcMaps leest en schrijft GeoJSON, GPX en KML rechtstreeks in het kaartmodel, dus een import is één aanroep en een export een andere. GPX-tracks komen met hun statistieken en kunnen op hoogte worden gekleurd, en een streamende lezer loopt door grote OpenStreetMap-extracten zonder ze in het geheugen te laden. Exports gebruiken dezelfde functies omgekeerd, zodat zones die een gebruiker op de kaart tekende, als GeoJSON of KML kunnen worden opgeslagen en in andere GIS-tools geopend.

  • sgcMapLoadGeoJSONFile en sgcMapSaveGeoJSONFile, vanaf Delphi XE6
  • TsgcMapGPX met TrackStats (TotalAscent, TotalDescent) en ColorByElevation
  • sgcMapLoadKMLFile en sgcMapSaveKMLFile
  • De OpenStreetMap-lezer streamt .osm.pbf- en XML-bestanden via events
  • sgcMapGeoJSONAsText geeft de GeoJSON van de kaart als string terug
Het helponderwerp lezen

Bestanden, renderen en mobiel

Shapefiles en WKT uit elk GIS

Openbare geodata worden nog steeds als Esri-shapefiles geleverd, en ruimtelijke databases wisselen geometrie uit als Well Known Text. TsgcMapShapefile importeert de punten, lijnen en polygonen van een shapefile samen met de attributentabel, zodat elke marker het record kan tonen waaruit hij komt. WKT en de door PostGIS geschreven EWKT worden gelezen en geschreven, wat de eenvoudigste manier is om een zone tussen de kaart en een geometriekolom van je database te verplaatsen.

  • LoadFromFile leest de .shp met de bijbehorende .shx-, .dbf-, .prj- en .cpg-bestanden; OnItem ontvangt elke attributenrij en LabelField bepaalt de popuptekst van de punten
  • Een .prj in graden WGS84, ETRS89 of NAD83, of in Web Mercator, wordt direct geladen, en een bestand zonder .prj wordt als WGS84 gelezen
  • Elke andere projectie geeft een duidelijke foutmelding, tenzij je OnTransform-handler de coördinaten converteert
  • sgcMapLoadWKT en TsgcMapWKT lezen POINT, LINESTRING, POLYGON, hun MULTI-vormen en GEOMETRYCOLLECTION, in graden of in Web Mercator-meters, en AsText schrijft de kaart terug
  • In elke editie vanaf Delphi 7; in .NET ShapefileFormat en WktFormat met een Transform-callback
Het helponderwerp lezen
Render kaartafbeeldingen op een server

Bestanden, renderen en mobiel

Render kaartafbeeldingen op een server

Vrachtbrieven met de route, een dagrapport met de incidenten van vandaag, een miniatuur voor een webpagina: veel kaarten worden nooit in een venster getoond. Dezelfde control rendert naar een PNG of een bitmap zonder zichtbaar te zijn, vanuit een consoletoepassing of een Windows-service. Je kunt controleren of elke tile is aangekomen voordat je de afbeelding verstuurt, zodat een trage tileserver nooit als grijs vierkant in een klantdocument belandt. Rendering op de server gebruikt dezelfde lagen, markers en vormen als de interactieve control, dus een kaart die op het scherm is ontworpen, ziet er in de PNG hetzelfde uit.

  • SaveToPNG en SaveToPNGFile, vanaf Delphi 2009
  • RenderToBitmap en SaveToBMPFile voor je eigen pipeline
  • LastRenderMissingTiles meldt tiles die niet beschikbaar waren
  • In .NET draait MapView.RenderToPng ook op Linux
Het helponderwerp lezen

Bestanden, renderen en mobiel

Dezelfde kaart op desktop en mobiel

Een planner werkt op een Windows-desktop en de chauffeur volgt het plan op een telefoon. TsgcFMXMap brengt hetzelfde model, dezelfde lagen, markers, vormen en services naar FireMonkey op Windows, macOS, iOS en Android, zodat de code die je voor de VCL-kaart schreef, overgaat. TsgcMapLocation leest de positie van het apparaat, zodat de kaart kan centreren op de gebruiker en hem kan volgen. De tilecache per laag werkt ook op mobiel, dus een telefoon blijft de gebieden tonen die hij al heeft geladen.

  • TsgcFMXMap op Windows vanaf Delphi XE6, en op macOS, iOS en Android vanaf Delphi 10.4 (macOS ARM vanaf Delphi 11), met dezelfde collecties als TsgcVCLMap
  • TsgcMapLocation op Windows, Android, iOS en macOS
  • De FMX-demo toont tiles, markers en locatie in één formulier, en de FMX Mobile-demo is ingericht voor telefoons en tablets
  • De frameworkneutrale kern compileert ook voor Linux 64 bit vanaf Delphi 10.4, voor console- en servertoepassingen die de tilebronnen, de bestandsformaten en de offlinegegevens gebruiken
  • Drie runtimepakketten, sgcMaps (de kern), sgcMapsVCL en sgcMapsFMX, zodat een FireMonkey-toepassing de VCL-pakketten niet meer laadt
  • Minimale Delphi-versies per functie staan in het installatieonderwerp
Het helponderwerp lezen

Bestanden, renderen en mobiel

De kaart in WPF en Avalonia, gedeclareerd in XAML

TsgcWpfMap en TsgcAvaloniaMap brengen de .NET-kaartengine naar WPF en naar Avalonia 12 met de functies van de WinForms-control: pannen en zoomen met muis, aanraking en toetsenbord, lagen, markers, vormen, afdrukken, PDF-export en UI Automation. Lagen en markers worden in XAML gedeclareerd onder het voorvoegsel sgc, en een collectie van je viewmodel wordt markers via ItemsSource, zodat een winkel toevoegen aan de collectie hem op de kaart zet en het slepen van zijn marker de nieuwe positie terugschrijft.

  • LatitudeMember, LongitudeMember, TooltipMember, PopupMember, ColorMember en DraggableMember koppelen je eigenschappen aan markers
  • SelectedItem, Zoom, Bearing, CenterLatitude en CenterLongitude binden in twee richtingen
  • Kleuren worden in XAML geschreven als tekst #AARRGGBB of #RRGGBB
  • NuGet esegece.sgcMaps.Wpf (net8.0-windows tot net10.0-windows) en esegece.sgcMaps.Avalonia (net8.0 tot net10.0), beide met een gratis Community-pakket
  • De projecten WpfDemo en AvaloniaDemo tonen hetzelfde venster in beide frameworks
Het helponderwerp lezen

Toegankelijkheid

UI Automation voor schermlezers en het toetsenbord, zonder configuratie.

Toegankelijkheid

Een kaart die het toetsenbord kan bereiken en UI Automation aanbiedt

sgcMaps biedt de kaart aan Microsoft UI Automation aan met een tekstalternatief, de markeringen als lijst en de lagen als lijst, waarbij elke laag meldt of hij zichtbaar is. De markeringen zijn met het toetsenbord te bereiken.

  • Pijltoetsen verschuiven de kaart, de plus- en mintoetsen zoomen, en Home keert terug naar de beginweergave
  • Page Up en Page Down gaan naar de vorige of volgende markering, Enter activeert de markering met focus en Esc wist de markeringsfocus
  • De kaart toont een zichtbare focusring zolang hij de focus heeft
  • In .NET stellen de WinForms-, WPF- en Avalonia-kaartcontrols dezelfde UI Automation-structuur en hetzelfde toetsenbord beschikbaar

Toegankelijkheid staat standaard aan in elke editie, ook in de gratis Community-editie, op VCL in elke Delphi- en C++Builder-versie van Delphi 7 tot en met Delphi 13, op FireMonkey op Windows, en op WinForms, WPF en Avalonia. In Delphi en C++Builder stellen AccessibleName en AccessibleDescription de naam en de beschrijving in die aan UI Automation worden aangeboden, en in .NET doen de standaard toegankelijke naam en helptekst van elk framework hetzelfde. Zie de toegankelijkheidsrapporten, die de nieuwe WPF- en Avalonia-kaartcontrols nog niet dekken. De kaartafbeelding wordt alleen beschreven met het midden en de zoom, en de kaartrenderer volgt Windows hoog contrast niet, omdat de kaartafbeelding tegelbeeld van de provider is.

Het helponderwerp lezen

Zie sgcMaps in actie

sgcMaps in de sgcUI suite-demo's: complete applicaties die offline draaien met ingebouwde gesimuleerde gegevens.

Wie bouwt er met sgcMaps

Buitendienst en logistiek

Monteurs en chauffeurs hebben de kaart nodig waar de dekking slecht is. Bereid de tiles van een regio vooraf voor, bereken autoroutes op het apparaat met de offline router en vind adressen met de offline geocoder. Terug op kantoor tekent dezelfde code de geplande routes en bezorgzones en rendert een PNG van elke route voor de vrachtbrief.

  • Werkt offline
  • Offline routering
  • Routes en zones
  • Kaartafbeeldingen
Start de OfflineServices-demo

Assets en wagenpark volgen

Een controlekamer houdt honderden voertuigen, machines of sensoren tegelijk in de gaten. Clustering houdt de kaart leesbaar op landniveau en splitst op straatniveau uit in losse spelden. Een heatmap toont waar incidenten zich concentreren, geofencecontroles met punt-in-polygoon geven alarmen, en klikevents op markers openen het record van de asset in je eigen formulieren.

  • Clustering
  • Heatmaps
  • Geometrie
  • Events
Start de MapFeatures-demo

Lichte GIS- en outdoor-apps

Planningstools, sportapps en opmetingssoftware leven van GPX-tracks, KML-lagen en GeoJSON-zones. sgcMaps importeert en exporteert alle drie, toont trackstatistieken en hoogtekleuren en zet het resultaat op een topografische basiskaart. De FireMonkey-control brengt dezelfde functies naar een tablet of telefoon in het veld. Trackstatistieken geven in één oogopslag de totale stijging en daling van een route.

  • GeoJSON, GPX, KML en shapefiles
  • Topografische tiles
  • FireMonkey
Start de OfflineMap-demo

Een kaart in een paar regels

Dezelfde API in Delphi, C++ Builder en C#: OpenStreetMap-tiles, drie markers, een geodetische lijn en een straal, aangepast aan de markers en opgeslagen als PNG.

Een VCL-kaart in code gebouwd: een gecachete OpenStreetMap-laag, markers, een geodetische lijn en een cirkel, daarna een PNG van het resultaat.

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;

Het helponderwerp lezen →

Dezelfde kaart in C++ Builder met de gegenereerde sgcMaps-headers.

#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);
}

Het helponderwerp lezen →

De headless MapView rendert dezelfde kaart naar een PNG-bestand, op Windows of 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

Het helponderwerp lezen →

WMS-lagen, shapefiles en de kaart in WPF

Een WMS-overlay en een shapefile-import met de attributen in Delphi, en een WPF-venster met de kaart, een laag en een marker gedeclareerd in XAML.

Een transparante WMS-overlay met een eigen tilecache, en een shapefile waarvan de parken groen worden gevuld op basis van de attributentabel. Beide werken in elke editie.

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;

Het WMS-onderwerp lezen → Het shapefile-onderwerp lezen →

De lagen en markers van een TsgcWpfMap worden in XAML gedeclareerd onder het voorvoegsel sgc. De code-behind voegt een tilecache, een lijn en drie events toe.

<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

Het helponderwerp lezen →

Probeer de sgcMaps-demo's uit

Bij sgcMaps worden elf Delphi-demo's en acht .NET-demo's geleverd. Er zijn geen C++ Builder-demoprojecten.

Alleen geregistreerd OfflineMap

Map-, MBTiles- en online tiles, markers en vormen, plus import van GeoJSON, GPX en KML.

MapFeatures

Providers en API-sleutels, markerclustering, vormen bewerken, heatmaps en afbeeldingsexport.

Services

Plaatsen zoeken, geocodering, routebeschrijvingen, hoogte, tijdzones en apparaatlocatie met de onlineproviders. Delphi XE8 en later.

Alleen geregistreerd OfflineServices

Bouw een GeoNames-index en een OpenStreetMap-routegraaf, zoek daarna plaatsen en routeer met auto, fiets of te voet zonder netwerk.

StaticRender

StaticRender

Een consoleprogramma dat een kaart zonder venster naar een PNG- of BMP-bestand rendert.

FMX

De FireMonkey-kaart met tiles, markers en apparaatlocatie, voor Windows, macOS, iOS en Android. Delphi XE6 en later.

VectorTiles

VectorTiles

Een vectortileserver getekend met de ingebouwde stijl of een eigen stijlbestand, met scherpe labels op elk zoomniveau.

FMXMobile

De FireMonkey-kaart gemaakt voor telefoons en tablets: pannen met één vinger, zoomen met knijpen, grote zoomknoppen, je positie met een nauwkeurigheidscirkel en een lijst met plaatsen. Delphi 10.4 en later.

OGCServices

Laadt een WMS- of WMTS-capabilitiesdocument uit een URL of een bestand, toont de lagen en voegt de gekozen laag toe als overlay op OpenStreetMap, met een schuifregelaar voor de dekking. Delphi 2009 en later.

Alleen geregistreerd PMTiles

Opent een raster- of vector-PMTiles-archief uit een bestand of een URL, toont de header en de metadata en voegt het toe als laag, gecentreerd op het archief. Delphi XE2 en later.

ShapefileWKT

Importeert een shapefile met de attributentabel, toont het record van een aangeklikte marker en importeert en exporteert WKT.

WinFormsDemo

De .NET-SgcMapControl in een WinForms-venster met providers, markers en vormen.

WpfDemo

De WPF-kaart gedeclareerd in XAML: basislagen en markers in markup, winkels gekoppeld als markers met ItemsSource, schuifregelaars voor zoom en rotatie, afdrukken en PDF-export.

AvaloniaDemo

Hetzelfde venster met de Avalonia 12-kaartcontrol en gecompileerde bindings.

OgcServicesDemo

De WinForms-kaartcontrol met een OpenStreetMap-basislaag en één overlay van een WMS- of WMTS-service: laadt een capabilitiesdocument uit een URL of een bestand, toont de lagen, voegt de gekozen laag toe met een schuifregelaar voor de dekking en toont tilefouten.

Alleen geregistreerd PMTilesDemo

De WinForms-kaartcontrol met een laag uit een raster- of vector-PMTiles-archief, geopend uit een bestand of een URL, met de header en metadata en de kaart gecentreerd op het archief.

ShapefileWktDemo

De WinForms-kaartcontrol importeert een shapefile met de attributentabel en het record van een aangeklikte marker, plus WKT-import en -export van de overlays.

Alleen geregistreerd OfflineDemo

Het .NET-offlinepakket: offline tiles, routering en geocodering uit lokale gegevensbestanden.

ConsoleRenderDemo

ConsoleRenderDemo

Een .NET-console die een kaart naar PNG rendert met de headless MapView, op Windows of Linux.

Gecompileerde demo's

Direct uitvoerbare programma's van elk sgcUI-product, zonder installatie.

sgcUI_bin.zip downloaden →

Getting Started-gids

Vijf QuickStart-demo's voor Delphi (VCL) staan in Demos\Maps\00.QuickStart. De PDF-gids (Engels) legt ze stap voor stap uit: een eerste kaart met markers, markers en labels die in code worden toegevoegd, vormen, de kaartevents en een winkelzoeker.

Download de gids (PDF, Engels) →

Waar sgcMaps in zit

sgcMaps is onderdeel van sgcUI Enterprise en wordt ook los verkocht. sgcMaps zit ook in de All-Access-bundel.

sgcMaps los pakket

€149 / ontwikkelaar, volledige broncode, 1 jaar updates.

sgcMaps kopen → Prijzen bekijken →

sgcUI Enterprise

Alle 17 sgcUI-producten, vanaf €699.

Enterprise bekijken →

De gratis .NET Community-editie (NuGet esegece.sgcMaps.Community, esegece.sgcMaps.Rendering.Community, esegece.sgcMaps.WinForms.Community, esegece.sgcMaps.Wpf.Community, esegece.sgcMaps.Avalonia.Community) heeft elke functie behalve het offlinepakket. Het pakket esegece.sgcMaps.Offline is alleen geregistreerd. Een project verwijst naar de Community-pakketten of naar de geregistreerde pakketten, nooit naar beide.

FunctieCommunity (gratis)Geregistreerd
VCL-, FireMonkey-, WinForms-, WPF- en Avalonia-kaartcontrols✓✓
Tileproviders, HTTP- en vectortileservers✓✓
WMS- en WMTS-lagen✓✓
z/x/y-tilemappen en de tilecache per laag✓✓
Markers, clustering, vormen, labels en heatmaps✓✓
Geometriefuncties✓✓
Import en export van GeoJSON, GPX en KML✓✓
Shapefile-import, WKT-import en -export✓✓
Online geocodering, routebeschrijvingen, plaatsen, hoogte en tijdzones✓✓
Statisch renderen naar PNG✓✓
Tiledownloader voor offlinepakketten−✓
MBTiles- en PMTiles-bestanden (raster en vector)−✓
Offline router en offline geocoder−✓

Ondersteunde frameworks en platformen

Componenten in sgcMaps

TsgcVCLMap en TsgcFMXMap

De kaartcontrols voor VCL en FireMonkey, plus een Lazarus LCL-control die tiles van schijf leest.

Modelcollecties

Layers, Markers, Polylines, Polygons, Rectangles, Circles, Labels en Heatmaps, gedeeld door elk framework.

Onlineservices

TsgcMapGeocoder, TsgcMapDirections, TsgcMapPlaces, TsgcMapElevation and TsgcMapTimeZone.

Offlinetools

TsgcMapRouteCalculator, TsgcMapOfflineRouter, TsgcMapOfflineGeocoder, TsgcMapGeoIndexBuilder and TsgcMapTileDownloader.

GIS-formaten en OGC-services

TsgcMapShapefile, TsgcMapWKT, TsgcMapWMSCapabilities, TsgcMapWMTSCapabilities en TsgcMapTileSource_PMTiles.

TsgcMapLocation en geometriehulpen

Apparaatlocatie, en sgcMapDistance, richting, bestemmingspunt, geodetische interpolatie, punt in polygoon en lijnvereenvoudiging.

.NET-kaarten

SgcMapControl voor WinForms, TsgcWpfMap voor WPF, TsgcAvaloniaMap voor Avalonia 12 en MapView, de headless engine die naar PNG rendert, ook op Linux.

DoelComponentPlatformen
Delphi 7 tot 13, VCLTsgcVCLMap en het modelWin32, Win64 vanaf XE2 en ARM64EC in Delphi 13
Delphi XE6 tot 13, FireMonkeyTsgcFMXMapWindows vanaf XE6; macOS, iOS en Android vanaf Delphi 10.4 (macOS ARM vanaf Delphi 11); apparaatlocatie op Windows, Android, iOS en macOS
Delphi 10.4 tot 13, Linux 64 bitDe frameworkneutrale kern, zonder kaartcontrolTilebronnen, services, bestandsformaten en offlinegegevens in console- en servertoepassingen
C++ Builder 2007 tot 13TsgcVCLMap, TsgcFMXMap vanaf XE6 en het modelAlleen Windows: Win32, Win64 vanaf XE3 en Win64x in C++ Builder 13, met gegenereerde .hpp-headers en statische bibliotheken
LazarusLCL-kaartcontrolAlleen tiles van schijf, het kan geen tiles downloaden
.NET 8, 9 en 10SgcMapControl, TsgcWpfMap, TsgcAvaloniaMap, MapViewWinForms en WPF (net8.0-windows, net9.0-windows, net10.0-windows), Avalonia 12 (net8.0, net9.0, net10.0), headless PNG op Windows en Linux

Delphi-pakketten: sgcMaps bevat de frameworkneutrale kern, sgcMapsVCL de VCL-kaart en sgcMapsFMX de FireMonkey-kaart, met de designtimepakketten dclsgcMaps en dclsgcMapsFMX. Een project dat met runtimepakketten is gebouwd en sgcMaps vermeldt, voegt sgcMapsVCL of sgcMapsFMX toe. Zie Pakketten en Platformen.

Veelgestelde vragen

Nee. De tiles, markers en vormen worden native door de control getekend, dus er is geen webview, geen JavaScript-bibliotheek en geen browserruntime om uit te rollen.

Niet voor OpenStreetMap, OpenTopoMap en de Esri-tiles, en niet voor de offline router en geocoder. MapTiler-, Thunderforest- en Stadia-tiles en de commerciële geocodeer- en routeringsproviders gebruiken je eigen sleutel. Elke provider heeft zijn eigen gebruiksvoorwaarden, die je toepassing moet respecteren.

Ja. Tiles kunnen uit z/x/y-mappen, een cache per laag, MBTiles-bestanden of PMTiles-archieven komen, routes van TsgcMapOfflineRouter en adreszoeken van TsgcMapOfflineGeocoder. MBTiles, PMTiles, de tiledownloader en de offline router en geocoder maken deel uit van het offlinepakket van de Registered-editie.

GeoJSON, GPX, KML en WKT met EWKT, voor import en export, en Esri-shapefiles met hun attributen voor import, met GPX-trackstatistieken en hoogtekleuren. Een streamingreader verwerkt ook OpenStreetMap .osm.pbf- en XML-bestanden, waarmee de offline routegraaf wordt gebouwd. Zie Bestandsformaten, Shapefile en WKT.

Het model, de VCL-control, shapefiles en WKT werken vanaf Delphi 7 en C++ Builder 2007. Sommige functies hebben een hoger minimum: PNG-uitvoer, tileservers, WMS en WMTS vanaf Delphi 2009, vectortiles, PMTiles en de offline router vanaf XE2, FireMonkey op Windows en GeoJSON vanaf XE6, MBTiles en de offline geocoder vanaf XE7, onlineservices vanaf XE8. FireMonkey op macOS, iOS en Android, en de kernunits op Linux 64 bit, vereisen Delphi 10.4 of nieuwer.

Ja. Een laag met TileSourceType mtsWMS of mtsWMTS vraagt haar afbeeldingen op bij een WMS 1.1.1- of 1.3.0-service, of bij een WMTS-service met KVP- of REST-codering, en de capabilitieslezers stellen de laag in op basis van de servicebeschrijving. De kaart is Web Mercator, dus WMS-lagen worden opgevraagd in EPSG:3857 en WMTS-services hebben een Web Mercator tile matrix set nodig. WMS en WMTS zitten in elke editie, ook in Community. Zie WMS en WMTS.

Ja. TsgcWpfMap (NuGet esegece.sgcMaps.Wpf) en TsgcAvaloniaMap (esegece.sgcMaps.Avalonia, Avalonia 12) hosten dezelfde engine als de WinForms-SgcMapControl. Lagen en markers kunnen in XAML worden gedeclareerd, markers kunnen met ItemsSource aan een collectie worden gebonden, en de view kan in twee richtingen worden gebonden. Beide zitten ook in de gratis Community-editie. Zie Snelstart WPF en Snelstart Avalonia.

De demoprojecten zijn alleen voor Delphi, maar de componenten installeren in C++ Builder 2007 tot 13 en werken hetzelfde. Het tabblad C++ Builder in de codesectie hierboven toont dezelfde kaart gebouwd met de gegenereerde headers.

Ja. De Community-editie is gratis voor particulieren en organisaties met minder dan EUR 1M brutojaaromzet en niet meer dan 5 ontwikkelaars. Ze heeft elke functie behalve het offlinepakket. Op .NET zijn de pakketten esegece.sgcMaps.Community, esegece.sgcMaps.Rendering.Community, esegece.sgcMaps.WinForms.Community, esegece.sgcMaps.Wpf.Community en esegece.sgcMaps.Avalonia.Community. WMS, WMTS, shapefiles, WKT en de WPF- en Avalonia-controls zitten ook in Community. Grotere organisaties hebben een geregistreerde licentie nodig.

sgcMaps help

3,000+Ontwikkelaars
20+Jaar
761+Componenten
30+API-integraties
5Platformen
Niet-goed-geld-terug-garantie van 30 dagenNiet tevreden? Vraag binnen 30 dagen na aankoop een volledige terugbetaling aan. Bekijk het terugbetalingsbeleid

Probeer sgcMaps vandaag

De sgcUI-proefversie bevat sgcMaps met het offlinepakket en alle andere sgcUI-producten. De .NET Community-editie is gratis op NuGet.