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

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

Coloque um mapa de verdade no seu aplicativo sem controle de navegador nem uma linha de JavaScript. O sgcMaps desenha os tiles raster e vetoriais por conta própria, adiciona camadas de servidores WMS e WMTS, mostra milhares de marcadores agrupados, rotas e zonas, geocodifica endereços e continua funcionando offline com tiles locais e um roteador offline.

VCL, FireMonkey, Lazarus, WinForms, WPF, AvaloniaSem controle de navegador, sem JavaScriptEdição .NET Community gratuitaIncluído no sgcUI Enterprise
TsgcVCLMap mostrando o centro de Madri a partir de tiles vetoriais com marcadores de localização vermelhos e azuis

Tudo o que um aplicativo de mapas precisa

Dezoito recursos, cada um com a API real e o tópico de ajuda por trás dele.

Tiles e dados de mapa

O controle de mapa desenha cada tile por conta própria, a partir de um servidor de tiles, de um serviço WMS ou WMTS, de uma fonte vetorial ou de arquivos em disco.

Um mapa de verdade no seu formulário, sem navegador dentro

Tiles e dados de mapa

Um mapa de verdade no seu formulário, sem navegador dentro

A maioria dos componentes de mapa embrulha uma web view e uma biblioteca JavaScript, e o seu aplicativo desktop acaba distribuindo um navegador. O sgcMaps não. O TsgcVCLMap e o TsgcFMXMap baixam, guardam em cache e desenham os tiles no próprio canvas, tratam o zoom pela roda do mouse e o arrastar para deslocar, e disparam eventos normais do Delphi. O seu mapa é um controle nativo como qualquer outro: ele se ancora, segue o tema do formulário e se depura como o resto do seu código. Não há processo extra para implantar nem para proteger, e o mapa se comporta da mesma forma em todas as máquinas em que o seu aplicativo roda.

  • A coleção Layers guarda um ou mais itens TsgcMapLayer, cada um com o seu próprio TileSourceType
  • O TsgcFMXMap funciona no Windows a partir do Delphi XE6, e no macOS, iOS e Android a partir do Delphi 10.4
  • Um controle LCL do Lazarus mostra tiles do disco
  • No .NET, o SgcMapControl para WinForms, o TsgcWpfMap para WPF, o TsgcAvaloniaMap para Avalonia 12 e o MapView headless compartilham um único motor
  • Da direita para a esquerda para árabe e hebraico: os botões de zoom, o seletor de camadas, a bússola, a barra de escala e a atribuição passam para o lado oposto, enquanto o mapa mantém sua orientação geográfica
Ler o tópico da ajuda
Escolha um provedor de tiles com uma propriedade

Tiles e dados de mapa

Escolha um provedor de tiles com uma propriedade

Escolher um mapa base não deve exigir ler a documentação de um servidor de tiles. Defina Provider em uma camada e chame sgcMapApplyProvider: a camada recebe o modelo de URL, o zoom máximo e o texto de atribuição desse provedor. OpenStreetMap, OpenTopoMap, Esri World Imagery e Esri World Street funcionam sem chave. MapTiler, Thunderforest e Stadia usam a sua própria chave de API. O seu próprio servidor de tiles está a um modelo de URL de distância. Cada camada tem o seu próprio provedor, então uma camada de satélite e uma camada de ruas podem coexistir no mesmo mapa e o usuário alterna entre elas no próprio mapa.

  • Sem chave: mtpOpenStreetMap, mtpOpenTopoMap, mtpEsriWorldImagery, mtpEsriWorldStreet
  • Com a sua chave: mtpMapTilerStreets, mtpMapTilerSatellite, mtpThunderforestCycle, mtpThunderforestTransport, mtpStadiaAlidadeSmooth
  • mtpCustom com URLTemplate lê qualquer servidor {z}/{x}/{y}
  • A atribuição do provedor é desenhada no mapa para você
  • ShowLayerSwitcher coloca um botão de camadas no mapa
Ler o tópico da ajuda
Tiles vetoriais que continuam nítidos em qualquer tamanho

Tiles e dados de mapa

Tiles vetoriais que continuam nítidos em qualquer tamanho

Os tiles raster ficam borrados ao serem ampliados, e cada mudança de estilo significa novas imagens do servidor. Com tiles vetoriais, o controle recebe a geometria e desenha estradas, água, edifícios e rótulos por conta própria, de modo que o texto continua nítido em telas de alta DPI e em imagens exportadas. Aponte uma camada para um servidor de Mapbox Vector Tiles e deixe VectorStyleFile vazio para usar o estilo embutido, ou carregue um arquivo de estilo MapLibre ou Mapbox GL para combinar com a sua marca. As camadas vetoriais funcionam tanto no controle VCL quanto no FireMonkey.

  • mtsVectorHTTP lê um servidor de tiles vetoriais, a partir do Delphi XE2
  • mtsVectorMBTiles lê um arquivo MBTiles vetorial local (pacote offline)
  • mtsVectorPMTiles lê tiles vetoriais de um arquivo PMTiles, local ou por URL (pacote offline)
  • TsgcMapVectorStyle carrega um estilo com LoadFromFile ou LoadFromJSON
  • A decodificação e o desenho estão em TsgcMapTileSource_MVT, em código Delphi puro
Ler o tópico da ajuda

Tiles e dados de mapa

Camadas dos seus servidores WMS e WMTS

Prefeituras, empresas de serviços públicos e órgãos de cartografia publicam uso do solo, cadastro e ortofotos como serviços web OGC, e não como tiles z/x/y. Defina TileSourceType como mtsWMS ou mtsWMTS e a camada solicita suas imagens ao serviço, como uma sobreposição transparente sobre um mapa base ou como o próprio mapa base. Os leitores de capabilities listam as camadas que um serviço oferece e configuram a camada para você, de modo que seus usuários escolhem uma camada pelo título em vez de digitar parâmetros de requisição.

  • mtsWMS envia requisições GetMap WMS 1.3.0 ou 1.1.1, com Layers, Styles, ImageFormat e Transparent nas opções WMS da camada
  • mtsWMTS lê serviços KVP e REST por meio das opções WMTS da camada
  • TsgcMapWMSCapabilities e TsgcMapWMTSCapabilities carregam o documento de capabilities, e ApplyToLayer configura uma camada a partir dele
  • Um documento de exceção do servidor chega a OnTileError com o seu texto
  • No .NET, TileSourceType.Wms e TileSourceType.Wmts, com WmsCapabilities e WmtsCapabilities

Em todas as edições, inclusive na edição Community gratuita, a partir do Delphi 2009. O mapa continua em Web Mercator: as camadas WMS são solicitadas em EPSG:3857, as camadas WMTS precisam de um tile matrix set Web Mercator, como GoogleMapsCompatible, e GetFeatureInfo não é suportado.

Ler o tópico da ajuda

Tiles e dados de mapa Somente Registrada

Continue trabalhando quando a rede cair

Um técnico de campo em um porão, uma embarcação no mar ou uma rede de chão de fábrica não podem depender de um servidor de tiles. O sgcMaps lê os tiles do disco exatamente como os lê da web. Dê a uma camada um CacheFolder e cada tile que ela buscar é mantido para a próxima execução. Para um pacote offline completo, o TsgcMapTileDownloader busca uma área e um intervalo de zoom com antecedência para uma pasta ou um arquivo MBTiles.

  • mtsFolder lê uma pasta z/x/y de tiles PNG ou JPEG
  • mtsMBTiles lê um arquivo MBTiles raster, a partir do Delphi XE7 (FireDAC SQLite)
  • CountTiles informa o tamanho de um download antes de você iniciá-lo; DelayMS e OnProgress o mantêm educado e visível
  • Downloads em massa devem respeitar os termos do provedor: os tiles do OpenStreetMap são apenas para visualização interativa

A Community lê pastas de tiles z/x/y e mantém o CacheFolder por camada. O downloader de tiles e os arquivos MBTiles e PMTiles pertencem ao pacote offline.

Ler o tópico da ajuda

Tiles e dados de mapa Somente Registrada

Uma região inteira em um único arquivo PMTiles

Um arquivo PMTiles guarda uma pirâmide completa de tiles em um único arquivo, que você copia para um notebook ou coloca em qualquer servidor web estático, sem nenhum servidor de tiles para manter. O sgcMaps lê o arquivo de um arquivo local ou diretamente de um servidor web com requisições HTTP range e mantém em cache os diretórios que já leu, de modo que só os tiles visíveis trafegam pela rede.

  • mtsPMTiles para arquivos raster PNG e JPEG, mtsVectorPMTiles para arquivos Mapbox Vector Tile
  • TileSourcePath aceita um nome de arquivo ou uma URL http ou https
  • TsgcMapTileSource_PMTiles informa a faixa de zoom, os limites, o centro e os metadados do arquivo
  • PMTiles versão 3; arquivos com tiles WebP são informados como não suportados
  • A partir do Delphi XE2, e no pacote Registrado esegece.sgcMaps para .NET

O PMTiles pertence ao pacote offline, como o MBTiles, portanto está na edição Registrada e não na edição Community gratuita.

Ler o tópico da ajuda

Marcadores, formas e geometria

Coloque os seus próprios dados no mapa, mantenha-os legíveis em cada nível de zoom e faça os cálculos por trás deles.

Marcadores, formas e geometria

Milhares de marcadores, ainda legíveis

Uma frota, uma rede de lojas ou uma grade de sensores viram rapidamente uma nuvem de pinos sobrepostos. Ative o agrupamento e os marcadores próximos se fundem em uma bolha numerada que se divide de novo conforme o usuário aproxima o zoom, recalculada a cada nível de zoom. Cada marcador tem o seu próprio popup, dica e ícone, e cliques, arrastes e cliques em grupos chegam como eventos, de modo que o mapa passa a fazer parte do seu fluxo de trabalho em vez de ser uma imagem. Os marcadores podem ser adicionados em um laço a partir dos seus dados ou importados de arquivos GeoJSON, GPX e KML, e ClearMarkers os redefine em uma chamada.

  • MarkerOptions.Clustering com GridSize, MinClusterSize e ZoomOnClick
  • PopupText, TooltipText e IconBitmap por marcador
  • Eventos OnMarkerClick, OnClusterClick e OnMarkerDragEnd
  • BeginUpdate e EndUpdate em torno de cargas em massa; FitToMarkers enquadra todos
  • MarkerAtScreen e ClusterAtScreen testam qualquer pixel
Ler o tópico da ajuda
Rotas, zonas e mapas de calor em um só mapa

Marcadores, formas e geometria

Rotas, zonas e mapas de calor em um só mapa

A maioria das telas de mapa precisa de mais do que pinos: a rota de entrega planejada, a área que um depósito atende, um raio em torno de um cliente, de onde vêm os pedidos. O sgcMaps desenha todos eles como itens do modelo do mapa, nas mesmas coordenadas dos seus marcadores. As formas podem ser tornadas editáveis, de modo que o usuário arraste os vértices de uma zona com o mouse e o seu código seja avisado quando a edição terminar. Os rótulos colocam texto em uma coordenada com fonte, cor e fundo próprios, o que mantém os nomes das zonas e os números das rotas presos ao mapa.

  • AddPolyline com linhas Dashed e Geodesic
  • AddPolygon com AddHole, além de AddRectangle, AddCircle (RadiusMeters) e AddLabel
  • Formas Editable informam as alterações por meio de OnShapeEdited
  • TsgcMapHeatmap recebe pontos ponderados com AddPoint e um MaxIntensity
Ler o tópico da ajuda

Marcadores, formas e geometria

A matemática geográfica já está pronta

Este veículo está dentro da zona? A que distância fica o depósito mais próximo? Qual ponto da rota está mais perto do cliente? Essas perguntas surgem em todo aplicativo de mapas e é fácil errar perto dos polos ou em grandes distâncias. A unit de geometria as responde na esfera WGS84 com funções simples que você também pode chamar de um serviço sem nenhum mapa. As funções recebem registros TsgcMapCoord simples, e sgcMapLatLonToPixel e sgcMapPixelToLatLon convertem entre coordenadas de tela e de mundo quando você desenha as suas próprias camadas sobrepostas.

  • sgcMapDistance em metros, sgcMapInitialBearing e sgcMapDestinationPoint
  • sgcMapPointInPolygon e sgcMapPointInPolygonWithHoles para geofences
  • sgcMapNearestPointOnPolyline encaixa uma posição em uma rota
  • sgcMapGeodesicInterpolate e sgcMapSimplify para linhas suaves e leves
Ler o tópico da ajuda

Busca e roteamento

Encontre endereços e planeje rotas com provedores online, ou totalmente offline sem chave de API.

Busca e roteamento

Geocodificação, rotas e lugares em uma única API

Cada provedor de geocodificação e roteamento tem o seu próprio formato REST, chaves e peculiaridades. Os componentes de serviço os escondem: você escolhe um provedor, define a sua chave quando ele exige uma e chama os mesmos métodos, de forma síncrona ou assíncrona. Trocar de um provedor para outro é uma mudança de propriedade, não uma reescrita, e os resultados voltam como objetos Delphi prontos para colocar no mapa. Todos os componentes compartilham a classe base TsgcMapService, então ApiKey, UserAgent e LastError funcionam da mesma forma para todos os provedores.

  • TsgcMapGeocoder: Nominatim, Google, HERE, Azure Maps, Mapbox, OpenRouteService e Geoapify
  • TsgcMapDirections: OSRM, OpenRouteService, Google Routes, HERE, Azure Maps, Mapbox e Geoapify
  • TsgcMapPlaces para preenchimento automático de endereços, TsgcMapElevation e TsgcMapTimeZone
  • GeocodeAsync, GetRouteAsync e SuggestAsync mantêm a interface responsiva; os erros chegam em OnError
Ler o tópico da ajuda

Busca e roteamento Somente Registrada

Rotas e busca de endereços sem internet e sem chave

O roteamento online falha exatamente onde os aplicativos de campo são usados, e cada requisição pode custar dinheiro. O roteador offline calcula rotas de carro, bicicleta e a pé no próprio dispositivo, a partir de um grafo de rotas criado uma vez a partir de um extrato do OpenStreetMap. O geocodificador offline procura nomes de lugares e faz a geocodificação reversa de um clique a partir de um índice GeoNames em SQLite. Os dois funcionam sem rede, sem conta e sem tarifa por requisição. O roteador e o geocodificador são componentes não visuais, então um serviço do Windows ou uma ferramenta de console pode responder a pedidos de rota e de endereço sem nenhum mapa na tela.

  • O TsgcMapOfflineRouter responde a GetRoute a partir de um grafo criado pelo TsgcMapRouteGraphBuilder a partir de .osm.pbf
  • sgcMapAddRouteToPolylines desenha o resultado no mapa
  • TsgcMapOfflineGeocoder com ReverseGeocode, sobre um índice do TsgcMapGeoIndexBuilder
  • Os construtores de linha de comando do grafo e do índice estão na pasta Tools

A Community usa os serviços online; o roteador e o geocodificador offline pertencem ao pacote offline.

Ler o tópico da ajuda

Arquivos, renderização e dispositivos móveis

Troque dados geográficos com outras ferramentas, renderize mapas onde não há tela e leve o mapa a um celular, a uma janela WPF ou a uma janela Avalonia.

Arquivos, renderização e dispositivos móveis

Abra os arquivos que os seus usuários já têm

Os clientes enviam trilhas de um relógio GPS, zonas desenhadas em uma ferramenta de GIS ou um KML de outro sistema. O sgcMaps lê e grava GeoJSON, GPX e KML direto no modelo do mapa, então uma importação é uma chamada e uma exportação é outra. As trilhas GPX vêm com as suas estatísticas e podem ser coloridas por elevação, e um leitor em streaming percorre grandes extratos do OpenStreetMap sem carregá-los na memória. As exportações usam as mesmas funções no sentido inverso, de modo que as zonas que um usuário desenhou no mapa podem ser salvas como GeoJSON ou KML e abertas em outras ferramentas de GIS.

  • sgcMapLoadGeoJSONFile e sgcMapSaveGeoJSONFile, a partir do Delphi XE6
  • TsgcMapGPX com TrackStats (TotalAscent, TotalDescent) e ColorByElevation
  • sgcMapLoadKMLFile e sgcMapSaveKMLFile
  • O leitor do OpenStreetMap processa arquivos .osm.pbf e XML em streaming por meio de eventos
  • sgcMapGeoJSONAsText retorna o GeoJSON do mapa como texto
Ler o tópico da ajuda

Arquivos, renderização e dispositivos móveis

Shapefiles e WKT de qualquer GIS

Os dados geográficos públicos ainda são distribuídos como shapefiles Esri, e os bancos de dados espaciais trocam geometria como Well Known Text. O TsgcMapShapefile importa os pontos, as linhas e os polígonos de um shapefile junto com sua tabela de atributos, de modo que cada marcador pode mostrar o registro de onde veio. WKT e o EWKT gravado pelo PostGIS são lidos e gravados, o que é a forma mais simples de mover uma zona entre o mapa e uma coluna de geometria do seu banco de dados.

  • LoadFromFile lê o .shp com seus arquivos .shx, .dbf, .prj e .cpg; OnItem recebe cada linha de atributos e LabelField define o texto do popup dos pontos
  • Um .prj em graus WGS84, ETRS89 ou NAD83, ou em Web Mercator, é carregado diretamente, e um arquivo sem .prj é lido como WGS84
  • Qualquer outra projeção gera um erro claro, a menos que o seu manipulador OnTransform converta as coordenadas
  • sgcMapLoadWKT e TsgcMapWKT leem POINT, LINESTRING, POLYGON, suas formas MULTI e GEOMETRYCOLLECTION, em graus ou em metros Web Mercator, e AsText grava o mapa de volta
  • Em todas as edições a partir do Delphi 7; no .NET, ShapefileFormat e WktFormat com um callback Transform
Ler o tópico da ajuda
Renderize imagens de mapa em um servidor

Arquivos, renderização e dispositivos móveis

Renderize imagens de mapa em um servidor

Notas de entrega com a rota, um relatório diário com as ocorrências de hoje, uma miniatura para uma página web: muitos mapas nunca são mostrados em uma janela. O mesmo controle renderiza para um PNG ou um bitmap sem estar visível, a partir de um aplicativo de console ou de um serviço do Windows. Você pode verificar se todos os tiles chegaram antes de enviar a imagem, de modo que um servidor de tiles lento nunca acabe como um quadrado cinza em um documento do cliente. A renderização no servidor usa as mesmas camadas, marcadores e formas do controle interativo, então um mapa projetado na tela fica igual no PNG.

  • SaveToPNG e SaveToPNGFile, a partir do Delphi 2009
  • RenderToBitmap e SaveToBMPFile para o seu próprio pipeline
  • LastRenderMissingTiles informa os tiles que não estavam disponíveis
  • No .NET, MapView.RenderToPng também funciona no Linux
Ler o tópico da ajuda

Arquivos, renderização e dispositivos móveis

O mesmo mapa no desktop e no celular

Um despachante planeja em um desktop Windows e o motorista segue o plano em um celular. O TsgcFMXMap leva o mesmo modelo, camadas, marcadores, formas e serviços ao FireMonkey em Windows, macOS, iOS e Android, de modo que o código que você escreveu para o mapa VCL é aproveitado. O TsgcMapLocation lê a posição do dispositivo, para que o mapa possa se centralizar no usuário e segui-lo. O cache de tiles por camada também funciona no celular, então o aparelho continua mostrando as áreas que já carregou.

  • TsgcFMXMap no Windows a partir do Delphi XE6, e no macOS, iOS e Android a partir do Delphi 10.4 (macOS ARM a partir do Delphi 11), com as mesmas coleções do TsgcVCLMap
  • TsgcMapLocation no Windows, Android, iOS e macOS
  • A demo FMX mostra tiles, marcadores e localização em um só formulário, e a demo FMX Mobile é organizada para celulares e tablets
  • O núcleo independente de framework também compila para Linux 64 bits a partir do Delphi 10.4, para aplicativos de console e de servidor que usam as fontes de tiles, os formatos de arquivo e os dados offline
  • Três pacotes de runtime, sgcMaps (o núcleo), sgcMapsVCL e sgcMapsFMX, de modo que um aplicativo FireMonkey não carrega mais os pacotes VCL
  • As versões mínimas do Delphi por recurso estão listadas no tópico de instalação
Ler o tópico da ajuda

Arquivos, renderização e dispositivos móveis

O mapa no WPF e no Avalonia, declarado em XAML

TsgcWpfMap e TsgcAvaloniaMap levam o motor de mapa .NET para o WPF e para o Avalonia 12 com os recursos do controle WinForms: pan e zoom com o mouse, toque e teclado, camadas, marcadores, formas, impressão, exportação para PDF e UI Automation. Camadas e marcadores são declarados em XAML sob o prefixo sgc, e uma coleção do seu view model vira marcadores por meio de ItemsSource, de modo que adicionar uma loja à coleção a coloca no mapa e arrastar o marcador grava a nova posição de volta.

  • LatitudeMember, LongitudeMember, TooltipMember, PopupMember, ColorMember e DraggableMember mapeiam suas propriedades para os marcadores
  • SelectedItem, Zoom, Bearing, CenterLatitude e CenterLongitude têm binding bidirecional
  • As cores são escritas em XAML como texto #AARRGGBB ou #RRGGBB
  • NuGet esegece.sgcMaps.Wpf (net8.0-windows a net10.0-windows) e esegece.sgcMaps.Avalonia (net8.0 a net10.0), ambos com um pacote Community gratuito
  • Os projetos WpfDemo e AvaloniaDemo mostram a mesma janela nos dois frameworks
Ler o tópico da ajuda

Acessibilidade

UI Automation para leitores de tela e o teclado, sem nenhuma configuração.

Acessibilidade

Um mapa que o teclado alcança e que o UI Automation expõe

O sgcMaps expõe o mapa ao Microsoft UI Automation com uma alternativa em texto, os marcadores como uma lista e as camadas como uma lista, em que cada camada informa se está visível. Os marcadores podem ser alcançados pelo teclado.

  • As setas deslocam o mapa, as teclas de mais e de menos dão zoom, e Home volta à visão inicial
  • Page Up e Page Down movem para o marcador anterior ou seguinte, Enter ativa o marcador com foco e Esc limpa o foco do marcador
  • O mapa mostra um anel de foco visível enquanto tem o foco
  • No .NET, os controles de mapa WinForms, WPF e Avalonia expõem a mesma estrutura de UI Automation e o mesmo teclado

A acessibilidade vem ativada por padrão em todas as edições, inclusive a edição Community gratuita, no VCL em todas as versões do Delphi e do C++Builder do Delphi 7 ao Delphi 13, no FireMonkey no Windows e no WinForms, WPF e Avalonia. No Delphi e no C++Builder, AccessibleName e AccessibleDescription definem o nome e a descrição expostos ao UI Automation, e no .NET o nome acessível padrão e o texto de ajuda de cada framework fazem o mesmo. Consulte os relatórios de conformidade de acessibilidade, que ainda não cobrem os novos controles de mapa WPF e Avalonia. A imagem do mapa é descrita somente pelo seu centro e zoom, e o renderizador do mapa não segue o alto contraste do Windows, porque a imagem do mapa são tiles do provedor.

Leia o tópico da ajuda

Veja o sgcMaps em ação

sgcMaps dentro das demos da suíte sgcUI: aplicações completas que rodam offline com dados simulados integrados.

Quem cria com o sgcMaps

Serviço de campo e logística

Técnicos e motoristas precisam do mapa onde a cobertura é ruim. Prepare os tiles de uma região com antecedência, calcule rotas de carro no próprio dispositivo com o roteador offline e encontre endereços com o geocodificador offline. De volta ao escritório, o mesmo código desenha as rotas planejadas e as zonas de entrega, e renderiza um PNG de cada rota para a nota de entrega.

  • Funciona offline
  • Roteamento offline
  • Rotas e zonas
  • Imagens de mapa
Execute o demo OfflineServices

Rastreamento de ativos e frotas

Uma central de controle observa centenas de veículos, máquinas ou sensores ao mesmo tempo. O agrupamento mantém o mapa legível no nível do país e se divide em pinos individuais no nível da rua. Um mapa de calor mostra onde as ocorrências se concentram, as verificações de geofence com ponto em polígono geram alertas, e os eventos de clique nos marcadores abrem o registro do ativo nos seus próprios formulários.

  • Agrupamento
  • Mapas de calor
  • Geometria
  • Eventos
Execute o demo MapFeatures

GIS leve e aplicativos ao ar livre

Ferramentas de planejamento, aplicativos esportivos e software de levantamento vivem de trilhas GPX, camadas KML e zonas GeoJSON. O sgcMaps importa e exporta os três, mostra estatísticas de trilha e cores de elevação, e coloca o resultado sobre um mapa base topográfico. O controle FireMonkey leva os mesmos recursos a um tablet ou a um celular em campo. As estatísticas da trilha dão a subida e a descida totais de uma rota de relance.

  • GeoJSON, GPX, KML e shapefiles
  • Tiles topográficos
  • FireMonkey
Execute o demo OfflineMap

A Map in a Few Lines

The same API in Delphi, C++ Builder and C#: OpenStreetMap tiles, three markers, a geodesic line and a radius, fitted to the markers and saved as PNG.

A VCL map built in code: a cached OpenStreetMap layer, markers, a geodesic line and a circle, then a PNG of the result.

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;

Ler o tópico da ajuda →

The same map in C++ Builder with the generated 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);
}

Ler o tópico da ajuda →

The headless MapView renders the same map to a PNG file, on Windows or 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

Ler o tópico da ajuda →

Camadas WMS, Shapefiles e o Mapa no WPF

Uma sobreposição WMS e uma importação de shapefile com seus atributos em Delphi, e uma janela WPF com o mapa, uma camada e um marcador declarados em XAML.

Uma sobreposição WMS transparente com seu próprio cache de tiles, e um shapefile cujos parques são preenchidos de verde a partir da tabela de atributos. Ambos funcionam em todas as edições.

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;

Ler o tópico WMS → Ler o tópico de shapefile →

As camadas e os marcadores de um TsgcWpfMap são declarados em XAML sob o prefixo sgc. O code-behind adiciona um cache de tiles, uma linha e três 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

Ler o tópico da ajuda →

Execute os demos do sgcMaps

Onze demos Delphi e oito demos .NET acompanham o sgcMaps. Não há projetos de demo C++ Builder.

Somente Registrada OfflineMap

Tiles de pasta, MBTiles e online, marcadores e formas, além da importação de GeoJSON, GPX e KML.

MapFeatures

Provedores e chaves de API, agrupamento de marcadores, edição de formas, mapas de calor e exportação de imagem.

Services

Busca de lugares, geocodificação, rotas, elevação, fusos horários e localização do dispositivo com os provedores online. Delphi XE8 e posteriores.

Somente Registrada OfflineServices

Crie um índice GeoNames e um grafo de rotas do OpenStreetMap, depois busque lugares e trace rotas de carro, bicicleta ou a pé sem rede.

StaticRender

StaticRender

Um programa de console que renderiza um mapa em um arquivo PNG ou BMP sem janela.

FMX

O mapa FireMonkey com tiles, marcadores e localização do dispositivo, para Windows, macOS, iOS e Android. Delphi XE6 e posteriores.

VectorTiles

VectorTiles

Um servidor de tiles vetoriais desenhado com o estilo embutido ou um arquivo de estilo próprio, com rótulos nítidos em todos os níveis de zoom.

FMXMobile

O mapa FireMonkey feito para celulares e tablets: pan com um dedo, zoom com pinça, botões de zoom grandes, sua posição com um círculo de precisão e uma lista de lugares. Delphi 10.4 e posteriores.

OGCServices

Carrega um documento de capabilities WMS ou WMTS de uma URL ou de um arquivo, lista as camadas e adiciona a que você escolher como sobreposição no OpenStreetMap, com um controle deslizante de opacidade. Delphi 2009 e posteriores.

Somente Registrada PMTiles

Abre um arquivo PMTiles raster ou vetorial de um arquivo ou de uma URL, mostra seu cabeçalho e metadados e o adiciona como uma camada centralizada no arquivo. Delphi XE2 e posteriores.

ShapefileWKT

Importa um shapefile com sua tabela de atributos, mostra o registro de um marcador clicado e importa e exporta WKT.

WinFormsDemo

O SgcMapControl do .NET em uma janela WinForms com provedores, marcadores e formas.

WpfDemo

O mapa WPF declarado em XAML: camadas base e marcadores em markup, lojas vinculadas como marcadores com ItemsSource, controles deslizantes de zoom e de rotação, impressão e exportação para PDF.

AvaloniaDemo

A mesma janela com o controle de mapa Avalonia 12 e bindings compilados.

OgcServicesDemo

O controle de mapa WinForms com uma camada base do OpenStreetMap e uma sobreposição de um serviço WMS ou WMTS: carrega um documento de capabilities de uma URL ou de um arquivo, lista as camadas, adiciona a que você escolher com um controle deslizante de opacidade e mostra os erros de tile.

Somente Registrada PMTilesDemo

O controle de mapa WinForms com uma camada de um arquivo PMTiles raster ou vetorial, aberto de um arquivo ou de uma URL, com seu cabeçalho e metadados e o mapa centralizado no arquivo.

ShapefileWktDemo

O controle de mapa WinForms importando um shapefile com sua tabela de atributos e o registro de um marcador clicado, além da importação e exportação de WKT das sobreposições.

Somente Registrada OfflineDemo

O pacote offline do .NET: tiles, roteamento e geocodificação offline a partir de arquivos de dados locais.

ConsoleRenderDemo

ConsoleRenderDemo

Um console .NET que renderiza um mapa em PNG com o MapView headless, no Windows ou no Linux.

Demos compilados

Executáveis prontos para rodar de todos os produtos sgcUI, sem nada para instalar.

Baixar sgcUI_bin.zip →

Guia Primeiros Passos

Cinco demos QuickStart para Delphi (VCL) acompanham o produto em Demos\Maps\00.QuickStart. O guia em PDF as explica passo a passo: um primeiro mapa com marcadores, marcadores e rótulos adicionados em código, formas, os eventos do mapa, e um localizador de lojas.

Baixar o guia (PDF, em inglês) →

Onde o sgcMaps está incluído

O sgcMaps faz parte do sgcUI Enterprise e também é vendido separadamente. O sgcMaps também está incluído no pacote All-Access.

sgcMaps pacote individual

€149 / desenvolvedor, código-fonte completo, 1 ano de atualizações.

Comprar o sgcMaps → Ver preços →

sgcUI Enterprise

Todos os 17 produtos sgcUI, a partir de €699.

Ver Enterprise →

A edição .NET Community gratuita (NuGet esegece.sgcMaps.Community, esegece.sgcMaps.Rendering.Community, esegece.sgcMaps.WinForms.Community, esegece.sgcMaps.Wpf.Community, esegece.sgcMaps.Avalonia.Community) tem todos os recursos, exceto o pacote offline. O pacote esegece.sgcMaps.Offline é somente Registrada. Um projeto referencia os pacotes Community ou os Registrados, nunca os dois.

RecursoCommunity (gratuita)Registrada
Controles de mapa VCL, FireMonkey, WinForms, WPF e Avalonia✓✓
Provedores de tiles, servidores de tiles HTTP e vetoriais✓✓
Camadas WMS e WMTS✓✓
Pastas de tiles z/x/y e o cache de tiles por camada✓✓
Marcadores, agrupamento, formas, rótulos e mapas de calor✓✓
Funções de geometria✓✓
Importação e exportação de GeoJSON, GPX e KML✓✓
Importação de shapefile, importação e exportação de WKT✓✓
Geocodificação, rotas, lugares, elevação e fusos horários online✓✓
Renderização estática para PNG✓✓
Downloader de tiles para pacotes offline−✓
Arquivos MBTiles e PMTiles (raster e vetoriais)−✓
Roteador offline e geocodificador offline−✓

Frameworks e plataformas suportados

Componentes do sgcMaps

TsgcVCLMap and TsgcFMXMap

Os controles de mapa para VCL e FireMonkey, além de um controle LCL do Lazarus que lê tiles do disco.

Coleções do modelo

Layers, Markers, Polylines, Polygons, Rectangles, Circles, Labels e Heatmaps, compartilhados por todos os frameworks.

Serviços online

TsgcMapGeocoder, TsgcMapDirections, TsgcMapPlaces, TsgcMapElevation e TsgcMapTimeZone.

Ferramentas offline

TsgcMapRouteCalculator, TsgcMapOfflineRouter, TsgcMapOfflineGeocoder, TsgcMapGeoIndexBuilder e TsgcMapTileDownloader.

Formatos GIS e serviços OGC

TsgcMapShapefile, TsgcMapWKT, TsgcMapWMSCapabilities, TsgcMapWMTSCapabilities e TsgcMapTileSource_PMTiles.

TsgcMapLocation e auxiliares de geometria

Localização do dispositivo, e sgcMapDistance, rumo, ponto de destino, interpolação geodésica, ponto em polígono e simplificação de linhas.

Mapas .NET

SgcMapControl para WinForms, TsgcWpfMap para WPF, TsgcAvaloniaMap para Avalonia 12 e MapView, o motor headless que renderiza em PNG, também no Linux.

DestinoComponentePlataformas
Delphi 7 a 13, VCLTsgcVCLMap e o modeloWin32, Win64 a partir do XE2 e ARM64EC no Delphi 13
Delphi XE6 a 13, FireMonkeyTsgcFMXMapWindows a partir do XE6; macOS, iOS e Android a partir do Delphi 10.4 (macOS ARM a partir do Delphi 11); localização do dispositivo no Windows, Android, iOS e macOS
Delphi 10.4 a 13, Linux 64 bitsO núcleo independente de framework, sem controle de mapaFontes de tiles, serviços, formatos de arquivo e dados offline em aplicativos de console e de servidor
C++ Builder 2007 a 13TsgcVCLMap, TsgcFMXMap a partir do XE6 e o modeloSomente Windows: Win32, Win64 a partir do XE3 e Win64x no C++ Builder 13, com headers .hpp gerados e bibliotecas estáticas
LazarusControle de mapa LCLTiles somente do disco, não consegue baixar tiles
.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 no Windows e no Linux

Pacotes Delphi: sgcMaps contém o núcleo independente de framework, sgcMapsVCL o mapa VCL e sgcMapsFMX o mapa FireMonkey, com os pacotes de design dclsgcMaps e dclsgcMapsFMX. Um projeto compilado com pacotes de runtime que lista sgcMaps adiciona sgcMapsVCL ou sgcMapsFMX. Veja Pacotes e Plataformas.

Perguntas frequentes

Não. Os tiles, marcadores e formas são desenhados nativamente pelo controle, então não há web view, nem biblioteca JavaScript, nem runtime de navegador para implantar.

Não para o OpenStreetMap, o OpenTopoMap e os tiles da Esri, nem para o roteador e o geocodificador offline. Os tiles do MapTiler, do Thunderforest e do Stadia, e os provedores comerciais de geocodificação e roteamento, usam a sua própria chave. Cada provedor mantém os seus próprios termos de uso, que o seu aplicativo precisa respeitar.

Sim. Os tiles podem vir de pastas z/x/y, de um cache por camada, de arquivos MBTiles ou de arquivos PMTiles, as rotas do TsgcMapOfflineRouter e a busca de endereços do TsgcMapOfflineGeocoder. O MBTiles, o PMTiles, o downloader de tiles e o roteador e o geocodificador offline fazem parte do pacote offline da edição Registrada.

GeoJSON, GPX, KML e WKT com EWKT, para importação e exportação, e shapefiles Esri com seus atributos para importação, com estatísticas de trilhas GPX e cores de elevação. Um leitor em streaming também processa arquivos OpenStreetMap .osm.pbf e XML, que é como o grafo de rotas offline é construído. Veja Formatos de arquivo, Shapefile e WKT.

O modelo, o controle VCL, os shapefiles e o WKT funcionam a partir do Delphi 7 e do C++ Builder 2007. Alguns recursos têm um mínimo mais alto: saída PNG, servidores de tiles, WMS e WMTS a partir do Delphi 2009, tiles vetoriais, PMTiles e o roteador offline a partir do XE2, FireMonkey no Windows e GeoJSON a partir do XE6, MBTiles e o geocodificador offline a partir do XE7, serviços online a partir do XE8. O FireMonkey no macOS, iOS e Android, e as units do núcleo no Linux 64 bits, exigem o Delphi 10.4 ou posterior.

Sim. Uma camada com TileSourceType mtsWMS ou mtsWMTS solicita suas imagens a um serviço WMS 1.1.1 ou 1.3.0, ou a um serviço WMTS em codificação KVP ou REST, e os leitores de capabilities configuram a camada a partir da descrição do serviço. O mapa é Web Mercator, portanto as camadas WMS são solicitadas em EPSG:3857 e os serviços WMTS precisam de um tile matrix set Web Mercator. WMS e WMTS estão em todas as edições, inclusive a Community. Veja WMS e WMTS.

Sim. TsgcWpfMap (NuGet esegece.sgcMaps.Wpf) e TsgcAvaloniaMap (esegece.sgcMaps.Avalonia, Avalonia 12) hospedam o mesmo motor do SgcMapControl do WinForms. Camadas e marcadores podem ser declarados em XAML, marcadores vinculados a uma coleção com ItemsSource, e a view vinculada nos dois sentidos. Os dois também estão na edição Community gratuita. Veja Início rápido WPF e Início rápido Avalonia.

Os projetos de demo são apenas em Delphi, mas os componentes se instalam no C++ Builder 2007 a 13 e funcionam da mesma forma. A aba C++ Builder na seção de código acima mostra o mesmo mapa criado com os cabeçalhos gerados.

Sim. A edição Community é gratuita para pessoas físicas e organizações com receita bruta anual abaixo de 1 milhão de euros e no máximo 5 desenvolvedores. Ela tem todos os recursos, exceto o pacote offline. No .NET, os pacotes são esegece.sgcMaps.Community, esegece.sgcMaps.Rendering.Community, esegece.sgcMaps.WinForms.Community, esegece.sgcMaps.Wpf.Community e esegece.sgcMaps.Avalonia.Community. WMS, WMTS, shapefiles, WKT e os controles WPF e Avalonia também estão na Community. Organizações maiores precisam de uma licença Registrada.

Ajuda do sgcMaps

3,000+Desenvolvedores
20+Anos
761+Componentes
30+Integrações de API
5Plataformas
Garantia de reembolso de 30 diasNão ficou satisfeito? Solicite o reembolso total em até 30 dias após a compra. Ver política de reembolso

Experimente o sgcMaps hoje

A avaliação do sgcUI inclui o sgcMaps com o pacote offline e todos os outros produtos sgcUI. A edição .NET Community é gratuita no NuGet.