winforms 当缓存不可用时,如何在www.example.com中以离线模式使用mbtileMapGmap.net?

jq6vz3qz  于 2022-11-17  发布在  .NET
关注(0)|答案(1)|浏览(142)

我正在使用Gmap.net,在其中我成功地实现了mbtile map。当系统中的互联网连接可用时,首次在“C:\Users\manish.jain\AppData\Local\GMap.NET”中创建文件夹GMap.NET时,这在机器中工作正常。此时;创建了多个文件夹,如下所示:

  1. Dll缓存
    1.地理编码器缓存
  2. IP地理缓存数据库
    1.传单
    1.位置标记缓存
    1.路由缓存
    1.平铺DBv 5
  3. URL缓存
    但当同样的事情在脱机模式下执行,然后只有两个文件夹创建在相同的位置:
  4. Dll缓存
    1.平铺DBv 5
    在这种情况下,我在Map的每个图块上都得到了消息
"Exception:Buffer cannot be null. Paremeter name: buffer"

我已附加相同. x1c 0d1x的快照
我的要求是做所有的Map工作总是在离线模式,因为在客户端没有互联网连接可用。
请让我知道所有这些文件夹的意义和目的以及这个问题的解决方案。我已经使用了这行代码Map的模式:

MainMap.Manager.Mode = AccessMode.ServerAndCache;

并从定义位置加载mBlile,如下所示:

MainMap = new Demo.WindowsForms.Map();
MainMap.MapProvider = new MBTilesMapProvider(@"C:\\India.mbtiles");
MainMap.MinZoom = MainMap.MapProvider.MinZoom;
MainMap.MaxZoom = MainMap.MapProvider.MaxZoom;

我已经搜索了很多这个问题,但没有找到任何解决方案,在谷歌或在stackoverflow。请帮助!

epfja78i

epfja78i1#

最后,我花了宝贵的4-5个小时后得到了这个问题的解决方案,有一个问题发生时,试图打开SQLite连接。我得到了一个异常为“无法打开数据库文件”。这个连接已经解决了使用下面的行,其中parseViaFramework需要在连接示例创建时传递如下:

using (SQLiteConnection conn = new SQLiteConnection(String.Format("Data Source={0};Version=3;", Path),true))

在MBTileHelper.cs类内部:

public byte[] GetTileStream(long x, long y, int zoom)
    {
        byte[] retval = null;
        try
        {
            //using (SQLiteConnection conn = new SQLiteConnection(String.Format("Data Source={0};Version=3;", Path)))
            using (SQLiteConnection conn = new SQLiteConnection(String.Format("Data Source={0};Version=3;", Path),true))
            {
                conn.Open(); // Here I was getting an exception.
                using (SQLiteCommand cmd = new SQLiteCommand() { Connection = conn, CommandText = String.Format("SELECT * FROM tiles WHERE tile_column = {0} and tile_row = {1} and zoom_level = {2};", x, y, zoom) })
                {
                    SQLiteDataReader reader = cmd.ExecuteReader();
                    if (reader.Read())
                    {
                        byte[] bytes = reader["tile_data"] as byte[];
                        retval = bytes;
                    }
                }
            }
        }
        catch(Exception ex)
        {
            retval = null;
        }
        return retval;
    }

相关问题