现场服务和物流
技术人员和司机需要在信号差的地方使用地图。提前准备好一个区域的瓦片,用离线路由器在设备上计算汽车路线,并用离线地理编码器查找地址。回到办公室后,同样的代码会绘制计划的路线和配送区域,并为每条路线渲染一张 PNG 放到送货单上。
- 离线可用
- 离线路线规划
- 路线和区域
- 地图图像
无需浏览器控件,也无需一行 JavaScript,就能在您的应用程序中放入真正的地图。sgcMaps 自行绘制栅格和矢量瓦片,显示数千个聚合标记、路线和区域,对地址进行地理编码,并借助本地瓦片和离线路由器在离线状态下继续工作。
十三项功能,每项都附有真实的 API 和对应的帮助主题。
地图控件自行绘制每一块瓦片,来源可以是瓦片服务器、矢量源或磁盘上的文件。
瓦片和地图数据
大多数地图组件封装的是 Web 视图和 JavaScript 库,因此您的桌面应用程序最终会带着一个浏览器发布。sgcMaps 不会。TsgcVCLMap 和 TsgcFMXMap 在自己的画布上下载、缓存并绘制瓦片,处理鼠标滚轮缩放和拖动平移,并引发普通的 Delphi 事件。您的地图和其他控件一样是原生控件:可以停靠,随窗体应用主题,调试方式也与代码的其余部分相同。没有需要部署或加固的额外进程,地图在您的应用程序运行的每台机器上表现都一样。
Layers 集合包含一个或多个 TsgcMapLayer 项,每个都有自己的 TileSourceTypeTsgcFMXMap 自 Delphi XE6 起可在 Windows、macOS、iOS 和 Android 上运行SgcMapControl 和无界面的 MapView 共用一个引擎
瓦片和地图数据
选择底图不应该意味着去阅读瓦片服务器文档。在图层上设置 Provider 并调用 sgcMapApplyProvider:图层就会获得该提供商的 URL 模板、最大缩放级别和署名文字。OpenStreetMap、OpenTopoMap、Esri World Imagery 和 Esri World Street 无需密钥即可使用。MapTiler、Thunderforest 和 Stadia 需要您自己的 API 密钥。您自己的瓦片服务器只需一个 URL 模板。每个图层都有自己的提供商,因此卫星图层和街道图层可以同处一张地图,用户直接在地图上切换。
mtpOpenStreetMap、mtpOpenTopoMap、mtpEsriWorldImagery、mtpEsriWorldStreetmtpMapTilerStreets、mtpMapTilerSatellite、mtpThunderforestCycle、mtpThunderforestTransport、mtpStadiaAlidadeSmoothmtpCustom 配合 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 让下载保持礼貌且可见社区版可读取 z/x/y 瓦片文件夹,并保留每个图层的 CacheFolder。瓦片下载器和 MBTiles 文件属于离线包。
阅读帮助主题把您自己的数据放到地图上,在每个缩放级别都保持可读,并完成背后的计算。
标记、形状和几何
车队、门店网络或传感器网格很快就会变成一团重叠的图钉。启用聚合后,相邻的标记会合并成一个带编号的气泡,用户放大时再次拆开,并在每个缩放级别重新计算。每个标记都带有自己的弹出框、提示和图标,点击、拖动和聚合点击都以事件形式送达,因此地图成为您工作流程的一部分,而不只是一张图片。标记可以根据您的数据在循环中添加,也可以从 GeoJSON、GPX 和 KML 文件导入,ClearMarkers 一次调用即可重置它们。
MarkerOptions.Clustering 配合 GridSize、MinClusterSize 和 ZoomOnClickPopupText、TooltipText 和 IconBitmapOnMarkerClick、OnClusterClick 和 OnMarkerDragEnd 事件BeginUpdate 和 EndUpdate 包住;FitToMarkers 让所有标记入框MarkerAtScreen 和 ClusterAtScreen 对任意像素进行命中测试
标记、形状和几何
大多数地图界面需要的不只是图钉:计划的配送路线、仓库的服务区域、客户周围的半径、订单来自哪里。sgcMaps 把它们都绘制为地图模型的项,坐标与您的标记相同。形状可以设为可编辑,用户可以用鼠标拖动区域的顶点,编辑结束时您的代码会收到通知。标签在某个坐标放置文字,带有自己的字体、颜色和背景,使区域名称和路线编号始终附着在地图上。
AddPolyline,支持 Dashed 和 Geodesic 线AddPolygon 配合 AddHole,以及 AddRectangle、AddCircle(RadiusMeters)和 AddLabelEditable 形状通过 OnShapeEdited 报告更改TsgcMapHeatmap 通过 AddPoint 接受加权点,并有 MaxIntensity标记、形状和几何
这辆车在区域内吗?最近的仓库有多远?路线上哪个点离客户最近?每个地图应用程序都会遇到这些问题,而且在极点附近或长距离时很容易算错。几何单元在 WGS84 球面上回答这些问题,使用的是普通函数,您也可以在没有地图的服务中调用。这些函数接受普通的 TsgcMapCoord 记录,当您绘制自己的叠加层时,sgcMapLatLonToPixel 和 sgcMapPixelToLatLon 可在屏幕坐标和世界坐标之间转换。
sgcMapDistance(单位为米)、sgcMapInitialBearing 和 sgcMapDestinationPointsgcMapPointInPolygon 和 sgcMapPointInPolygonWithHoles 用于地理围栏sgcMapNearestPointOnPolyline 把位置吸附到路线上sgcMapGeodesicInterpolate 和 sgcMapSimplify 让线条平滑而轻量使用在线提供商查找地址和规划路线,也可以完全离线,无需 API 密钥。
搜索和路线规划
每个地理编码和路线规划提供商都有自己的 REST 格式、密钥和怪癖。服务组件把它们隐藏起来:您选择提供商,需要时设置密钥,然后调用相同的方法,同步或异步均可。从一个提供商切换到另一个只需更改一个属性,而不必重写,结果会以 Delphi 对象的形式返回,可直接放到地图上。每个组件都共用 TsgcMapService 基类,因此 ApiKey、UserAgent 和 LastError 对每个提供商的工作方式都相同。
TsgcMapGeocoder:Nominatim、Google、HERE、Azure Maps、Mapbox、OpenRouteService 和 GeoapifyTsgcMapDirections:OSRM、OpenRouteService、Google Routes、HERE、Azure Maps、Mapbox 和 GeoapifyTsgcMapPlaces 用于地址自动补全,另有 TsgcMapElevation 和 TsgcMapTimeZoneGeocodeAsync、GetRouteAsync 和 SuggestAsync 让界面保持响应;错误通过 OnError 送达搜索和路线规划 仅限注册版
在线路线规划恰恰在现场应用使用的地方失效,而且每次请求都可能花钱。离线路由器在设备上计算汽车、自行车和步行路线,所用路线图由一份 OpenStreetMap 提取数据一次性构建。离线地理编码器根据 SQLite 中的 GeoNames 索引搜索地名,并对点击位置进行反向地理编码。两者都无需网络、账户和按请求收费。路由器和地理编码器是非可视组件,因此 Windows 服务或控制台工具无需在屏幕上显示地图就能回答路线和地址请求。
TsgcMapOfflineRouter 根据 TsgcMapRouteGraphBuilder 从 .osm.pbf 构建的图来响应 GetRoutesgcMapAddRouteToPolylines 把结果绘制到地图上TsgcMapOfflineGeocoder 配合 ReverseGeocode,使用由 TsgcMapGeoIndexBuilder 构建的索引社区版使用在线服务;离线路由器和地理编码器属于离线包。
阅读帮助主题与其他工具交换地理数据,在没有屏幕的地方渲染地图,并把地图带到手机上。
文件、渲染和移动端
客户会发来 GPS 手表的轨迹、在 GIS 工具中绘制的区域,或来自其他系统的 KML。sgcMaps 把 GeoJSON、GPX 和 KML 直接读写到地图模型中,因此导入只需一次调用,导出也只需一次调用。GPX 轨迹附带统计数据,并可按海拔着色,流式读取器可以遍历大型 OpenStreetMap 提取数据而无需把它们载入内存。导出使用反向的相同函数,因此用户在地图上绘制的区域可以保存为 GeoJSON 或 KML,并在其他 GIS 工具中打开。
sgcMapLoadGeoJSONFile 和 sgcMapSaveGeoJSONFile,自 Delphi XE6 起支持TsgcMapGPX 配合 TrackStats(TotalAscent、TotalDescent)和 ColorByElevationsgcMapLoadKMLFile 和 sgcMapSaveKMLFilesgcMapGeoJSONAsText 以字符串形式返回地图的 GeoJSON
文件、渲染和移动端
附有路线的送货单、含今日事件的每日报告、网页缩略图:许多地图从不显示在窗口中。同一个控件可以在不可见的情况下渲染为 PNG 或位图,可用于控制台应用程序或 Windows 服务。在发送图像之前,您可以检查每块瓦片是否都已到达,因此缓慢的瓦片服务器永远不会在客户文档中变成一块灰色方块。服务器端渲染使用与交互式控件相同的图层、标记和形状,所以在屏幕上设计的地图在 PNG 中看起来完全一样。
SaveToPNG 和 SaveToPNGFile,自 Delphi 2009 起支持RenderToBitmap 和 SaveToBMPFile 用于您自己的处理流程LastRenderMissingTiles 报告不可用的瓦片MapView.RenderToPng 也可在 Linux 上运行文件、渲染和移动端
调度员在 Windows 桌面上做计划,司机在手机上按计划行驶。TsgcFMXMap 把相同的模型、图层、标记、形状和服务带到 Windows、macOS、iOS 和 Android 上的 FireMonkey,因此您为 VCL 地图编写的代码可以沿用。TsgcMapLocation 读取设备的位置,地图可以以用户为中心并跟随用户。每个图层的瓦片缓存在移动端同样有效,所以手机会继续显示它已经加载过的区域。
TsgcFMXMap 自 Delphi XE6 起提供,集合与 TsgcVCLMap 相同TsgcMapLocation 支持 Windows、Android、iOS 和 macOS预览显示的内容与打印机和 PDF 得到的完全一致。
打印、预览和 PDF
地图以当前视图图片的形式打印在一页上:范围与控件相同,包含其中心、缩放级别、瓦片、图层、标记和形状。比例尺和版权归属会被打印,缩放按钮、图层切换器和指南针则不会,打印也绝不会移动视图。
Print 显示打印对话框或直接打印到默认打印机,ShowPrintPreview 打开带有翻页、缩放、页面设置、打印和 PDF 导出的预览PrintSettings 保存纸张、方向、页边距、缩放以及页眉和页脚文字,打印机、预览和 PDF 都使用它ExportToPDF 把页面写成一张带标签的图片(默认 192 dpi),并附上给出中心、缩放级别以及图层和标记数量的替代文本TsgcUIPDFOptions 的 PDFALevel 可为归档加上 PDF/A-2a 或 PDF/A-3a,可单独使用,也可与 PDF/UA 同时使用打印和预览包含在每个版本中,包括免费的社区版,可用于 VCL、FireMonkey 和 WinForms。在 FireMonkey 中,打印在 Windows 和 macOS 上可用,预览和 PDF 导出则适用于所有平台。PDF 导出需要 sgcUIPDF 桥接和已获许可的 sgcPDF(在 .NET 中为 NuGet 包 esegece.sgcUICore.sgcPDF),因此不包含在社区版中。
面向屏幕阅读器的 UI Automation 和键盘,无需任何设置。
无障碍
sgcMaps 将地图连同替代文本、作为列表的标记和作为列表的图层向 Microsoft UI Automation 公开,每个图层会报告自己是否可见。标记可以用键盘到达。
无障碍功能在每个版本中默认开启,包括免费的社区版,可用于 VCL(Delphi 和 C++Builder 从 Delphi 7 到 Delphi 13 的每个版本)、Windows 上的 FireMonkey,以及 WinForms。在 Delphi 和 C++Builder 中,AccessibleName 和 AccessibleDescription 设置向 UI Automation 公开的名称和说明,在 .NET 中,各框架标准的无障碍名称和帮助文本起同样的作用。请参见无障碍符合性报告。地图图像仅用其中心和缩放级别来描述,并且地图渲染器不遵循 Windows 高对比度,因为地图图像是提供商的瓦片图像。
sgcUI 套件演示中的 sgcMaps:使用内置模拟数据、可离线运行的完整应用程序。
一张地图上的 48 辆车、它们的路线和一个封闭多边形。
Altamira Fleet →
街道级别的城市路线和送货站点。
Altamira Fleet →
四座工厂以状态标记显示,并标出各站点的产量。
Altamira Plant →
项目站点以按 RAG 状态着色的标记显示。
Altamira PMO →
技术人员和司机需要在信号差的地方使用地图。提前准备好一个区域的瓦片,用离线路由器在设备上计算汽车路线,并用离线地理编码器查找地址。回到办公室后,同样的代码会绘制计划的路线和配送区域,并为每条路线渲染一张 PNG 放到送货单上。
控制室同时监控数百辆车辆、机器或传感器。聚合让地图在国家级别保持可读,在街道级别则拆分为单个图钉。热力图显示事件集中在哪里,用点在多边形内进行地理围栏检查可触发警报,标记点击事件则在您自己的窗体中打开资产的记录。
规划工具、运动应用和测量软件都依赖 GPX 轨迹、KML 图层和 GeoJSON 区域。sgcMaps 可导入和导出这三种格式,显示轨迹统计和海拔颜色,并把结果放在地形底图上。FireMonkey 控件把相同的功能带到野外使用的平板电脑或手机上。轨迹统计让您一眼看到路线的总上升和总下降。
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.RenderingsgcMaps 附带七个 Delphi 演示和三个 .NET 演示。没有 C++ Builder 演示项目。
文件夹、MBTiles 和在线瓦片、标记和形状,以及 GeoJSON、GPX 和 KML 导入。
提供商和 API 密钥、标记聚合、形状编辑、热力图和图像导出。
使用在线提供商进行地点搜索、地理编码、导航、海拔、时区和设备定位。需要 Delphi XE8 及更高版本。
构建 GeoNames 索引和 OpenStreetMap 路线图,然后在没有网络的情况下搜索地点并规划汽车、自行车或步行路线。
不带窗口、把地图渲染为 PNG 或 BMP 文件的控制台程序。
FireMonkey 地图,含瓦片、标记和设备定位,适用于 Windows、macOS、iOS 和 Android。需要 Delphi XE6 及更高版本。
用内置样式或您自己的样式文件绘制的矢量瓦片服务器,在每个缩放级别都有清晰的标签。
WinForms 窗口中的 .NET SgcMapControl,含提供商、标记和形状。
.NET 离线包:来自本地数据文件的离线瓦片、路线规划和地理编码。
用无界面 MapView 把地图渲染为 PNG 的 .NET 控制台程序,可在 Windows 或 Linux 上运行。
免费社区版(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 文件(栅格和矢量) | − | ✓ |
| 离线路由器和离线地理编码器 | − | ✓ |
适用于 VCL 和 FireMonkey 的地图控件,以及读取磁盘瓦片的 Lazarus LCL 控件。
Layers、Markers、Polylines、Polygons、Rectangles、Circles、Labels 和 Heatmaps,所有框架共用。
TsgcMapGeocoder, TsgcMapDirections, TsgcMapPlaces, TsgcMapElevation and TsgcMapTimeZone.
TsgcMapRouteCalculator, TsgcMapOfflineRouter, TsgcMapOfflineGeocoder, TsgcMapGeoIndexBuilder and TsgcMapTileDownloader.
设备定位,以及 sgcMapDistance、方位角、目标点、大地线插值、点在多边形内和线条简化。
用于 WinForms 的 SgcMapControl,以及渲染为 PNG 的无界面引擎 MapView,也可在 Linux 上运行。
| 目标 | 组件 | 平台 |
|---|---|---|
| Delphi 7 至 13,VCL | TsgcVCLMap 和模型 | Win32,以及自 XE2 起的 Win64 |
| Delphi XE6 至 13,FireMonkey | TsgcFMXMap | Windows、macOS、iOS 和 Android,设备定位支持 Windows、Android、iOS 和 macOS |
| C++ Builder 2007 至 13 | TsgcVCLMap 和模型 | 生成的 .hpp 头文件和静态库 |
| Lazarus | LCL 地图控件 | 仅支持磁盘上的瓦片,不能下载瓦片 |
| .NET 8、9 和 10 | SgcMapControl, MapView | WinForms(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。规模更大的组织需要注册版授权。