我正在使用已成功实现mbtile映射的Gmap.net。当系统中首次提供互联网连接时,当在“ C:\ Users \ manish.jain \ AppData \ Local \ GMap.NET ”中首次创建文件夹GMap.NET时,此方法在计算机中运行良好。此时;创建多个文件夹,如下所示:
但是在脱机模式下执行相同操作时,只有两个文件夹位于与以下位置相同的位置:
在这种情况下,我在地图的每个图块上都得到了消息
"Exception:Buffer cannot be null. Paremeter name: buffer"
我的要求是始终在离线模式下完成所有地图工作,因为在客户端没有可用的互联网连接。
请让我知道所有这些文件夹的含义和目的以及此问题的解决方案。我已将以下代码行用于Map的模式:
MainMap.Manager.Mode = AccessMode.ServerAndCache;
并从以下定义的位置加载mbtile:
MainMap = new Demo.WindowsForms.Map();
MainMap.MapProvider = new MBTilesMapProvider(@"C:\\India.mbtiles");
MainMap.MinZoom = MainMap.MapProvider.MinZoom;
MainMap.MaxZoom = MainMap.MapProvider.MaxZoom;
我为此问题进行了大量搜索,但在google或stackoverflow中找不到任何解决方案。请帮忙!
答案 0 :(得分:0)
最后,在花了宝贵的4-5个小时尝试打开SQLite Connection时出现问题之后,我得到了这个问题的解决方案。我因为“无法打开数据库文件”而遇到异常。使用以下行已解决了此连接,其中在创建连接实例时需要传递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;
}