天天看點

Qgis打開sqlite資料源失敗解決探索

遇到的問題:Qgis打開含有WKB二進制格式幾何字段的sq3資料時,地理資訊無法顯示,隻能以表的形式加載;

原因:Qgis隻能識别spatialite格式的資料源,sqlite的隻能以表的形式打開;

驗證方式:把shp檔案分别另存為sqlite格式、spatialite格式資料,再用Qgis打開;

1、用加載spatialite格式的方式加載sqlite,顯示Failure getting table metadata...is ** really a SpatiaLite database?

2、用加載矢量檔案的方式加載sqlite,Geometry type顯示為None;

3、用加載spatialite資料的方式加載剛才存儲的spatialite格式資料,地理資訊正确顯示,并且比shp格式多了很多加載圖層;

4、導出時Geometry Type選擇對應的類型,而不是Automatic,再次加載時成功

結果:qgis可以打開WKB格式的sqlite資料,我遇到的是sqlite存儲的是spatialite blob的格式,qgis解析非标準WKB格式的資料失敗,導緻Geomtry Type=None,是以隻能講spatialite blob的資料轉成标準的WKB格式

空間資料庫:

https://blog.csdn.net/gisuuser/article/category/7231661?orderby=UpdateTime

SQLite 與 SpatiaLite的關系

空間資料庫:在幾乎絕大多數資料庫都具有空間資料的存儲和查詢功能後,SQLite說自己是世界上最小的資料庫,為了與時俱進也有了空間資料支援的擴充,利用這個擴充,可以按照OGC的Simple Feature Access标準存取空間資料。

Spatialite: 支援SQLite空間資料功能的這個項目名叫SpatiaLite,與其一同分發的還有一個VirtualShape。前者為SQLite增加空間資料支援,後者可以把一個Shapefile作為SQLite的資料庫;

作用:spatialite能使sqlite具有距離、位置關系判斷等功能函數,具有把shp格式作為sqlite表識别處理的能力,Python等語言加載spatialite包後,能處理簡單的地理運算;

spatialite blob和WKB的差異

https://wenku.baidu.com/view/94dd85480b4c2e3f56276345.html

http://www.gaia-gis.it/gaia-sins/BLOB-Geometry.html

https://www.codetd.com/article/4295374

https://www.itread01.com/content/1543511464.html

https://www.gaia-gis.it/fossil/libspatialite/index

解決方案1:選擇低版本的QGIS

處理spatialite的qgis版本:QGIS-OSGeo4W-2.8.2-1-Setup-x86

解決方案2:

sqlite增加geometry_columns表,在qgis中檢視,修改,讓sqlite成為spatialite ,進而被qgis識别;

CREATE TABLE geometry_columns (f_table_name TEXT NULL, f_geometry_column TEXT NULL, geometry_type INTEGER NOT NULL, coord_dimension INTEGER NOT NULL, srid INTEGER NOT NULL, spatial_index_enabled INTEGER NOT NULL);

INSERT INTO geometry_columns VALUES ('point','geometry',1002,3,4326,0);   點

INSERT INTO geometry_columns VALUES ('line','geometry',1002,3,4326,0);      線

INSERT INTO geometry_columns VALUES ('attr','',0,0,0,0);                                屬性

Qgis打開sqlite資料源失敗解決探索

qgis資料表geometry_columns表,存放了目前資料庫中所有表的幾何字段資訊

該表各列的含義如下:

  •     f_table_name表示空間表的表名。
  •     f_geometry_column表示空間表中幾何字段的名稱。
  •     geometry_type表示幾何字段的類型。
  •     coord_dimension表示幾何字段維數。
  •     srid表示空間表的空間參考。
  •     spatial_index_enabled表示空間索引是否有效

繼續閱讀