2015-04-10 2 views
0

Я делаю приложение Windows store (8.1) в C# Xaml для создания карт с использованием Bing Maps для расширения C# с файлом mbtiles, я уже использовал проект Portable Basemap Сервер для работы, но теперь я пытаюсь получить доступ к данным в файле mbtiles самостоятельно с помощью SQLite.MBTiles db с SQLite в aC# windows store app

Мне удалось получить плитки из таких файлов в WPF, но я не знаю, как это сделать в проекте магазина Windows;

Мой код в WPF:

 SQLiteConnection _sqlcon; 
     using (_sqlcon = new SQLiteConnection(String.Format("Data Source={0};Version=3;", "PATH_TO_MBTILES"))) 
     { 
      _sqlcon.Open(); 
      SQLiteCommand cmd = new SQLiteCommand(string.Format("SELECT tile_data FROM tiles WHERE tile_column={0} AND tile_row={1} AND zoom_level={2}", 2, 5, 3), _sqlcon); 
      object o = cmd.ExecuteScalar(); 

      if (o != null) 
      { 
       byte[] c = (byte[])o; 
       using (MemoryStream stream = new MemoryStream(c)) 
       { 
        BitmapImage bmp = new BitmapImage(); 
        bmp.BeginInit(); 
        bmp.CacheOption = BitmapCacheOption.OnLoad; 
        bmp.StreamSource = stream; 
        bmp.EndInit(); 
        img.Source = bmp; 
       } 
      } 
     } 

С этим кодом я получаю плитку в колонке 2 строки 5 и уровень масштабирования 3.

Но в окнах Маркете я получаю SQLiteException «не удалось открыть файл базы данных», когда я пытаюсь создать SQLiteConnection с тем же файлом (я использую NuGet SQLITE-сеть и SQLite для среды выполнения Windows 8.1 расширения)

Мой код в Windows Store App:

 SQLiteConnection _sqlcon; 
     using (_sqlcon = new SQLiteConnection(String.Format("Data Source={0};Version=3;", "PATH_TO_MBTILES"))) //SQLiteExeption here 
     { 
      SQLiteCommand cmd = new SQLiteCommand(string.Format("SELECT tile_data FROM tiles WHERE tile_column={0} AND tile_row={1} AND zoom_level={2}", 2, 5, 3), _sqlcon); 
      byte[] o = cmd.ExecuteScalar<byte[]>(); 
      //etc... 
     } 

отладчик из Visual Studio отправить меня в файл SQLite.cs из SQLITE внутрисетевых NuGet:

public SQLiteConnection (string databasePath, SQLiteOpenFlags openFlags, bool storeDateTimeAsTicks = false) 
    { 
     if (string.IsNullOrEmpty (databasePath)) 
      throw new ArgumentException ("Must be specified", "databasePath"); 

     DatabasePath = databasePath; 

#if NETFX_CORE 
     SQLite3.SetDirectory(/*temp directory type*/2, Windows.Storage.ApplicationData.Current.TemporaryFolder.Path); 
#endif 

     Sqlite3DatabaseHandle handle; 

#if SILVERLIGHT || USE_CSHARP_SQLITE 
     var r = SQLite3.Open (databasePath, out handle, (int)openFlags, IntPtr.Zero); 
#else 
     // open using the byte[] 
     // in the case where the path may include Unicode 
     // force open to using UTF-8 using sqlite3_open_v2 
     var databasePathAsBytes = GetNullTerminatedUtf8 (DatabasePath); 
     var r = SQLite3.Open (databasePathAsBytes, out handle, (int) openFlags, IntPtr.Zero); 
#endif 

     Handle = handle; 
     if (r != SQLite3.Result.OK) { 
      throw SQLiteException.New (r, String.Format ("Could not open database file: {0} ({1})", DatabasePath, r)); 
     } 
     _open = true; // Debugger Stops here ! 

     StoreDateTimeAsTicks = storeDateTimeAsTicks; 

     BusyTimeout = TimeSpan.FromSeconds (0.1); 
    } 

Я нашел много примеров mbtiles файлов, используемые в WPF, но ни один в окнах Маркет ,

Расширяются ли расширения SQLite для хранилища Windows для поддержки файлов MBTiles в качестве баз данных? Если да, то что я делаю неправильно?

+0

Благодарим вас за сохранение сведений об исключении. –

+0

Я добавил сообщение об исключении: «Не удалось открыть файл базы данных» –

+0

Благодарим вас за сохранение других сведений об исключении (например, пути) в секрете. –

ответ

0

Приложения в Windows Store могут обращаться только к своим собственным каталогам, но не к приватным файлам администратора.

Прочитано the documentation, но вы, вероятно, захотите установить данные как часть своего приложения.

+0

Я переместил файл mbtiles в локальное приложение appdata моего приложения, но ничего не изменил. Новое местоположение (C: \ Users \ admin \ AppData \ Local \ Packages \ MyApp \ LocalState \ testmapapp_997c39.mbtiles) Как его установить как часть моего приложения? –

+0

см. [Развертывание файлов в папке localState во время установки приложения магазина] (http://stackoverflow.com/questions/25603914/deploy-files-in-the-localstate-folder-during-installation-of-a-store -приложение) –