Delphi, C++ Builder y .NET Parte de sgcUI

sgcMaps, mapas nativos para Delphi, C++ Builder y .NET

Pon un mapa de verdad en tu aplicación sin un control de navegador ni una línea de JavaScript. sgcMaps dibuja él mismo teselas raster y vectoriales, añade capas de servidores WMS y WMTS, muestra miles de marcadores agrupados, rutas y zonas, geocodifica direcciones y sigue funcionando sin conexión con teselas locales y un enrutador sin conexión.

VCL, FireMonkey, Lazarus, WinForms, WPF, AvaloniaSin control de navegador, sin JavaScriptEdición .NET Community gratuitaIncluido en sgcUI Enterprise
TsgcVCLMap mostrando el centro de Madrid con teselas vectoriales y marcadores de ubicación rojos y azules

Todo lo que necesita una aplicación de mapas

Dieciocho funciones, cada una con la API real y el tema de ayuda que la respalda.

Teselas y datos del mapa

El control del mapa dibuja cada tesela él mismo, desde un servidor de teselas, un servicio WMS o WMTS, una fuente vectorial o archivos en disco.

Un mapa de verdad en tu formulario, sin navegador dentro

Teselas y datos del mapa

Un mapa de verdad en tu formulario, sin navegador dentro

La mayoría de los componentes de mapas envuelven una vista web y una biblioteca JavaScript, así que tu aplicación de escritorio acaba incluyendo un navegador. sgcMaps no. TsgcVCLMap y TsgcFMXMap descargan, guardan en caché y dibujan las teselas en su propio lienzo, gestionan el zoom con la rueda del ratón y el arrastre para desplazarse, y lanzan eventos normales de Delphi. Tu mapa es un control nativo como cualquier otro: se acopla, usa el tema del formulario y se depura como el resto de tu código. No hay ningún proceso adicional que desplegar ni proteger, y el mapa se comporta igual en cada máquina donde se ejecute tu aplicación.

  • La colección Layers contiene uno o más elementos TsgcMapLayer, cada uno con su propio TileSourceType
  • TsgcFMXMap funciona en Windows desde Delphi XE6, y en macOS, iOS y Android desde Delphi 10.4
  • Un control LCL de Lazarus muestra teselas desde disco
  • En .NET, SgcMapControl para WinForms, TsgcWpfMap para WPF, TsgcAvaloniaMap para Avalonia 12 y el MapView sin ventana comparten un mismo motor
  • De derecha a izquierda para árabe y hebreo: los botones de zoom, el selector de capas, la brújula, la barra de escala y la atribución pasan al lado opuesto, mientras que el mapa conserva su orientación geográfica
Leer el tema de la ayuda
Elige un proveedor de teselas con una propiedad

Teselas y datos del mapa

Elige un proveedor de teselas con una propiedad

Elegir un mapa base no debería implicar leer la documentación de un servidor de teselas. Define Provider en una capa y llama a sgcMapApplyProvider: la capa recibe la plantilla de URL, el zoom máximo y el texto de atribución de ese proveedor. OpenStreetMap, OpenTopoMap, Esri World Imagery y Esri World Street funcionan sin clave. MapTiler, Thunderforest y Stadia usan tu propia clave de API. Tu propio servidor de teselas está a una plantilla de URL de distancia. Cada capa tiene su propio proveedor, así que una capa de satélite y una de calles pueden estar en el mismo mapa y el usuario cambia entre ellas en el propio mapa.

  • Sin clave: mtpOpenStreetMap, mtpOpenTopoMap, mtpEsriWorldImagery, mtpEsriWorldStreet
  • Con tu clave: mtpMapTilerStreets, mtpMapTilerSatellite, mtpThunderforestCycle, mtpThunderforestTransport, mtpStadiaAlidadeSmooth
  • mtpCustom con URLTemplate lee cualquier servidor {z}/{x}/{y}
  • La atribución del proveedor se dibuja en el mapa por ti
  • ShowLayerSwitcher pone un botón de capas en el mapa
Leer el tema de la ayuda
Teselas vectoriales que se mantienen nítidas a cualquier tamaño

Teselas y datos del mapa

Teselas vectoriales que se mantienen nítidas a cualquier tamaño

Las teselas raster se difuminan al escalarlas, y cada cambio de estilo implica nuevas imágenes del servidor. Con teselas vectoriales el control recibe la geometría y dibuja él mismo carreteras, agua, edificios y etiquetas, de modo que el texto se mantiene nítido en pantallas de alta densidad y en las imágenes exportadas. Apunta una capa a un servidor Mapbox Vector Tile y deja VectorStyleFile vacío para usar el estilo integrado, o carga un archivo de estilo MapLibre o Mapbox GL para ajustarlo a tu marca. Las capas vectoriales funcionan igual en el control VCL y en el de FireMonkey.

  • mtsVectorHTTP lee un servidor de teselas vectoriales, desde Delphi XE2
  • mtsVectorMBTiles lee un archivo MBTiles vectorial local (paquete sin conexión)
  • mtsVectorPMTiles lee teselas vectoriales de un archivo PMTiles, ya sea un archivo local o una URL (paquete sin conexión)
  • TsgcMapVectorStyle carga un estilo con LoadFromFile o LoadFromJSON
  • La decodificación y el dibujo viven en TsgcMapTileSource_MVT, en código Delphi puro
Leer el tema de la ayuda

Teselas y datos del mapa

Capas de tus servidores WMS y WMTS

Ayuntamientos, empresas de servicios y organismos cartográficos publican usos del suelo, catastro y ortofotos como servicios web OGC y no como teselas z/x/y. Establece TileSourceType en mtsWMS o mtsWMTS y la capa pide sus imágenes al servicio, como superposición transparente sobre un mapa base o como el propio mapa base. Los lectores de capacidades listan las capas que ofrece un servicio y configuran la capa por ti, de modo que tus usuarios eligen una capa por su título en lugar de escribir parámetros de petición.

  • mtsWMS envía peticiones GetMap WMS 1.3.0 o 1.1.1, con Layers, Styles, ImageFormat y Transparent en las opciones WMS de la capa
  • mtsWMTS lee servicios KVP y REST mediante las opciones WMTS de la capa
  • TsgcMapWMSCapabilities y TsgcMapWMTSCapabilities cargan el documento de capacidades, y ApplyToLayer configura una capa a partir de él
  • Un documento de excepción del servidor llega a OnTileError con su texto
  • En .NET, TileSourceType.Wms y TileSourceType.Wmts, con WmsCapabilities y WmtsCapabilities

En todas las ediciones, también en la edición Community gratuita, desde Delphi 2009. El mapa se mantiene en Web Mercator: las capas WMS se piden en EPSG:3857, las capas WMTS necesitan un conjunto de matrices de teselas Web Mercator como GoogleMapsCompatible, y GetFeatureInfo no está soportado.

Leer el tema de la ayuda

Teselas y datos del mapa Solo registrada

Sigue trabajando cuando no hay red

Un técnico de campo en un sótano, un buque en el mar o una red de planta no pueden depender de un servidor de teselas. sgcMaps lee las teselas desde disco exactamente igual que desde la web. Dale a una capa un CacheFolder y cada tesela que descargue se conserva para la próxima ejecución. Para un paquete completo sin conexión, TsgcMapTileDownloader descarga con antelación un área y un rango de zoom en una carpeta o en un archivo MBTiles.

  • mtsFolder lee una carpeta z/x/y de teselas PNG o JPEG
  • mtsMBTiles lee un archivo MBTiles raster, desde Delphi XE7 (FireDAC SQLite)
  • CountTiles te dice el tamaño de una descarga antes de iniciarla; DelayMS y OnProgress la mantienen respetuosa y visible
  • Las descargas masivas deben respetar los términos del proveedor: las teselas de OpenStreetMap son solo para visualización interactiva

Community lee carpetas de teselas z/x/y y mantiene el CacheFolder por capa. El descargador de teselas, los archivos MBTiles y PMTiles pertenecen al paquete sin conexión.

Leer el tema de la ayuda

Teselas y datos del mapa Solo registrada

Una región entera en un solo archivo PMTiles

Un archivo PMTiles contiene una pirámide completa de teselas en un único archivo que copias a un portátil o colocas en cualquier servidor web estático, sin ningún servidor de teselas que mantener. sgcMaps lee el archivo desde un archivo local, o directamente desde un servidor web con peticiones HTTP de rango, y guarda en caché los directorios que ha leído, de modo que solo viajan por la red las teselas que se ven.

  • mtsPMTiles para archivos raster PNG y JPEG, mtsVectorPMTiles para archivos Mapbox Vector Tile
  • TileSourcePath admite un nombre de archivo o una URL http o https
  • TsgcMapTileSource_PMTiles informa del rango de zoom, los límites, el centro y los metadatos del archivo
  • PMTiles versión 3; los archivos con teselas WebP se notifican como no soportados
  • Desde Delphi XE2, y en el paquete registrado esegece.sgcMaps para .NET

PMTiles pertenece al paquete sin conexión, igual que MBTiles, por lo que está en la edición registrada y no en la edición Community gratuita.

Leer el tema de la ayuda

Marcadores, formas y geometría

Pon tus propios datos en el mapa, mantenlos legibles en cada nivel de zoom y haz los cálculos que hay detrás.

Marcadores, formas y geometría

Miles de marcadores, siempre legibles

Una flota, una red de tiendas o una malla de sensores se convierte enseguida en una nube de chinchetas superpuestas. Activa la agrupación y los marcadores cercanos se funden en una burbuja numerada que vuelve a dividirse al acercar el zoom, recalculada en cada nivel. Cada marcador lleva su propio popup, tooltip e icono, y los clics, arrastres y clics en grupos llegan como eventos, de modo que el mapa pasa a formar parte de tu flujo de trabajo en lugar de ser una imagen. Los marcadores pueden añadirse en un bucle desde tus datos o importarse desde archivos GeoJSON, GPX y KML, y ClearMarkers los reinicia con una sola llamada.

  • MarkerOptions.Clustering con GridSize, MinClusterSize y ZoomOnClick
  • PopupText, TooltipText e IconBitmap por marcador
  • Eventos OnMarkerClick, OnClusterClick y OnMarkerDragEnd
  • BeginUpdate y EndUpdate alrededor de las cargas masivas; FitToMarkers encuadra todos
  • MarkerAtScreen y ClusterAtScreen comprueban cualquier píxel
Leer el tema de la ayuda
Rutas, zonas y mapas de calor en un solo mapa

Marcadores, formas y geometría

Rutas, zonas y mapas de calor en un solo mapa

La mayoría de las pantallas de mapa necesitan más que chinchetas: la ruta de reparto planificada, el área que atiende un almacén, un radio alrededor de un cliente, de dónde vienen los pedidos. sgcMaps dibuja todo eso como elementos del modelo del mapa, en las mismas coordenadas que tus marcadores. Las formas pueden hacerse editables, de modo que un usuario arrastra los vértices de una zona con el ratón y tu código recibe aviso cuando termina la edición. Las etiquetas colocan texto en una coordenada con su propia fuente, color y fondo, lo que mantiene los nombres de zona y los números de ruta unidos al mapa.

  • AddPolyline con líneas Dashed y Geodesic
  • AddPolygon con AddHole, además de AddRectangle, AddCircle (RadiusMeters) y AddLabel
  • Las formas Editable informan de los cambios mediante OnShapeEdited
  • TsgcMapHeatmap admite puntos ponderados con AddPoint y un MaxIntensity
Leer el tema de la ayuda

Marcadores, formas y geometría

Los cálculos geográficos ya están escritos

¿Está este vehículo dentro de la zona? ¿A qué distancia está el almacén más cercano? ¿Qué punto de la ruta está más cerca del cliente? Estas preguntas surgen en toda aplicación de mapas y es fácil equivocarse cerca de los polos o en distancias largas. La unidad de geometría las responde sobre la esfera WGS84 con funciones simples que también puedes llamar desde un servicio sin ningún mapa. Las funciones toman registros TsgcMapCoord simples, y sgcMapLatLonToPixel y sgcMapPixelToLatLon convierten entre coordenadas de pantalla y del mundo cuando dibujas tus propias superposiciones.

  • sgcMapDistance en metros, sgcMapInitialBearing y sgcMapDestinationPoint
  • sgcMapPointInPolygon y sgcMapPointInPolygonWithHoles para geovallas
  • sgcMapNearestPointOnPolyline ajusta una posición a una ruta
  • sgcMapGeodesicInterpolate y sgcMapSimplify para líneas suaves y ligeras
Leer el tema de la ayuda

Búsqueda y rutas

Encuentra direcciones y planifica rutas con proveedores en línea, o totalmente sin conexión y sin clave de API.

Búsqueda y rutas

Geocodificación, direcciones y lugares tras una única API

Cada proveedor de geocodificación y rutas tiene su propio formato REST, sus claves y sus rarezas. Los componentes de servicio las ocultan: eliges un proveedor, defines tu clave cuando la necesita y llamas a los mismos métodos, de forma síncrona o asíncrona. Cambiar de un proveedor a otro es un cambio de propiedad, no una reescritura, y los resultados llegan como objetos Delphi listos para ponerlos en el mapa. Todos los componentes comparten la clase base TsgcMapService, de modo que ApiKey, UserAgent y LastError funcionan igual con cada proveedor.

  • TsgcMapGeocoder: Nominatim, Google, HERE, Azure Maps, Mapbox, OpenRouteService y Geoapify
  • TsgcMapDirections: OSRM, OpenRouteService, Google Routes, HERE, Azure Maps, Mapbox y Geoapify
  • TsgcMapPlaces para autocompletar direcciones, TsgcMapElevation y TsgcMapTimeZone
  • GeocodeAsync, GetRouteAsync y SuggestAsync mantienen la interfaz fluida; los errores llegan en OnError
Leer el tema de la ayuda

Búsqueda y rutas Solo registrada

Rutas y búsqueda de direcciones sin internet y sin clave

Las rutas en línea fallan justo donde se usan las aplicaciones de campo, y cada petición puede costar dinero. El enrutador sin conexión calcula rutas en coche, bici y a pie en el dispositivo a partir de un grafo de rutas construido una vez desde un extracto de OpenStreetMap. El geocodificador sin conexión busca nombres de lugares y geocodifica a la inversa un clic a partir de un índice GeoNames en SQLite. Ambos funcionan sin red, sin cuenta y sin coste por petición. El enrutador y el geocodificador son componentes no visuales, así que un servicio de Windows o una herramienta de consola puede responder a peticiones de ruta y de direcciones sin ningún mapa en pantalla.

  • TsgcMapOfflineRouter responde a GetRoute a partir de un grafo construido por TsgcMapRouteGraphBuilder desde .osm.pbf
  • sgcMapAddRouteToPolylines dibuja el resultado en el mapa
  • TsgcMapOfflineGeocoder con ReverseGeocode, sobre un índice de TsgcMapGeoIndexBuilder
  • Los constructores de línea de comandos del grafo y del índice están en la carpeta Tools

Community usa los servicios en línea; el enrutador y el geocodificador sin conexión pertenecen al paquete sin conexión.

Leer el tema de la ayuda

Archivos, renderizado y móvil

Intercambia datos geográficos con otras herramientas, renderiza mapas donde no hay pantalla y lleva el mapa a un teléfono.

Archivos, renderizado y móvil

Abre los archivos que tus usuarios ya tienen

Los clientes envían tracks de un reloj GPS, zonas dibujadas en una herramienta GIS o un KML de otro sistema. sgcMaps lee y escribe GeoJSON, GPX y KML directamente en el modelo del mapa, así que una importación es una llamada y una exportación es otra. Los tracks GPX llegan con sus estadísticas y pueden colorearse por elevación, y un lector en flujo recorre extractos grandes de OpenStreetMap sin cargarlos en memoria. Las exportaciones usan las mismas funciones a la inversa, así que las zonas que un usuario dibujó en el mapa pueden guardarse como GeoJSON o KML y abrirse en otras herramientas GIS.

  • sgcMapLoadGeoJSONFile y sgcMapSaveGeoJSONFile, desde Delphi XE6
  • TsgcMapGPX con TrackStats (TotalAscent, TotalDescent) y ColorByElevation
  • sgcMapLoadKMLFile y sgcMapSaveKMLFile
  • El lector de OpenStreetMap procesa archivos .osm.pbf y XML en flujo mediante eventos
  • sgcMapGeoJSONAsText devuelve el GeoJSON del mapa como cadena
Leer el tema de la ayuda

Archivos, renderizado y móvil

Shapefiles y WKT desde cualquier GIS

Los datos geográficos públicos siguen distribuyéndose como shapefiles de Esri, y las bases de datos espaciales intercambian la geometría como Well Known Text. TsgcMapShapefile importa los puntos, las líneas y los polígonos de un shapefile junto con su tabla de atributos, de modo que cada marcador puede mostrar el registro del que procede. WKT y el EWKT que escribe PostGIS se leen y se escriben, que es la forma más sencilla de mover una zona entre el mapa y una columna de geometría de tu base de datos.

  • LoadFromFile lee el .shp con sus archivos .shx, .dbf, .prj y .cpg; OnItem recibe cada fila de atributos y LabelField define el texto emergente de los puntos
  • Un .prj en grados WGS84, ETRS89 o NAD83, o en Web Mercator, se carga directamente, y un archivo sin .prj se lee como WGS84
  • Cualquier otra proyección produce un error claro, salvo que tu manejador OnTransform convierta las coordenadas
  • sgcMapLoadWKT y TsgcMapWKT leen POINT, LINESTRING, POLYGON, sus formas MULTI y GEOMETRYCOLLECTION, en grados o en metros Web Mercator, y AsText escribe el mapa de vuelta
  • En todas las ediciones desde Delphi 7; en .NET, ShapefileFormat y WktFormat con una devolución de llamada Transform
Leer el tema de la ayuda
Renderiza imágenes de mapa en un servidor

Archivos, renderizado y móvil

Renderiza imágenes de mapa en un servidor

Albaranes con la ruta, un informe diario con las incidencias de hoy, una miniatura para una página web: muchos mapas nunca se muestran en una ventana. El mismo control se renderiza a un PNG o a un bitmap sin ser visible, desde una aplicación de consola o un servicio de Windows. Puedes comprobar si ha llegado cada tesela antes de enviar la imagen, de modo que un servidor de teselas lento nunca acabe como un cuadrado gris en un documento de cliente. El renderizado en servidor usa las mismas capas, marcadores y formas que el control interactivo, así que un mapa diseñado en pantalla se ve igual en el PNG.

  • SaveToPNG y SaveToPNGFile, desde Delphi 2009
  • RenderToBitmap y SaveToBMPFile para tu propio flujo de trabajo
  • LastRenderMissingTiles informa de las teselas que no estaban disponibles
  • En .NET, MapView.RenderToPng también funciona en Linux
Leer el tema de la ayuda

Archivos, renderizado y móvil

El mismo mapa en escritorio y en móvil

Un despachador planifica en un escritorio Windows y el conductor sigue el plan en un teléfono. TsgcFMXMap lleva el mismo modelo, capas, marcadores, formas y servicios a FireMonkey en Windows, macOS, iOS y Android, así que el código que escribiste para el mapa VCL se traslada. TsgcMapLocation lee la posición del dispositivo, de modo que el mapa puede centrarse en el usuario y seguirlo. La caché de teselas por capa también funciona en móvil, así que un teléfono sigue mostrando las zonas que ya ha cargado.

  • TsgcFMXMap en Windows desde Delphi XE6, y en macOS, iOS y Android desde Delphi 10.4 (macOS ARM desde Delphi 11), con las mismas colecciones que TsgcVCLMap
  • TsgcMapLocation en Windows, Android, iOS y macOS
  • La demo FMX muestra teselas, marcadores y ubicación en un solo formulario, y la demo FMX Mobile está pensada para teléfonos y tablets
  • El núcleo independiente del framework también compila para Linux de 64 bits desde Delphi 10.4, para aplicaciones de consola y de servidor que usan los orígenes de teselas, los formatos de archivo y los datos sin conexión
  • Tres paquetes de ejecución, sgcMaps (el núcleo), sgcMapsVCL y sgcMapsFMX, de modo que una aplicación FireMonkey ya no carga los paquetes VCL
  • Las versiones mínimas de Delphi por función se indican en el tema de instalación
Leer el tema de la ayuda

Archivos, renderizado y móvil

El mapa en WPF y Avalonia, declarado en XAML

TsgcWpfMap y TsgcAvaloniaMap llevan el motor de mapas .NET a WPF y a Avalonia 12 con las funciones del control WinForms: desplazamiento y zoom con el ratón, el tacto y el teclado, capas, marcadores, formas, impresión, exportación a PDF y UI Automation. Las capas y los marcadores se declaran en XAML con el prefijo sgc, y una colección de tu modelo de vista se convierte en marcadores mediante ItemsSource, de modo que añadir una tienda a la colección la pone en el mapa y arrastrar su marcador escribe la nueva posición de vuelta.

  • LatitudeMember, LongitudeMember, TooltipMember, PopupMember, ColorMember y DraggableMember asignan tus propiedades a los marcadores
  • SelectedItem, Zoom, Bearing, CenterLatitude y CenterLongitude se enlazan en ambos sentidos
  • Los colores se escriben en XAML como texto #AARRGGBB o #RRGGBB
  • NuGet esegece.sgcMaps.Wpf (net8.0-windows a net10.0-windows) y esegece.sgcMaps.Avalonia (net8.0 a net10.0), ambos con un paquete Community gratuito
  • Los proyectos WpfDemo y AvaloniaDemo muestran la misma ventana en los dos frameworks
Leer el tema de la ayuda

Accesibilidad

UI Automation para lectores de pantalla y teclado, sin configuración.

Accesibilidad

Un mapa al que llega el teclado y que UI Automation expone

sgcMaps expone el mapa a Microsoft UI Automation con una alternativa de texto, los marcadores como una lista y las capas como una lista, donde cada capa indica si es visible. Se puede llegar a los marcadores con el teclado.

  • Las flechas desplazan el mapa, las teclas más y menos amplían o reducen, e Inicio vuelve a la vista inicial
  • Re Pág y Av Pág pasan al marcador anterior o siguiente, Intro activa el marcador con el foco y Esc quita el foco del marcador
  • El mapa muestra un anillo de foco visible mientras tiene el foco
  • En .NET, los controles de mapa WinForms, WPF y Avalonia exponen la misma estructura de UI Automation y el mismo teclado

La accesibilidad está activada por defecto en todas las ediciones, también en la edición Community gratuita, en VCL en todas las versiones de Delphi y C++Builder desde Delphi 7 hasta Delphi 13, en FireMonkey en Windows, y en WinForms, WPF y Avalonia. En Delphi y C++Builder, AccessibleName y AccessibleDescription establecen el nombre y la descripción expuestos a UI Automation, y en .NET lo hacen el nombre accesible y el texto de ayuda estándar de cada framework. Consulta los informes de conformidad de accesibilidad (en inglés), que todavía no cubren los nuevos controles de mapa WPF y Avalonia. La imagen del mapa se describe solo por su centro y su zoom, y el renderizador del mapa no respeta el alto contraste de Windows, porque la imagen del mapa son teselas del proveedor.

Leer el tema de la ayuda

Mira sgcMaps en acción

sgcMaps dentro de las demos de la suite sgcUI: aplicaciones completas que funcionan sin conexión con datos simulados integrados.

Quién construye con sgcMaps

Servicio de campo y logística

Los técnicos y conductores necesitan el mapa donde hay poca cobertura. Prepara con antelación las teselas de una región, calcula rutas en coche en el dispositivo con el enrutador sin conexión y encuentra direcciones con el geocodificador sin conexión. De vuelta en la oficina, el mismo código dibuja las rutas planificadas y las zonas de reparto, y renderiza un PNG de cada ruta para el albarán.

  • Funciona sin conexión
  • Rutas sin conexión
  • Rutas y zonas
  • Imágenes de mapa
Ejecuta la demo OfflineServices

Seguimiento de activos y flotas

Una sala de control vigila cientos de vehículos, máquinas o sensores a la vez. La agrupación mantiene el mapa legible a escala de país y se divide en chinchetas individuales a nivel de calle. Un mapa de calor muestra dónde se concentran las incidencias, las comprobaciones de geovalla con punto en polígono lanzan alertas, y los eventos de clic en marcadores abren el registro del activo en tus propios formularios.

  • Agrupación
  • Mapas de calor
  • Geometría
  • Eventos
Ejecuta la demo MapFeatures

GIS ligero y aplicaciones de exterior

Las herramientas de planificación, las aplicaciones deportivas y el software de topografía viven de tracks GPX, capas KML y zonas GeoJSON. sgcMaps importa y exporta los tres, muestra estadísticas del track y colores de elevación, y pone el resultado sobre un mapa base topográfico. El control FireMonkey lleva las mismas funciones a una tableta o un teléfono sobre el terreno. Las estadísticas del track dan el ascenso y el descenso totales de una ruta de un vistazo.

  • GeoJSON, GPX, KML y shapefiles
  • Teselas topográficas
  • FireMonkey
Ejecuta la demo OfflineMap

Un mapa en pocas líneas

La misma API en Delphi, C++ Builder y C#: teselas de OpenStreetMap, tres marcadores, una línea geodésica y un radio, encuadrados a los marcadores y guardados como PNG.

Un mapa VCL construido en código: una capa de OpenStreetMap con caché, marcadores, una línea geodésica y un círculo, y luego un PNG del resultado.

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;

Leer el tema de la ayuda →

El mismo mapa en C++ Builder con las cabeceras generadas de sgcMaps.

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

Leer el tema de la ayuda →

El MapView sin ventana renderiza el mismo mapa a un archivo PNG, en 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

Leer el tema de la ayuda →

Capas WMS, shapefiles y el mapa en WPF

Una superposición WMS y una importación de shapefile con sus atributos en Delphi, y una ventana WPF con el mapa, una capa y un marcador declarados en XAML.

Una superposición WMS transparente con su propia caché de teselas, y un shapefile cuyos parques se rellenan de verde a partir de la tabla de atributos. Ambos funcionan en todas las ediciones.

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;

Leer el tema WMS → Leer el tema Shapefile →

Las capas y los marcadores de un TsgcWpfMap se declaran en XAML con el prefijo sgc. El código subyacente añade una caché de teselas, una línea y tres eventos.

<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

Leer el tema de la ayuda →

Ejecuta las demos de sgcMaps

Con sgcMaps se incluyen once demos de Delphi y ocho de .NET. No hay proyectos de demo de C++ Builder.

Solo registrada OfflineMap

Teselas de carpeta, MBTiles y en línea, marcadores y formas, además de importación GeoJSON, GPX y KML.

MapFeatures

Proveedores y claves de API, agrupación de marcadores, edición de formas, mapas de calor y exportación de imágenes.

Services

Búsqueda de lugares, geocodificación, direcciones, elevación, zonas horarias y ubicación del dispositivo con los proveedores en línea. Delphi XE8 y posteriores.

Solo registrada OfflineServices

Construye un índice GeoNames y un grafo de rutas de OpenStreetMap, y luego busca lugares y calcula rutas en coche, bici o a pie sin red.

StaticRender

StaticRender

Un programa de consola que renderiza un mapa a un archivo PNG o BMP sin ventana.

FMX

El mapa FireMonkey con teselas, marcadores y ubicación del dispositivo, para Windows, macOS, iOS y Android. Delphi XE6 y posteriores.

VectorTiles

VectorTiles

Un servidor de teselas vectoriales dibujado con el estilo integrado o un archivo de estilo propio, con etiquetas nítidas en cada zoom.

FMXMobile

El mapa FireMonkey pensado para teléfonos y tablets: desplazamiento con un dedo, zoom de pellizco, botones de zoom grandes, tu posición con un círculo de precisión y una lista de lugares. Delphi 10.4 y posterior.

OGCServices

Carga un documento de capacidades WMS o WMTS desde una URL o un archivo, lista las capas y añade la que eliges como superposición sobre OpenStreetMap, con un control deslizante de opacidad. Delphi 2009 y posterior.

Solo registrada PMTiles

Abre un archivo PMTiles raster o vectorial desde un archivo o una URL, muestra su cabecera y sus metadatos, y lo añade como capa centrada en el archivo. Delphi XE2 y posterior.

ShapefileWKT

Importa un shapefile con su tabla de atributos, muestra el registro de un marcador en el que se hace clic, e importa y exporta WKT.

WinFormsDemo

El SgcMapControl de .NET en una ventana WinForms con proveedores, marcadores y formas.

WpfDemo

El mapa WPF declarado en XAML: capas base y marcadores en el marcado, tiendas enlazadas como marcadores con ItemsSource, controles deslizantes de zoom y orientación, impresión y exportación a PDF.

AvaloniaDemo

La misma ventana con el control de mapa de Avalonia 12 y enlaces compilados.

OgcServicesDemo

El control de mapa WinForms con una capa base de OpenStreetMap y una superposición de un servicio WMS o WMTS: carga un documento de capacidades desde una URL o un archivo, lista las capas, añade la que eliges con un control deslizante de opacidad y muestra los errores de teselas.

Solo registrada PMTilesDemo

El control de mapa WinForms con una capa de un archivo PMTiles raster o vectorial, abierto desde un archivo o una URL, con su cabecera y sus metadatos y el mapa centrado en el archivo.

ShapefileWktDemo

El control de mapa WinForms importando un shapefile con su tabla de atributos y el registro de un marcador en el que se hace clic, además de importar y exportar WKT de las superposiciones.

Solo registrada OfflineDemo

El paquete .NET sin conexión: teselas, rutas y geocodificación sin conexión a partir de archivos de datos locales.

ConsoleRenderDemo

ConsoleRenderDemo

Una consola .NET que renderiza un mapa a PNG con el MapView sin ventana, en Windows o Linux.

Demos compiladas

Ejecutables listos para usar de cada producto sgcUI, sin nada que instalar.

Descargar sgcUI_bin.zip →

Guía Getting Started

Cinco demos QuickStart para Delphi (VCL) se incluyen en Demos\Maps\00.QuickStart. La guía en PDF las recorre paso a paso: un primer mapa con marcadores, marcadores y etiquetas añadidos desde código, formas, los eventos del mapa y un localizador de tiendas.

Descargar la guía (PDF, en inglés) →

Dónde se incluye sgcMaps

sgcMaps forma parte de sgcUI Enterprise y también se vende por separado. sgcMaps también está incluido en el paquete All-Access.

Paquete individual de sgcMaps

€149 / desarrollador, código fuente completo, 1 año de actualizaciones.

Comprar sgcMaps → Ver precios →

sgcUI Enterprise

Los 17 productos sgcUI, desde €699.

Ver Enterprise →

La edición Community gratuita para .NET (NuGet esegece.sgcMaps.Community, esegece.sgcMaps.Rendering.Community, esegece.sgcMaps.WinForms.Community, esegece.sgcMaps.Wpf.Community, esegece.sgcMaps.Avalonia.Community) tiene todas las funciones excepto el paquete sin conexión. El paquete esegece.sgcMaps.Offline es solo registrado. Un proyecto referencia los paquetes Community o los registrados, nunca ambos.

FunciónCommunity (gratuita)Registrada
Controles de mapa VCL, FireMonkey, WinForms, WPF y Avalonia✓✓
Proveedores de teselas, servidores de teselas HTTP y vectoriales✓✓
Capas WMS y WMTS✓✓
Carpetas de teselas z/x/y y caché de teselas por capa✓✓
Marcadores, agrupación, formas, etiquetas y mapas de calor✓✓
Funciones de geometría✓✓
Importación y exportación de GeoJSON, GPX y KML✓✓
Importación de shapefiles, importación y exportación de WKT✓✓
Geocodificación, direcciones, lugares, elevación y zonas horarias en línea✓✓
Renderizado estático a PNG✓✓
Descargador de teselas para paquetes sin conexión−✓
Archivos MBTiles y PMTiles (raster y vectoriales)−✓
Enrutador y geocodificador sin conexión−✓

Frameworks y plataformas compatibles

Componentes de sgcMaps

TsgcVCLMap y TsgcFMXMap

Los controles de mapa para VCL y FireMonkey, además de un control LCL de Lazarus que lee teselas desde disco.

Colecciones del modelo

Layers, Markers, Polylines, Polygons, Rectangles, Circles, Labels y Heatmaps, compartidas por todos los frameworks.

Servicios en línea

TsgcMapGeocoder, TsgcMapDirections, TsgcMapPlaces, TsgcMapElevation y TsgcMapTimeZone.

Herramientas sin conexión

TsgcMapRouteCalculator, TsgcMapOfflineRouter, TsgcMapOfflineGeocoder, TsgcMapGeoIndexBuilder y TsgcMapTileDownloader.

Formatos GIS y servicios OGC

TsgcMapShapefile, TsgcMapWKT, TsgcMapWMSCapabilities, TsgcMapWMTSCapabilities y TsgcMapTileSource_PMTiles.

TsgcMapLocation y ayudas de geometría

Ubicación del dispositivo, y sgcMapDistance, rumbo, punto de destino, interpolación geodésica, punto en polígono y simplificación de líneas.

Mapas .NET

SgcMapControl para WinForms, TsgcWpfMap para WPF, TsgcAvaloniaMap para Avalonia 12, y MapView, el motor sin ventana que renderiza a PNG, también en Linux.

DestinoComponentePlataformas
Delphi 7 a 13, VCLTsgcVCLMap y el modeloWin32, Win64 desde XE2 y ARM64EC en Delphi 13
Delphi XE6 a 13, FireMonkeyTsgcFMXMapWindows desde XE6; macOS, iOS y Android desde Delphi 10.4 (macOS ARM desde Delphi 11); ubicación del dispositivo en Windows, Android, iOS y macOS
Delphi 10.4 a 13, Linux de 64 bitsEl núcleo independiente del framework, sin control de mapaOrígenes de teselas, servicios, formatos de archivo y datos sin conexión en aplicaciones de consola y de servidor
C++ Builder 2007 a 13TsgcVCLMap, TsgcFMXMap desde XE6, y el modeloSolo Windows: Win32, Win64 desde XE3 y Win64x en C++ Builder 13, con cabeceras .hpp generadas y bibliotecas estáticas
LazarusControl de mapa LCLSolo teselas desde disco, no puede descargar teselas
.NET 8, 9 y 10SgcMapControl, TsgcWpfMap, TsgcAvaloniaMap, MapViewWinForms y WPF (net8.0-windows, net9.0-windows, net10.0-windows), Avalonia 12 (net8.0, net9.0, net10.0), PNG sin ventana en Windows y Linux

Paquetes Delphi: sgcMaps contiene el núcleo independiente del framework, sgcMapsVCL el mapa VCL y sgcMapsFMX el mapa FireMonkey, con los paquetes de diseño dclsgcMaps y dclsgcMapsFMX. Un proyecto compilado con paquetes de ejecución que incluye sgcMaps añade sgcMapsVCL o sgcMapsFMX. Consulta Paquetes y Plataformas.

Preguntas frecuentes

No. Las teselas, los marcadores y las formas los dibuja el control de forma nativa, así que no hay vista web, ni biblioteca JavaScript, ni runtime de navegador que desplegar.

No para OpenStreetMap, OpenTopoMap y las teselas de Esri, ni para el enrutador y el geocodificador sin conexión. Las teselas de MapTiler, Thunderforest y Stadia, y los proveedores comerciales de geocodificación y rutas, usan tu propia clave. Cada proveedor mantiene sus propios términos de uso, que tu aplicación debe respetar.

Sí. Las teselas pueden venir de carpetas z/x/y, de una caché por capa, de archivos MBTiles o de archivos PMTiles, las rutas de TsgcMapOfflineRouter y la búsqueda de direcciones de TsgcMapOfflineGeocoder. MBTiles, PMTiles, el descargador de teselas y el enrutador y geocodificador sin conexión forman parte del paquete sin conexión de la edición registrada.

GeoJSON, GPX, KML y WKT con EWKT, para importar y exportar, y shapefiles de Esri con sus atributos para importar, con estadísticas de tracks GPX y colores de elevación. Un lector en flujo también procesa archivos .osm.pbf y XML de OpenStreetMap, que es como se construye el grafo de rutas sin conexión. Consulta Formatos de archivo, Shapefile y WKT.

El modelo, el control VCL, los shapefiles y WKT funcionan desde Delphi 7 y C++ Builder 2007. Algunas funciones tienen un mínimo superior: salida PNG, servidores de teselas, WMS y WMTS desde Delphi 2009, teselas vectoriales, PMTiles y enrutador sin conexión desde XE2, FireMonkey en Windows y GeoJSON desde XE6, MBTiles y geocodificador sin conexión desde XE7, servicios en línea desde XE8. FireMonkey en macOS, iOS y Android, y las unidades del núcleo en Linux de 64 bits, necesitan Delphi 10.4 o posterior.

Sí. Una capa con TileSourceType mtsWMS o mtsWMTS pide sus imágenes a un servicio WMS 1.1.1 o 1.3.0, o a un servicio WMTS con codificación KVP o REST, y los lectores de capacidades configuran la capa a partir de la descripción del servicio. El mapa es Web Mercator, así que las capas WMS se piden en EPSG:3857 y los servicios WMTS necesitan un conjunto de matrices de teselas Web Mercator. WMS y WMTS están en todas las ediciones, Community incluida. Consulta WMS y WMTS.

Sí. TsgcWpfMap (NuGet esegece.sgcMaps.Wpf) y TsgcAvaloniaMap (esegece.sgcMaps.Avalonia, Avalonia 12) alojan el mismo motor que el SgcMapControl de WinForms. Las capas y los marcadores se pueden declarar en XAML, los marcadores se enlazan a una colección con ItemsSource y la vista se enlaza en ambos sentidos. Ambos están también en la edición Community gratuita. Consulta Inicio rápido WPF y Inicio rápido Avalonia.

Los proyectos de demo son solo de Delphi, pero los componentes se instalan en C++ Builder 2007 a 13 y funcionan igual. La pestaña C++ Builder de la sección de código de arriba muestra el mismo mapa construido con las cabeceras generadas.

Sí. La edición Community es gratuita para particulares y organizaciones con menos de 1 millón de euros de facturación bruta anual y no más de 5 desarrolladores. Tiene todas las funciones excepto el paquete sin conexión. En .NET los paquetes son esegece.sgcMaps.Community, esegece.sgcMaps.Rendering.Community, esegece.sgcMaps.WinForms.Community, esegece.sgcMaps.Wpf.Community y esegece.sgcMaps.Avalonia.Community. WMS, WMTS, shapefiles, WKT y los controles WPF y Avalonia también están en Community. Las organizaciones más grandes necesitan una licencia registrada.

Ayuda de sgcMaps

3,000+Desarrolladores
20+Años
761+Componentes
30+Integraciones de API
5Plataformas
Garantía de devolución de 30 días¿No estás satisfecho? Solicita un reembolso completo en los 30 días posteriores a la compra. Ver política de reembolso

Prueba sgcMaps hoy

La prueba de sgcUI incluye sgcMaps con el paquete sin conexión y todos los demás productos sgcUI. La edición .NET Community es gratuita en NuGet.