【移動GIS】sqlite的使用(二)

來源:互聯網
上載者:User

利用sqlite儲存瓦片那是最好不過了,做離線地圖的時候,你拷那麼多圖片慢不?累不?

      MBTiles是利用sqlite並有一種規則來儲存瓦片的,什麼是MBTiles?請參照我的部落格; 
【移動GIS】MBTiles移動儲存簡介 這裡就不在獒述了。

MBTiles其實就是一個sqlite資料庫,但這個資料庫按照了一些規則建立了表來儲存瓦片資訊,所以把它叫做MBTiles,sqlite產生的資料檔案的尾碼名其實是可以隨便改變的哦,不影響你使用的,一般sqlite資料庫檔案問 .sqlite或者 .db ,然後儲存瓦片呢,我們產生資料庫檔案的時候就把他產生為 .mbtiles格式

 

在android移動預存程序中,不需要你再額外的加sqlite的JDBC啦,貌似android SDK就支援sqlite,那麼如何將瓦片匯入到sqlite資料庫中呢?沒辦法,只能自己寫個程式然後遍曆本地瓦片再依次插入到sqlite中去了,下面貼出插入瓦片的關鍵代碼:

package com.ehl.sqlite;import java.io.ByteArrayOutputStream;import java.io.File;import java.io.FileInputStream;import java.sql.Connection;import java.sql.DriverManager;import java.sql.PreparedStatement;import java.sql.SQLException;import java.sql.Statement;/** * sqlite資料操作 *  * @author fazhen.zheng * */public class SqliteDB {private static Statement statement;private static Connection connection  = null;private static PreparedStatement insertPS = null;private static PreparedStatement deletePS = null;public SqliteDB(String mbtilesPath) throws ClassNotFoundException, SQLException{Class.forName("org.sqlite.JDBC");if(mbtilesPath==null||mbtilesPath.trim().length()==0){connection = DriverManager.getConnection("jdbc:sqlite:ehl_mbtiles_db.mbtiles");statement = connection.createStatement();initTable();}else{connection =  DriverManager.getConnection("jdbc:sqlite:" + mbtilesPath);statement = connection.createStatement();}insertPS = connection.prepareStatement("INSERT INTO tiles (zoom_level,tile_row,tile_column,tile_data) VALUES(?,?,?,?)");deletePS = connection.prepareStatement("DELETE FROM tiles WHERE zoom_level = ? and tile_row = ? and tile_column = ?");}/** * 初始化表資訊 * @throws SQLException */private void initTable() throws SQLException{statement.execute("DROP TABLE IF EXISTS  metadata");statement.execute("DROP TABLE IF EXISTS  tiles");statement.execute("CREATE TABLE metadata (name text, value text)");statement.execute("CREATE TABLE tiles (zoom_level integer, tile_row integer, tile_column integer, tile_data blob)");statement.execute("CREATE UNIQUE INDEX tile_index ON tiles (zoom_level, tile_row, tile_column)");statement.execute("CREATE UNIQUE INDEX name ON metadata (name)"); statement.execute("INSERT INTO metadata VALUES ('name', 'ehl_mbtiles_db')");statement.execute("INSERT INTO metadata VALUES ('type', 'baselayer')");statement.execute("INSERT INTO metadata VALUES ('version', '1.0')");statement.execute("INSERT INTO metadata VALUES ('description', '移動GIS')");statement.execute("INSERT INTO metadata VALUES ('format', 'png')");}/** * 插入一條資料 * @param zoom_level * @param tile_row * @param tile_column * @param tile_data */public void insertTiles(String zoom_level, String tile_row,String tile_column, File tile_data) {FileInputStream fis;ByteArrayOutputStream bos = null;try {connection.setAutoCommit(false);fis = new FileInputStream(tile_data);bos = new ByteArrayOutputStream();byte[] buf = new byte[1024];int readNum;while ((readNum = fis.read(buf)) != -1) {bos.write(buf, 0, readNum);}insertPS.setString(1, zoom_level);insertPS.setString(2, tile_row);insertPS.setString(3, tile_column);insertPS.setBytes(4, bos.toByteArray());deletePS.setString(1, zoom_level);deletePS.setString(2, tile_row);deletePS.setString(3, tile_column);deletePS.executeUpdate();insertPS.executeUpdate();connection.commit();} catch (Exception e) {try {connection.rollback();} catch (SQLException e1) {e1.printStackTrace();}e.printStackTrace();} }/** * 使用完畢後需關閉一些對象 */public void close() {try {if (insertPS != null)insertPS.close();if (deletePS != null)deletePS.close();if(statement!=null)statement.close();if (connection != null)connection.close();} catch (SQLException e) {System.err.println(e);}}}

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.