Как использовать карту mbtile в автономном режиме в Gmap.net, когда кеш недоступен? - PullRequest
0 голосов
/ 15 мая 2019

Я использую Gmap.net, в котором я успешно реализовал mbtile map. Это прекрасно работает на компьютере, когда папка GMap.NET создается в " C: \ Users \ manish.jain \ AppData \ Local \ GMap.NET " в первый раз, когда в системе доступно подключение к Интернету. В это время; Есть несколько папок, которые создаются следующим образом:

  1. DLLCACHE
  2. GeocoderCache
  3. IpGeoCacheDB
  4. leafletjs
  5. PlacemarkCache
  6. RouteCache
  7. TileDBv5
  8. Urlcache

Но когда то же самое выполняется в автономном режиме, только две папки создаются в том же месте, что и:

  1. DLLCACHE
  2. TileDBv5

В этом случае я получил сообщение на каждой клетке карты как

"Exception:Buffer cannot be null. Paremeter name: buffer"

Я приложил снимок того же самого. enter image description here

Мое требование - выполнять всю работу с картой всегда в автономном режиме, поскольку на стороне клиента подключение к Интернету отсутствует.

Пожалуйста, дайте мне знать значение и назначение всех этих папок и решение этой проблемы. Я использовал эту строку кода для режима карты:

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. Пожалуйста, помогите!

1 Ответ

0 голосов
/ 15 мая 2019

Наконец, я получил решение этой проблемы, потратив драгоценные 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;
    }
...