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
Nativo em qualquer lugarControles VCL, FireMonkey, Lazarus, WinForms, WPF e Avalonia que desenham o próprio mapa.
Seus dados no mapaMarcadores agrupados, rotas, zonas, círculos, rótulos e mapas de calor a partir do código ou de arquivos.
Funciona offlineTiles do disco, um roteador offline e um geocodificador offline, sem precisar de chave de API.
Mapas como imagensGere arquivos PNG a partir de um console, de um serviço ou de um processo .NET no Linux.
PRINCIPAIS RECURSOS
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.
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
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
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
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.
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.
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.
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
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
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
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
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.
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
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
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
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
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
A pré-visualização mostra exatamente o que a impressora e o PDF recebem.
Imprima, pré-visualize e exporte para PDF
Imprima a visão do mapa ou exporte um PDF acessível
O mapa é impresso em uma página como uma imagem da visão atual: a mesma área do controle, com o seu centro, o seu zoom, os tiles, as camadas, os marcadores e as formas. A barra de escala e a atribuição são impressas, os botões de zoom, o seletor de camadas e a bússola não, e imprimir nunca move a visão.
Print mostra a caixa de diálogo de impressão ou imprime direto na impressora padrão, e ShowPrintPreview abre uma pré-visualização com navegação por páginas, zoom, configuração de página, impressão e exportação para PDF
PrintSettings guarda o papel, a orientação, as margens, a escala e o texto do cabeçalho e do rodapé, e a impressora, a pré-visualização e o PDF usam todos o mesmo conjunto
ExportToPDF grava a página como uma única imagem com tags, a 192 dpi por padrão, com um texto alternativo que informa o centro, o zoom e o número de camadas e marcadores
PDFALevel de TsgcUIPDFOptions adiciona PDF/A-2a ou PDF/A-3a para arquivamento, sozinho ou junto com o PDF/UA
A impressão e a pré-visualização estão em todas as edições, inclusive na edição Community gratuita, em VCL, FireMonkey, WinForms, WPF e Avalonia. No FireMonkey, a impressão funciona no Windows e no macOS, e a pré-visualização e a exportação para PDF em todas as plataformas. A exportação para PDF exige a ponte sgcUIPDF e um sgcPDF licenciado (o pacote NuGet esegece.sgcUICore.sgcPDF no .NET), portanto não está na edição Community.
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.
Polilinhas, polígonos e mapas de calor desenhados no mesmo mapa.
Uma área, quatro provedores sem chave, cada um com a sua atribuição.
CASOS DE USO
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.
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.
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.
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;
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.
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}";
}
}
}
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
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
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
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.
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.
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.
Recurso
Community (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
−
✓
PLATAFORMAS
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.
Destino
Componente
Plataformas
Delphi 7 a 13, VCL
TsgcVCLMap e o modelo
Win32, Win64 a partir do XE2 e ARM64EC no Delphi 13
Delphi XE6 a 13, FireMonkey
TsgcFMXMap
Windows 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 bits
O núcleo independente de framework, sem controle de mapa
Fontes de tiles, serviços, formatos de arquivo e dados offline em aplicativos de console e de servidor
C++ Builder 2007 a 13
TsgcVCLMap, TsgcFMXMap a partir do XE6 e o modelo
Somente Windows: Win32, Win64 a partir do XE3 e Win64x no C++ Builder 13, com headers .hpp gerados e bibliotecas estáticas
WinForms 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.
FAQ
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 TileSourceTypemtsWMS 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.