GMap .net 离线
GMap .net offline
我正在使用 C# 中的 Gmap 开发一个应用程序(很棒 API,顺便说一句),不要与 google-map API 混淆,我做了一些非常酷和从那以后有用的东西。
我的问题是我的一些客户没有互联网连接,这就是我需要能够离线显示背景(地图)的原因。我曾经使用 属性 GMap.NET.AccessMode.ServerAndCache;
从服务器获取数据,现在我希望能够使用 GMap.NET.AccessMode.CacheOnly
和完整缓存。
让他们通过连接加载缓存以准备离线使用不是一种选择,PC 永远不会连接到互联网。经过一些研究,我了解到 OpenStreetMap 是唯一允许我免费使用他们的地图的开源地图(这很好,因为他们有非常好的地图)。我下载了一张20GB的欧洲地图,但是不知道怎么指定为缓存(我知道怎么定位缓存文件夹)。
大多数时候,我的 Google 搜索显示人们试图创建一个虚拟 sqlite 服务器,其中包含通过本地主机访问的数据库中的所有地图图块,但老实说,我认为这非常复杂,我会想知道是否有人允许我离线使用这些地图或 link 用于此 api 的文档,无法在网上找到(我找到了来源,但几乎没有评论并且没有解释)。
提前致谢,抱歉我的英语不好。
在法国双年展上的回应。
您可以创建一个单独的程序来预取图块以供离线使用。或者使用 GMap NET 演示程序(https://github.com/radioman/greatmaps/tree/master/Demo.WindowsPresentation)
下面的代码用于在您使用 ALT + 鼠标优先按钮选择区域后按下按钮。
RectLatLng area = mapView.SelectedArea;
if (!area.IsEmpty)
{
for (int i = (int)mapView.Zoom; i <= mapView.MaxZoom; i++)
{
TilePrefetcher obj = new TilePrefetcher();
obj.Title = "Prefetching Tiles";
obj.Icon = this.Icon;
obj.Owner = this;
obj.ShowCompleteMessage = false;
obj.Start(area, i, mapView.MapProvider, 100);
}
DialogResult = true;
Close();
}
else
{
MessageBox.Show("No Area Chosen", "Error", MessageBoxButton.OK, MessageBoxImage.Error);
}
(大部分复制自 Gmap NET Demo 源)
https://github.com/radioman/greatmaps/tree/master/Demo.WindowsPresentation
文件存放在C:\Users\[你的用户名]\AppData\Local\GMap.NET\TileDBv5\en
成功预取图块后,您可以将文件复制到离线电脑中的相同位置,它应该使用它(或者只需通过 USB 将整个 GMap.NET 文件夹复制到离线电脑或随便)
使用gmap.CacheLocation = @"C:\Users\xxx\Desktop\";
指定缓存位置。
只需将缓存复制到同一目录下的不同机器即可。
要缓存地图数据,请查看我的 github https://github.com/williamwdu/GMap.NETChacher
缓存目录将如下所示TileDBv5\en\Data.gmdb
请注意,您下载的 MAP 提供程序与您在代码中使用的提供程序相同。
均衡器:GMap.NET.MapProviders.GMapProviders.OpenStreetMap
我正在使用 C# 中的 Gmap 开发一个应用程序(很棒 API,顺便说一句),不要与 google-map API 混淆,我做了一些非常酷和从那以后有用的东西。
我的问题是我的一些客户没有互联网连接,这就是我需要能够离线显示背景(地图)的原因。我曾经使用 属性 GMap.NET.AccessMode.ServerAndCache;
从服务器获取数据,现在我希望能够使用 GMap.NET.AccessMode.CacheOnly
和完整缓存。
让他们通过连接加载缓存以准备离线使用不是一种选择,PC 永远不会连接到互联网。经过一些研究,我了解到 OpenStreetMap 是唯一允许我免费使用他们的地图的开源地图(这很好,因为他们有非常好的地图)。我下载了一张20GB的欧洲地图,但是不知道怎么指定为缓存(我知道怎么定位缓存文件夹)。
大多数时候,我的 Google 搜索显示人们试图创建一个虚拟 sqlite 服务器,其中包含通过本地主机访问的数据库中的所有地图图块,但老实说,我认为这非常复杂,我会想知道是否有人允许我离线使用这些地图或 link 用于此 api 的文档,无法在网上找到(我找到了来源,但几乎没有评论并且没有解释)。
提前致谢,抱歉我的英语不好。
在法国双年展上的回应。
您可以创建一个单独的程序来预取图块以供离线使用。或者使用 GMap NET 演示程序(https://github.com/radioman/greatmaps/tree/master/Demo.WindowsPresentation)
下面的代码用于在您使用 ALT + 鼠标优先按钮选择区域后按下按钮。
RectLatLng area = mapView.SelectedArea;
if (!area.IsEmpty)
{
for (int i = (int)mapView.Zoom; i <= mapView.MaxZoom; i++)
{
TilePrefetcher obj = new TilePrefetcher();
obj.Title = "Prefetching Tiles";
obj.Icon = this.Icon;
obj.Owner = this;
obj.ShowCompleteMessage = false;
obj.Start(area, i, mapView.MapProvider, 100);
}
DialogResult = true;
Close();
}
else
{
MessageBox.Show("No Area Chosen", "Error", MessageBoxButton.OK, MessageBoxImage.Error);
}
(大部分复制自 Gmap NET Demo 源)
https://github.com/radioman/greatmaps/tree/master/Demo.WindowsPresentation
文件存放在C:\Users\[你的用户名]\AppData\Local\GMap.NET\TileDBv5\en
成功预取图块后,您可以将文件复制到离线电脑中的相同位置,它应该使用它(或者只需通过 USB 将整个 GMap.NET 文件夹复制到离线电脑或随便)
使用gmap.CacheLocation = @"C:\Users\xxx\Desktop\";
指定缓存位置。
只需将缓存复制到同一目录下的不同机器即可。
要缓存地图数据,请查看我的 github https://github.com/williamwdu/GMap.NETChacher
缓存目录将如下所示TileDBv5\en\Data.gmdb
请注意,您下载的 MAP 提供程序与您在代码中使用的提供程序相同。 均衡器:GMap.NET.MapProviders.GMapProviders.OpenStreetMap