国产99久久精品_欧美日本韩国一区二区_激情小说综合网_欧美一级二级视频_午夜av电影_日本久久精品视频

最新文章專題視頻專題問答1問答10問答100問答1000問答2000關鍵字專題1關鍵字專題50關鍵字專題500關鍵字專題1500TAG最新視頻文章推薦1 推薦3 推薦5 推薦7 推薦9 推薦11 推薦13 推薦15 推薦17 推薦19 推薦21 推薦23 推薦25 推薦27 推薦29 推薦31 推薦33 推薦35 推薦37視頻文章20視頻文章30視頻文章40視頻文章50視頻文章60 視頻文章70視頻文章80視頻文章90視頻文章100視頻文章120視頻文章140 視頻2關鍵字專題關鍵字專題tag2tag3文章專題文章專題2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章專題3
問答文章1 問答文章501 問答文章1001 問答文章1501 問答文章2001 問答文章2501 問答文章3001 問答文章3501 問答文章4001 問答文章4501 問答文章5001 問答文章5501 問答文章6001 問答文章6501 問答文章7001 問答文章7501 問答文章8001 問答文章8501 問答文章9001 問答文章9501
當前位置: 首頁 - 科技 - 知識百科 - 正文

當ArcGIS10.2遇到SQLite

來源:懂視網 責編:小采 時間:2020-11-09 07:21:04
文檔

當ArcGIS10.2遇到SQLite

當ArcGIS10.2遇到SQLite:在剛剛結束的2013Esri開發者大會中,有好多用戶都會咨詢ArcGIS10.2什么時候推出,可以見得大家對ArcGIS新版本的期待,今天就給大家介紹一下一個新特性,使用SQLite來存儲GIS數據。 大家都知道ArcGIS支持傳統的關系型數據庫(oracle、SQL Serve
推薦度:
導讀當ArcGIS10.2遇到SQLite:在剛剛結束的2013Esri開發者大會中,有好多用戶都會咨詢ArcGIS10.2什么時候推出,可以見得大家對ArcGIS新版本的期待,今天就給大家介紹一下一個新特性,使用SQLite來存儲GIS數據。 大家都知道ArcGIS支持傳統的關系型數據庫(oracle、SQL Serve

在剛剛結束的2013Esri開發者大會中,有好多用戶都會咨詢ArcGIS10.2什么時候推出,可以見得大家對ArcGIS新版本的期待,今天就給大家介紹一下一個新特性,使用SQLite來存儲GIS數據。 大家都知道ArcGIS支持傳統的關系型數據庫(oracle、SQL Server、IBM DB2、In

在剛剛結束的2013Esri開發者大會中,有好多用戶都會咨詢ArcGIS10.2什么時候推出,可以見得大家對ArcGIS新版本的期待,今天就給大家介紹一下一個新特性,使用SQLite來存儲GIS數據。

大家都知道ArcGIS支持傳統的關系型數據庫(oracle、SQL Server、IBM DB2、Informix、PostgreSQL),還支持現在比較火的云數據庫(SQL Azure),而且還有一些輕量級的數據庫比如這次講到的SQlite,而且還支持數據倉庫(IBM Netszza、TeraData Database)。


首先看看SQLite數據庫,這個數據庫一般應用在手機開發中。

SQLite,是一款輕型的數據庫,是遵守ACID的關聯式數據庫管理系統,它的設計目標是嵌入式的,而且目前已經在很多嵌入式產品中使用了它,它占用資源非常的低,在嵌入式設備中,可能只需要幾百K的內存就夠了。它能夠支持Windows/Linux/Unix等等主流的操作系統,同時能夠跟很多程序語言相結合,比如 Tcl、C#、PHP、Java等,還有ODBC接口,同樣比起Mysql、PostgreSQL這兩款開源世界著名的數據庫管理系統來講,它的處理速度比他們都快。SQLite第一個Alpha版本誕生于2000年5月。 至今已經有12個年頭,SQLite也迎來了一個版本 SQLite 3已經發布。

下載軟件點擊


ArcGIS10.2可以支持將數據存儲在SQLite上,ArcGIS提供了相關的GP工具(ArcPy,支持在SQLite上創建空間數據存儲)

import arcpy

# Set local variables
sqlite_database_path = 'C:\sqlite-3_6_22\ex4.sqlite'

# Execute CreateSQLiteDatabase
arcpy.gp.CreateSQLiteDatabase(sqlite_database_path, "ST_GEOMETRY")

u'C:\\sqlite-3_6_22\\ex4.sqlite'

注意:雖然說SQLite默認的文件后綴名是*.db,但是ArcGIS只支持*.sqlite后綴名


創建完畢之后,系統會默認創建四個表

sqlite> .tables
st_aux_spatial_reference_systems st_spatial_reference_systems
st_geometry_columns st_vtspindex_interface

通過控制 SQLite 數據庫的存儲位置的文件夾上的權限來控制對 SQLite 數據庫的訪問。與其他數據庫不同的是您沒有創建該數據庫,通過進行身份驗證的用戶和你不要向其他用戶授予對特定的數據集的權限。

SQLite 可以讀取由多個用戶,但您應不進行任何更新到數據庫而另一個用戶正在更新。例如,不要將數據追加到現有的表或另一個用戶正在將數據追加到現有的表或數據庫中創建表時在數據庫中創建表。


創建完畢之后,我們就可以使用桌面在SQlite數據中創建要素類或者將已有的要素類導入到數據庫中


上面的ext4.sqlite里面有三個要素類:

dd是一個空要素類(Unknown)

ff是一個有數據的要素類(Unknown)

gg是一個空要素類(Xian_1980_3_Degree_GK_CM_120E)

將要素類導入之后就很好奇,這些數據是怎么存儲到SQLite里面的,先查看一下里面的表

C:\sqlite-3_6_22>sqlite3 ex4.sqlite
SQLite version 3.6.22
Enter ".help" for instructions
Enter SQL statements terminated with a ";"
sqlite> .tables
dd st_spindex__ff_Shape
ff st_spindex__ff_Shape_node
gg st_spindex__ff_Shape_parent
st_aux_spatial_reference_systems st_spindex__ff_Shape_rowid
st_geometry_columns st_spindex__gg_SHAPE
st_spatial_reference_systems st_spindex__gg_SHAPE_node
st_spindex__dd_SHAPE st_spindex__gg_SHAPE_parent
st_spindex__dd_SHAPE_node st_spindex__gg_SHAPE_rowid
st_spindex__dd_SHAPE_parent st_vtspindex_interface
st_spindex__dd_SHAPE_rowid
我們可以看到不光有同名的dd、ff、gg表,還有一些系統表(我們習慣于稱呼為支持這種數據庫的系統表),這就是為什么GIS數據與其他數據的區別,因為GIS數據有地理的概念,這無疑就需要知道投影的信息,在以前我們研究NoSQL(MongoDB)也看到了有存儲投影的相關表。

ArcGIS支持MongoDB數據源 - ArcGIS技術研究 - 博客頻道 - CSDN.NET

我們可以看看這些表里面的相關信息

sqlite> select * from st_geometry_columns;
1|dd|SHAPE|2006|3|300001|RTREEXY
2|ff|Shape|6|2|300002|RTREEXY
3|gg|SHAPE|6|2|2385|RTREEXY





sqlite> select * from st_aux_spatial_reference_systems;
300000|ESRI|300000|UNKNOWN|-450359962737.05|-450359962737.05|10000.0|0.0|1.0|0.0|1.0||||1
300001|ESRI|500000|UNKNOWN|-450359962737.05|-450359962737.05|10000.0|0.0|1.0|-100000.0|10000.0|0.001|0.0|0.001|1
300002|EPSG|4326|GEOGCS["GCS_WGS_1984",DATUM["D_WGS_1984",SPHEROID["WGS_1984",6378137.0,298.257223563]],PRIMEM["Greenwich",0.0],UNIT["Degree",0.0174532925199433]]|e-09|0.001|0.001|1
sqlite>
2385就是指向的Xian_1980_3_Degree_GK_CM_120E,這個都是符合OGC標準的,ArcGIS10.1之前還是用內部的SRID,現在好了 只需要知道這個標準的編碼即可(比如WGS84——4326),具體查詢可以參考如下鏈接:
http://help.arcgis.com/en/arcgisserver/10.0/apis/rest/pcs.html

可以看到St_geometry_columns表是存儲空間字段的投影信息的類似于Oracle數據的St_geometry_columns,這個st_aux_spatial_reference_systems類似于st_spatial_reference。

查看一下ff數據的信息

sqlite> .mode column
sqlite> select * from ff;
OBJECTID Shape CONTINENT
---------- ---------- ----------
1 d鈸伐 Asia
2 d鈸? North Amer
3 d鈸-k Europe
4 d鈸 Africa
5 d鈸,- South Amer
6 d鈸 Oceania
7 d鈸? Australia
8 d鈸鞱 Antarctica
Shape字段是亂碼形式

同樣,我們可以看看相關表的Schema

sqlite> .schema
CREATE TABLE dd (
OBJECTID integer primary key autoincrement not null, 
SHAPE geometryblob check((typeof(SHAPE) = 'blob' and length(SHAPE) >= 18 and cast(hex(substr(SHAPE,1,1)) as integer) = 64) or typeof(SHAPE) = 'null'));

CREATE TABLE ff (
OBJECTID integer primary key autoincrement not null, 
Shape geometryblob check((typeof(Shape) = 'blob' and length(Shape) >= 18 and cast(hex(substr(Shape,1,1)) as integer) = 64) or typeof(Shape) = 'null'), 
CONTINENT text(13) check((typeof(CONTINENT) = 'text' or typeof(CONTINENT) = 'null') and not length(CONTINENT) > 13));

CREATE TABLE gg (
OBJECTID integer primary key autoincrement not null, 
SHAPE geometryblob check((typeof(SHAPE) = 'blob' and length(SHAPE) >= 18 and cast(hex(substr(SHAPE,1,1)) as integer) = 64) or typeof(SHAPE) = 'null'));

CREATE TABLE st_aux_spatial_reference_systems (
srid INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT, 
auth_name TEXT(256), 
auth_srid INT32, 
srtext TEXT(2048), 
falsex FLOAT64 NOT NULL, 
falsey FLOAT64 NOT NULL, 
xyunits FLOAT64 NOT NULL, 
falsez FLOAT64 DEFAULT 0.0, 
zunits FLOAT64 DEFAULT 1.0, 
falsem FLOAT64 DEFAULT 0.0, 
munits FLOAT64 DEFAULT 1.0, 
xycluster_tol FLOAT64, 
zcluster_tol FLOAT64, 
mcluster_tol FLOAT64, 
object_flags INT32 DEFAULT 0);

CREATE TABLE st_geometry_columns (
gcid INTEGER PRIMARY KEY AUTOINCREMENT, 
f_table_name CLOB NOT NULL, 
f_geometry_column CLOB NOT NULL, 
geometry_type INT32, 
coord_dimension INT32, 
srid INTEGER NOT NULL, 
spatial_index_type CLOB,
CONSTRAINT gc_uk UNIQUE (f_table_name,f_geometry_column));

CREATE VIRTUAL TABLE st_spatial_reference_systems USING VSRS();
CREATE VIRTUAL TABLE st_spindex__dd_SHAPE USING RTREE (pkid,minx,maxx,miny,maxy);
CREATE TABLE "st_spindex__dd_SHAPE_node"(nodeno INTEGER PRIMARY KEY, data BLOB);
CREATE TABLE "st_spindex__dd_SHAPE_parent"(nodeno INTEGER PRIMARY KEY, parentnode INTEGER);
CREATE TABLE "st_spindex__dd_SHAPE_rowid"(rowid INTEGER PRIMARY KEY, nodeno INTEGER);
CREATE VIRTUAL TABLE st_spindex__ff_Shape USING RTREE (pkid,minx,maxx,miny,maxy);
CREATE TABLE "st_spindex__ff_Shape_node"(nodeno INTEGER PRIMARY KEY, data BLOB);
CREATE TABLE "st_spindex__ff_Shape_parent"(nodeno INTEGER PRIMARY KEY, parentnode INTEGER);
CREATE TABLE "st_spindex__ff_Shape_rowid"(rowid INTEGER PRIMARY KEY, nodeno INTEGER);
CREATE VIRTUAL TABLE st_vtspindex_interface USING VTSpindex();
CREATE TRIGGER st_delete_trigger_dd_SHAPE AFTER DELETE ON dd FOR EACH ROW BEGIN DELETE FROM st_spindex__dd_SHAPE WHERE pkid = OLD._ROWID_; END;
CREATE TRIGGER st_delete_trigger_ff_Shape AFTER DELETE ON ff FOR EACH ROW BEGIN DELETE FROM st_spindex__ff_Shape WHERE pkid = OLD._ROWID_; END;
CREATE TRIGGER st_insert_trigger_dd_SHAPE AFTER INSERT ON dd FOR EACH ROW BEGIN SELECT InsertIndexEntry ('st_spindex__dd_SHAPE',NEW.SHAPE,NEW._ROWID_,2); END;
CREATE TRIGGER st_insert_trigger_ff_Shape AFTER INSERT ON ff FOR EACH ROW BEGIN SELECT InsertIndexEntry ('st_spindex__ff_Shape',NEW.Shape,NEW._ROWID_,2); END;
CREATE TRIGGER st_update_trigger_dd_SHAPE AFTER UPDATE ON dd FOR EACH ROW BEGIN SELECT UpdateIndexEntry ('st_spindex__dd_SHAPE',NEW.SHAPE,NEW._ROWID_,2); END;
CREATE TRIGGER st_update_trigger_ff_Shape AFTER UPDATE ON ff FOR EACH ROW BEGIN SELECT UpdateIndexEntry ('st_spindex__ff_Shape',NEW.Shape,NEW._ROWID_,2); END;
從上面可以看出,其實也是建立的Table、Virtual Table、Trigger等。

而且Shape字段的類型是geometryblob,核心還是BLOB。

這里面也有相關的字段類型可以參考如下


SQLite 也是不同于其他的數據庫中字段未分配特定的數據類型和數據類型定義沒有得到嚴格執行。相反,SQLite 使用要素類可以在其中存儲不同的數據類型的值。

然而,ArcGIS 可以只與一個每個字段的數據類型和不會嚴格執行數據類型。在 ArcGIS 中查看 SQLite 數據時,您應該意識到這一差異的數據類型強制執行。

同樣,我們也可以直接使用SQL語句創建表,創建坐標,使用ArcMap提供的Add XY坐標來顯示,基本上ArcGIS10.1之前的版本,Android開發都是使用這種方式

C:\sqlite-3_6_22>sqlite3 ex3.sqlite
SQLite version 3.6.22
Enter ".help" for instructions
Enter SQL statements terminated with a ";"
sqlite> create table tbl1(x smallint,y smallint);
sqlite> insert into tbl1 vaules(10,10);
Error: near "vaules": syntax error
sqlite> insert into tbl1 values(10,10);
sqlite> insert into tbl1 values(10,20);
sqlite> insert into tbl1 values(20,20);
sqlite> insert into tbl1 values(20,10);
sqlite> select * from tbl1;
10|10
10|20
20|20
20|10


同樣,我們也可以使用數據庫管理工具來對SQLite里面的對象進行研究



同樣,我們也可以使用代碼來操作SQLite,以下是C#來操作SQLite,需要引用System.Data.SQLite(可能需要用戶自己下載dll)

public void test()
 {
 string connstring = "Data Source=C:\\Documents and Settings\\esrichina\\桌面\\sqlite\\sqlite-3_6_22\\ex4.sqlite";
 SQLiteConnection conn = new SQLiteConnection(connstring);
 conn.Open();

 SQLiteCommand cmd = new SQLiteCommand(conn);
 //查詢ff要素類的表
 cmd.CommandText = "select * from ff";
 SQLiteDataReader reader = cmd.ExecuteReader();
 if (reader.HasRows)
 {
 while (reader.Read())
 {
 //獲得ObjectID值
 int a = reader.GetInt32(0);
 //獲得SHAPE值
 var aaa = reader.GetValue(1);
 //獲得NAME字段值
 string aa = reader.GetString(2);
 }
 }


同樣,使用ArcGIS Desktop10.2不僅僅能夠創建空間字段為ST_Geometry類型的(Esri支持),也提供SQLite原生提供的Spatialite類型的

>>> arcpy.gp.CreateSQLiteDatabase(r'C:\c.sqlite',"SPATIALITE")
u'C:\\c.sqlite'

那么,我在已經創建好的SQLite的原生Statialite存儲也同樣創建了相關系統表

sqlite> .tables
SpatialIndex vector_layers_auth
geom_cols_ref_sys vector_layers_field_infos
geometry_columns vector_layers_statistics
geometry_columns_auth views_geometry_columns
geometry_columns_field_infos views_geometry_columns_auth
geometry_columns_statistics views_geometry_columns_field_infos
geometry_columns_time views_geometry_columns_statistics
spatial_ref_sys virts_geometry_columns
spatialite_history virts_geometry_columns_auth
sql_statements_log virts_geometry_columns_field_infos
vector_layers virts_geometry_columns_statistics
我們查看一下相關表的記錄
sqlite> select * from geometry_columns;
a|shape|6|2|4326|1
sqlite> .mode column
sqlite> select * from a;
1 Asia
2 North Amer
3 Europe
4 Africa
5 South Amer
6 Oceania
7 Australia
8 Antarctica

大數據量導入測試:

我將一個面狀要素類(3000000)記錄的數據導入到SQLite里面,系統會自動創建索引,在1:10000比例尺下瀏覽速度在秒級延遲,可見效果還是不錯的。

Executing: FeatureClassToFeatureClass "C:\New File Geodatabase (3).gdb\a" C:\sqlite-3_6_22\ex4.sqlite aa # "DB2GSE_ST_ "DB2GSE_ST_" true true false 8 Double 0 0 ,First,#,C:\New File Geodatabase (3).gdb\a,DB2GSE_ST_,-1,-1;DB2GSE_SDE "DB2GSE_Sde" true true false 8 Double 0 0 ,First,#,C:\New File Geodatabase (3).gdb\a,DB2GSE_SDE,-1,-1;Shape_Length "Shape_Length" false true true 8 Double 0 0 ,First,#,C:\New File Geodatabase (3).gdb\a,Shape_Length,-1,-1;Shape_Area "Shape_Area" false true true 8 Double 0 0 ,First,#,C:\New File Geodatabase (3).gdb\a,Shape_Area,-1,-1" #
Start Time: Thu Jun 13 03:04:35 2013
Succeeded at Thu Jun 13 03:27:29 2013 (Elapsed Time: 22 minutes 54 seconds)


假想:

咨詢過Android工程師,好像Windows生成的SQLite文件(*.sqlite)可以直接拷貝到Android手機上使用,如果ArcGIS10.2推出后,也不排除android的ArcGIS API有直接讀取數據庫里面的Shape字段也就是讀取成圖形信息,這個應用也很廣泛吧。


未完待續:

還有一個問題沒有弄清楚,ArcGIS10.2桌面也提供了關于SQLite的Dll,這個現在還不太清楚干什么用

1:有可能使用桌面操作SQLite就是調用這個dll

2:使用SQL可以直接操作SQLite類似SQL 操作Oracle數據庫編輯空間數據。

-------------------------------------------------------------------------------------------------------

-------------------------------------------------------------------------------------------------------

聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com

文檔

當ArcGIS10.2遇到SQLite

當ArcGIS10.2遇到SQLite:在剛剛結束的2013Esri開發者大會中,有好多用戶都會咨詢ArcGIS10.2什么時候推出,可以見得大家對ArcGIS新版本的期待,今天就給大家介紹一下一個新特性,使用SQLite來存儲GIS數據。 大家都知道ArcGIS支持傳統的關系型數據庫(oracle、SQL Serve
推薦度:
標簽: 結束 剛剛 201
  • 熱門焦點

最新推薦

猜你喜歡

熱門推薦

專題
Top
主站蜘蛛池模板: 99精品国产免费久久国语 | 精品国产欧美 | 在线视频观看国产 | 一级毛片黄 | 国产一精品一aⅴ一免费 | 精品欧美一区二区在线观看欧美熟 | 免费国产一区 | 亚洲精品美女久久久aaa | 久久久久女人精品毛片九一 | 国产高清免费在线观看 | 久久99精品国产99久久 | 国产 日韩 欧美 综合 | 国产香蕉视频在线观看 | 久久伊人五月天 | 99国产精品高清一区二区二区 | 国产高清一区二区 | 久久大香香蕉国产免费网vrr | 国产在线观看精品 | 亚洲欧美日韩天堂 | 欧美视频日韩视频 | 99精品欧美一区二区三区综合在线 | 国产精品一区二区国产 | 激情欧美一区二区三区中文字幕 | 一级免费毛片 | 亚洲十欧美十日韩十国产 | 久久精品一区二区 | 久久无码精品一区二区三区 | 国产日韩欧美亚洲综合首页 | 国语视频 | 国产日韩欧美高清 | 91久久精品国产91久久性色也 | 在线观看日韩视频 | 国产欧美日韩高清专区手机版 | 国产成人成人一区二区 | 国产精品久久久久久久毛片 | 亚欧一区 | 欧美 国产 日韩 第一页 | 久久国产成人精品 | 免费一看一级毛片全播放 | 欧美视频网站在线观看 | 热久久国产欧美一区二区精品 |