GMap .net离线

时间:2015-09-22 08:22:55

标签: c# caching maps gmap.net

我正在使用c#(伟大的API,顺便说一句)使用Gmap开发一个应用程序,而不是与google-map API混淆,从那以后我做了一些非常酷且有用的东西。

我的问题是我的一些客户没有互联网连接,这就是我需要能够离线显示背景(地图)的原因。我曾经使用属性GMap.NET.AccessMode.ServerAndCache;从服务器获取数据,现在我希望能够将GMap.NET.AccessMode.CacheOnly与完整缓存一起使用。

让他们加载带有连接的缓存以准备离线使用不是一种选择,PC永远不会连接到互联网。经过一些研究,我了解到OpenStreetMap是唯一允许我免费使用地图的开源地图(这很好,因为它们有非常好的地图)。我下载了20GB的欧洲地图,但我不知道如何将其指定为缓存(我知道如何找到缓存文件夹)。

大多数时候,我的谷歌搜索显示我试图创建一个虚拟sqlite服务器,其中包含通过localhost访问的数据库中的所有地图块,但老实说,我认为这非常复杂,我想知道是否有人允许我离线使用这些地图或者使用这个api文档的链接的想法,无法在网上找到(我找到了消息来源,但几乎没有评论也没有解释)。

提前致谢,抱歉我的英语不好。

réponsesenfrançaisbundvenues。

3 个答案:

答案 0 :(得分:3)

您可以创建一个单独的程序来预取磁贴以供离线使用。或者使用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文件夹复制到离线电脑)

答案 1 :(得分:0)

使用gmap.CacheLocation = @"C:\Users\xxx\Desktop\";指定缓存位置。

只需将缓存复制到同一目录下的不同机器上即可。

要缓存地图数据,请检查我的github https://github.com/williamwdu/GMap.NETChacher

缓存目录将如下所示TileDBv5\en\Data.gmdb

答案 2 :(得分:0)

请注意,您下载的MAP的提供程序与您在代码中使用的提供程序相同。 eq:GMap.NET.MapProviders.GMapProviders.OpenStreetMap