Delphi、C++ Builder & .NET sgcUI 的一部分

sgcMaps,适用于 Delphi、C++ Builder & .NET 的原生地图

无需浏览器控件,也无需一行 JavaScript,就能在您的应用程序中放入真正的地图。sgcMaps 自行绘制栅格和矢量瓦片,显示数千个聚合标记、路线和区域,对地址进行地理编码,并借助本地瓦片和离线路由器在离线状态下继续工作。

VCL、FireMonkey、Lazarus、WinForms无浏览器控件,无 JavaScript免费 .NET 社区版包含在 sgcUI Enterprise 中
TsgcVCLMap 用矢量瓦片显示马德里市中心,带有红色和蓝色位置标记

地图应用所需的一切

十三项功能,每项都附有真实的 API 和对应的帮助主题。

瓦片和地图数据

地图控件自行绘制每一块瓦片,来源可以是瓦片服务器、矢量源或磁盘上的文件。

窗体中的真正地图,内部没有浏览器

瓦片和地图数据

窗体中的真正地图,内部没有浏览器

大多数地图组件封装的是 Web 视图和 JavaScript 库,因此您的桌面应用程序最终会带着一个浏览器发布。sgcMaps 不会。TsgcVCLMap 和 TsgcFMXMap 在自己的画布上下载、缓存并绘制瓦片,处理鼠标滚轮缩放和拖动平移,并引发普通的 Delphi 事件。您的地图和其他控件一样是原生控件:可以停靠,随窗体应用主题,调试方式也与代码的其余部分相同。没有需要部署或加固的额外进程,地图在您的应用程序运行的每台机器上表现都一样。

  • Layers 集合包含一个或多个 TsgcMapLayer 项,每个都有自己的 TileSourceType
  • TsgcFMXMap 自 Delphi XE6 起可在 Windows、macOS、iOS 和 Android 上运行
  • Lazarus LCL 控件显示磁盘上的瓦片
  • 在 .NET 中,用于 WinForms 的 SgcMapControl 和无界面的 MapView 共用一个引擎
  • 支持阿拉伯语和希伯来语的从右到左:缩放按钮、图层切换器、指南针、比例尺和版权归属移到相反一侧,而地图保持其地理方位
阅读帮助主题
用一个属性选择瓦片提供商

瓦片和地图数据

用一个属性选择瓦片提供商

选择底图不应该意味着去阅读瓦片服务器文档。在图层上设置 Provider 并调用 sgcMapApplyProvider:图层就会获得该提供商的 URL 模板、最大缩放级别和署名文字。OpenStreetMap、OpenTopoMap、Esri World Imagery 和 Esri World Street 无需密钥即可使用。MapTiler、Thunderforest 和 Stadia 需要您自己的 API 密钥。您自己的瓦片服务器只需一个 URL 模板。每个图层都有自己的提供商,因此卫星图层和街道图层可以同处一张地图,用户直接在地图上切换。

  • 无需密钥:mtpOpenStreetMap、mtpOpenTopoMap、mtpEsriWorldImagery、mtpEsriWorldStreet
  • 使用您的密钥:mtpMapTilerStreets、mtpMapTilerSatellite、mtpThunderforestCycle、mtpThunderforestTransport、mtpStadiaAlidadeSmooth
  • mtpCustom 配合 URLTemplate 可读取任意 {z}/{x}/{y} 服务器
  • 提供商的署名会自动绘制在地图上
  • ShowLayerSwitcher 在地图上放置一个图层按钮
阅读帮助主题
任何尺寸下都保持清晰的矢量瓦片

瓦片和地图数据

任何尺寸下都保持清晰的矢量瓦片

栅格瓦片缩放时会变模糊,而且每次样式更改都意味着要从服务器获取新图像。使用矢量瓦片时,控件接收几何数据,自行绘制道路、水系、建筑和标签,因此文字在高 DPI 屏幕和导出的图像中都保持清晰。让图层指向 Mapbox Vector Tile 服务器,并将 VectorStyleFile 留空即可使用内置样式,也可以加载 MapLibre 或 Mapbox GL 样式文件来匹配您的品牌。矢量图层在 VCL 和 FireMonkey 控件中都可使用。

  • mtsVectorHTTP 读取矢量瓦片服务器,自 Delphi XE2 起支持
  • mtsVectorMBTiles 读取本地矢量 MBTiles 文件(离线包)
  • TsgcMapVectorStyle 通过 LoadFromFile 或 LoadFromJSON 加载样式
  • 解码和绘制位于 TsgcMapTileSource_MVT 中,使用纯 Delphi 代码
阅读帮助主题

瓦片和地图数据 仅限注册版

网络断开时继续工作

地下室里的现场技术人员、海上的船只或工厂车间的网络,都不能依赖瓦片服务器。sgcMaps 读取磁盘上的瓦片,与读取网络瓦片完全一样。给图层设置 CacheFolder,它获取的每块瓦片都会保留到下次运行。要获得完整的离线包,TsgcMapTileDownloader 会提前把一个区域和缩放范围下载到文件夹或 MBTiles 文件中。

  • mtsFolder 读取 PNG 或 JPEG 瓦片的 z/x/y 文件夹
  • mtsMBTiles 读取栅格 MBTiles 文件,自 Delphi XE7 起支持(FireDAC SQLite)
  • CountTiles 在开始下载前告诉您下载的大小;DelayMS 和 OnProgress 让下载保持礼貌且可见
  • 批量下载必须遵守提供商的条款:OpenStreetMap 瓦片仅供交互式查看

社区版可读取 z/x/y 瓦片文件夹,并保留每个图层的 CacheFolder。瓦片下载器和 MBTiles 文件属于离线包。

阅读帮助主题

标记、形状和几何

把您自己的数据放到地图上,在每个缩放级别都保持可读,并完成背后的计算。

标记、形状和几何

数千个标记,依然清晰可读

车队、门店网络或传感器网格很快就会变成一团重叠的图钉。启用聚合后,相邻的标记会合并成一个带编号的气泡,用户放大时再次拆开,并在每个缩放级别重新计算。每个标记都带有自己的弹出框、提示和图标,点击、拖动和聚合点击都以事件形式送达,因此地图成为您工作流程的一部分,而不只是一张图片。标记可以根据您的数据在循环中添加,也可以从 GeoJSON、GPX 和 KML 文件导入,ClearMarkers 一次调用即可重置它们。

  • MarkerOptions.Clustering 配合 GridSize、MinClusterSize 和 ZoomOnClick
  • 每个标记都有 PopupText、TooltipText 和 IconBitmap
  • OnMarkerClick、OnClusterClick 和 OnMarkerDragEnd 事件
  • 批量加载时用 BeginUpdate 和 EndUpdate 包住;FitToMarkers 让所有标记入框
  • MarkerAtScreen 和 ClusterAtScreen 对任意像素进行命中测试
阅读帮助主题
一张地图上的路线、区域和热力图

标记、形状和几何

一张地图上的路线、区域和热力图

大多数地图界面需要的不只是图钉:计划的配送路线、仓库的服务区域、客户周围的半径、订单来自哪里。sgcMaps 把它们都绘制为地图模型的项,坐标与您的标记相同。形状可以设为可编辑,用户可以用鼠标拖动区域的顶点,编辑结束时您的代码会收到通知。标签在某个坐标放置文字,带有自己的字体、颜色和背景,使区域名称和路线编号始终附着在地图上。

  • AddPolyline,支持 Dashed 和 Geodesic 线
  • AddPolygon 配合 AddHole,以及 AddRectangle、AddCircle(RadiusMeters)和 AddLabel
  • Editable 形状通过 OnShapeEdited 报告更改
  • TsgcMapHeatmap 通过 AddPoint 接受加权点,并有 MaxIntensity
阅读帮助主题

标记、形状和几何

地理计算已经写好

这辆车在区域内吗?最近的仓库有多远?路线上哪个点离客户最近?每个地图应用程序都会遇到这些问题,而且在极点附近或长距离时很容易算错。几何单元在 WGS84 球面上回答这些问题,使用的是普通函数,您也可以在没有地图的服务中调用。这些函数接受普通的 TsgcMapCoord 记录,当您绘制自己的叠加层时,sgcMapLatLonToPixel 和 sgcMapPixelToLatLon 可在屏幕坐标和世界坐标之间转换。

  • sgcMapDistance(单位为米)、sgcMapInitialBearing 和 sgcMapDestinationPoint
  • sgcMapPointInPolygon 和 sgcMapPointInPolygonWithHoles 用于地理围栏
  • sgcMapNearestPointOnPolyline 把位置吸附到路线上
  • sgcMapGeodesicInterpolate 和 sgcMapSimplify 让线条平滑而轻量
阅读帮助主题

搜索和路线规划

使用在线提供商查找地址和规划路线,也可以完全离线,无需 API 密钥。

搜索和路线规划

地理编码、导航和地点,统一在一套 API 之后

每个地理编码和路线规划提供商都有自己的 REST 格式、密钥和怪癖。服务组件把它们隐藏起来:您选择提供商,需要时设置密钥,然后调用相同的方法,同步或异步均可。从一个提供商切换到另一个只需更改一个属性,而不必重写,结果会以 Delphi 对象的形式返回,可直接放到地图上。每个组件都共用 TsgcMapService 基类,因此 ApiKey、UserAgent 和 LastError 对每个提供商的工作方式都相同。

  • TsgcMapGeocoder:Nominatim、Google、HERE、Azure Maps、Mapbox、OpenRouteService 和 Geoapify
  • TsgcMapDirections:OSRM、OpenRouteService、Google Routes、HERE、Azure Maps、Mapbox 和 Geoapify
  • TsgcMapPlaces 用于地址自动补全,另有 TsgcMapElevation 和 TsgcMapTimeZone
  • GeocodeAsync、GetRouteAsync 和 SuggestAsync 让界面保持响应;错误通过 OnError 送达
阅读帮助主题

搜索和路线规划 仅限注册版

无需互联网和密钥的路线与地址搜索

在线路线规划恰恰在现场应用使用的地方失效,而且每次请求都可能花钱。离线路由器在设备上计算汽车、自行车和步行路线,所用路线图由一份 OpenStreetMap 提取数据一次性构建。离线地理编码器根据 SQLite 中的 GeoNames 索引搜索地名,并对点击位置进行反向地理编码。两者都无需网络、账户和按请求收费。路由器和地理编码器是非可视组件,因此 Windows 服务或控制台工具无需在屏幕上显示地图就能回答路线和地址请求。

  • TsgcMapOfflineRouter 根据 TsgcMapRouteGraphBuilder 从 .osm.pbf 构建的图来响应 GetRoute
  • sgcMapAddRouteToPolylines 把结果绘制到地图上
  • TsgcMapOfflineGeocoder 配合 ReverseGeocode,使用由 TsgcMapGeoIndexBuilder 构建的索引
  • 用于构建路线图和索引的命令行工具位于 Tools 文件夹中

社区版使用在线服务;离线路由器和地理编码器属于离线包。

阅读帮助主题

文件、渲染和移动端

与其他工具交换地理数据,在没有屏幕的地方渲染地图,并把地图带到手机上。

文件、渲染和移动端

打开用户已有的文件

客户会发来 GPS 手表的轨迹、在 GIS 工具中绘制的区域,或来自其他系统的 KML。sgcMaps 把 GeoJSON、GPX 和 KML 直接读写到地图模型中,因此导入只需一次调用,导出也只需一次调用。GPX 轨迹附带统计数据,并可按海拔着色,流式读取器可以遍历大型 OpenStreetMap 提取数据而无需把它们载入内存。导出使用反向的相同函数,因此用户在地图上绘制的区域可以保存为 GeoJSON 或 KML,并在其他 GIS 工具中打开。

  • sgcMapLoadGeoJSONFile 和 sgcMapSaveGeoJSONFile,自 Delphi XE6 起支持
  • TsgcMapGPX 配合 TrackStats(TotalAscent、TotalDescent)和 ColorByElevation
  • sgcMapLoadKMLFile 和 sgcMapSaveKMLFile
  • OpenStreetMap 读取器通过事件以流方式处理 .osm.pbf 和 XML 文件
  • sgcMapGeoJSONAsText 以字符串形式返回地图的 GeoJSON
阅读帮助主题
在服务器上渲染地图图像

文件、渲染和移动端

在服务器上渲染地图图像

附有路线的送货单、含今日事件的每日报告、网页缩略图:许多地图从不显示在窗口中。同一个控件可以在不可见的情况下渲染为 PNG 或位图,可用于控制台应用程序或 Windows 服务。在发送图像之前,您可以检查每块瓦片是否都已到达,因此缓慢的瓦片服务器永远不会在客户文档中变成一块灰色方块。服务器端渲染使用与交互式控件相同的图层、标记和形状,所以在屏幕上设计的地图在 PNG 中看起来完全一样。

  • SaveToPNG 和 SaveToPNGFile,自 Delphi 2009 起支持
  • RenderToBitmap 和 SaveToBMPFile 用于您自己的处理流程
  • LastRenderMissingTiles 报告不可用的瓦片
  • 在 .NET 中,MapView.RenderToPng 也可在 Linux 上运行
阅读帮助主题

文件、渲染和移动端

桌面和移动端相同的地图

调度员在 Windows 桌面上做计划,司机在手机上按计划行驶。TsgcFMXMap 把相同的模型、图层、标记、形状和服务带到 Windows、macOS、iOS 和 Android 上的 FireMonkey,因此您为 VCL 地图编写的代码可以沿用。TsgcMapLocation 读取设备的位置,地图可以以用户为中心并跟随用户。每个图层的瓦片缓存在移动端同样有效,所以手机会继续显示它已经加载过的区域。

  • TsgcFMXMap 自 Delphi XE6 起提供,集合与 TsgcVCLMap 相同
  • TsgcMapLocation 支持 Windows、Android、iOS 和 macOS
  • FMX 演示在一个窗体中展示瓦片、标记和位置
  • 各功能所需的最低 Delphi 版本列在安装主题中
阅读帮助主题

无障碍

面向屏幕阅读器的 UI Automation 和键盘,无需任何设置。

无障碍

键盘可以到达、UI Automation 可以公开的地图

sgcMaps 将地图连同替代文本、作为列表的标记和作为列表的图层向 Microsoft UI Automation 公开,每个图层会报告自己是否可见。标记可以用键盘到达。

  • 方向键平移地图,加号和减号键缩放,Home 返回起始视图
  • Page Up 和 Page Down 移到上一个或下一个标记,Enter 激活焦点标记,Esc 清除标记焦点
  • 地图获得焦点时显示可见的焦点环
  • 在 .NET 中,sgcMaps 是 WinForms 控件,因此地图在 WinForms 上可访问

无障碍功能在每个版本中默认开启,包括免费的社区版,可用于 VCL(Delphi 和 C++Builder 从 Delphi 7 到 Delphi 13 的每个版本)、Windows 上的 FireMonkey,以及 WinForms。在 Delphi 和 C++Builder 中,AccessibleName 和 AccessibleDescription 设置向 UI Automation 公开的名称和说明,在 .NET 中,各框架标准的无障碍名称和帮助文本起同样的作用。请参见无障碍符合性报告。地图图像仅用其中心和缩放级别来描述,并且地图渲染器不遵循 Windows 高对比度,因为地图图像是提供商的瓦片图像。

阅读帮助主题

查看 sgcMaps 的实际效果

sgcUI 套件演示中的 sgcMaps:使用内置模拟数据、可离线运行的完整应用程序。

谁在用 sgcMaps 构建应用

现场服务和物流

技术人员和司机需要在信号差的地方使用地图。提前准备好一个区域的瓦片,用离线路由器在设备上计算汽车路线,并用离线地理编码器查找地址。回到办公室后,同样的代码会绘制计划的路线和配送区域,并为每条路线渲染一张 PNG 放到送货单上。

  • 离线可用
  • 离线路线规划
  • 路线和区域
  • 地图图像
运行 OfflineServices 演示

资产和车队跟踪

控制室同时监控数百辆车辆、机器或传感器。聚合让地图在国家级别保持可读,在街道级别则拆分为单个图钉。热力图显示事件集中在哪里,用点在多边形内进行地理围栏检查可触发警报,标记点击事件则在您自己的窗体中打开资产的记录。

  • 聚合
  • 热力图
  • 几何
  • 事件
运行 MapFeatures 演示

轻量 GIS 和户外应用

规划工具、运动应用和测量软件都依赖 GPX 轨迹、KML 图层和 GeoJSON 区域。sgcMaps 可导入和导出这三种格式,显示轨迹统计和海拔颜色,并把结果放在地形底图上。FireMonkey 控件把相同的功能带到野外使用的平板电脑或手机上。轨迹统计让您一眼看到路线的总上升和总下降。

  • GeoJSON、GPX 和 KML
  • 地形瓦片
  • FireMonkey
运行 OfflineMap 演示

几行代码实现地图

Delphi、C++ Builder 和 C# 中的同一套 API:OpenStreetMap 瓦片、三个标记、一条大地线和一个半径,适应标记范围并保存为 PNG。

在代码中构建的 VCL 地图:带缓存的 OpenStreetMap 图层、标记、一条大地线和一个圆,然后输出结果的 PNG。

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;

阅读帮助主题 →

C++ Builder 中使用生成的 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);
}

阅读帮助主题 →

无界面的 MapView 在 Windows 或 Linux 上把同一张地图渲染为 PNG 文件。

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

阅读帮助主题 →

运行 sgcMaps 演示

sgcMaps 附带七个 Delphi 演示和三个 .NET 演示。没有 C++ Builder 演示项目。

仅限注册版 OfflineMap

文件夹、MBTiles 和在线瓦片、标记和形状,以及 GeoJSON、GPX 和 KML 导入。

MapFeatures

提供商和 API 密钥、标记聚合、形状编辑、热力图和图像导出。

Services

使用在线提供商进行地点搜索、地理编码、导航、海拔、时区和设备定位。需要 Delphi XE8 及更高版本。

仅限注册版 OfflineServices

构建 GeoNames 索引和 OpenStreetMap 路线图,然后在没有网络的情况下搜索地点并规划汽车、自行车或步行路线。

StaticRender

StaticRender

不带窗口、把地图渲染为 PNG 或 BMP 文件的控制台程序。

FMX

FireMonkey 地图,含瓦片、标记和设备定位,适用于 Windows、macOS、iOS 和 Android。需要 Delphi XE6 及更高版本。

VectorTiles

VectorTiles

用内置样式或您自己的样式文件绘制的矢量瓦片服务器,在每个缩放级别都有清晰的标签。

WinFormsDemo

WinForms 窗口中的 .NET SgcMapControl,含提供商、标记和形状。

仅限注册版 OfflineDemo

.NET 离线包:来自本地数据文件的离线瓦片、路线规划和地理编码。

ConsoleRenderDemo

ConsoleRenderDemo

用无界面 MapView 把地图渲染为 PNG 的 .NET 控制台程序,可在 Windows 或 Linux 上运行。

预编译演示

每款 sgcUI 产品的可直接运行的可执行文件,无需安装。

下载 sgcUI_bin.zip →

sgcMaps 包含在哪些版本中

sgcMaps 是 sgcUI Enterprise 的一部分,也可单独购买。sgcMaps 同样包含在 All-Access 中。

sgcMaps 单品包

€149 / 开发者,含完整源代码,1 年更新。

购买 sgcMaps → 查看价格 →

sgcUI Enterprise

全部 14 款 sgcUI 产品,起价 €699。

查看 Enterprise →

免费社区版(Delphi 安装程序和 NuGet 上的 esegece.sgcMaps.Community、esegece.sgcMaps.Rendering.Community、esegece.sgcMaps.WinForms.Community)拥有除离线包之外的所有功能。esegece.sgcMaps.Offline 包仅限注册版。一个项目引用社区版或注册版的包,不能同时引用两者。

功能社区版(免费)注册版
VCL、FireMonkey 和 WinForms 地图控件✓✓
瓦片提供商、HTTP 和矢量瓦片服务器✓✓
z/x/y 瓦片文件夹和每个图层的瓦片缓存✓✓
标记、聚合、形状、标签和热力图✓✓
几何函数✓✓
GeoJSON、GPX 和 KML 导入与导出✓✓
在线地理编码、导航、地点、海拔和时区✓✓
静态渲染为 PNG✓✓
用于离线包的瓦片下载器−✓
MBTiles 文件(栅格和矢量)−✓
离线路由器和离线地理编码器−✓

支持的框架与平台

sgcMaps 中的组件

TsgcVCLMap and TsgcFMXMap

适用于 VCL 和 FireMonkey 的地图控件,以及读取磁盘瓦片的 Lazarus LCL 控件。

模型集合

Layers、Markers、Polylines、Polygons、Rectangles、Circles、Labels 和 Heatmaps,所有框架共用。

在线服务

TsgcMapGeocoder, TsgcMapDirections, TsgcMapPlaces, TsgcMapElevation and TsgcMapTimeZone.

离线工具

TsgcMapRouteCalculator, TsgcMapOfflineRouter, TsgcMapOfflineGeocoder, TsgcMapGeoIndexBuilder and TsgcMapTileDownloader.

TsgcMapLocation 和几何辅助函数

设备定位,以及 sgcMapDistance、方位角、目标点、大地线插值、点在多边形内和线条简化。

.NET 地图

用于 WinForms 的 SgcMapControl,以及渲染为 PNG 的无界面引擎 MapView,也可在 Linux 上运行。

目标组件平台
Delphi 7 至 13,VCLTsgcVCLMap 和模型Win32,以及自 XE2 起的 Win64
Delphi XE6 至 13,FireMonkeyTsgcFMXMapWindows、macOS、iOS 和 Android,设备定位支持 Windows、Android、iOS 和 macOS
C++ Builder 2007 至 13TsgcVCLMap 和模型生成的 .hpp 头文件和静态库
LazarusLCL 地图控件仅支持磁盘上的瓦片,不能下载瓦片
.NET 8、9 和 10SgcMapControl, MapViewWinForms(net8.0-windows、net9.0-windows、net10.0-windows),在 Windows 和 Linux 上输出无界面 PNG

常见问题解答

不需要。瓦片、标记和形状都由控件原生绘制,因此没有 Web 视图,没有 JavaScript 库,也没有需要部署的浏览器运行时。

OpenStreetMap、OpenTopoMap 和 Esri 瓦片不需要,离线路由器和地理编码器也不需要。MapTiler、Thunderforest 和 Stadia 瓦片,以及商业地理编码和路线规划提供商,需要使用您自己的密钥。每个提供商都有自己的使用条款,您的应用程序必须遵守。

可以。瓦片可以来自 z/x/y 文件夹、每个图层的缓存或 MBTiles 文件,路线来自 TsgcMapOfflineRouter,地址搜索来自 TsgcMapOfflineGeocoder。MBTiles、瓦片下载器以及离线路由器和地理编码器属于注册版的离线包。

GeoJSON、GPX 和 KML,可导入和导出,并带有 GPX 轨迹统计和海拔颜色。流式读取器还可处理 OpenStreetMap .osm.pbf 和 XML 文件,离线路线图就是这样构建的。请参阅文件格式。

模型和 VCL 控件自 Delphi 7 和 C++ Builder 2007 起可用。某些功能的最低版本更高:PNG 输出和瓦片服务器需要 Delphi 2009,矢量瓦片和离线路由器需要 XE2,FireMonkey 和 GeoJSON 需要 XE6,MBTiles 和离线地理编码器需要 XE7,在线服务需要 XE8。

演示项目仅有 Delphi 版本,但组件可以安装到 C++ Builder 2007 至 13 中,工作方式相同。上面代码部分的 C++ Builder 选项卡展示了用生成的头文件构建的同一张地图。

有。社区版对个人以及年总收入低于 100 万欧元且开发人员不超过 5 人的组织免费。它拥有除离线包之外的所有功能。在 .NET 上,软件包为 esegece.sgcMaps.Community、esegece.sgcMaps.Rendering.Community 和 esegece.sgcMaps.WinForms.Community。规模更大的组织需要注册版授权。

sgcMaps 帮助

3,000+开发者
20+年
761+组件
30+API 集成
5平台
30 天退款保证不满意?可在购买后 30 天内申请全额退款。 查看退款政策

立即试用 sgcMaps

sgcUI 试用版包含带离线包的 sgcMaps 和所有其他 sgcUI 产品。.NET 社区版在 NuGet 上免费提供。