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

最新文章專題視頻專題問答1問答10問答100問答1000問答2000關(guān)鍵字專題1關(guān)鍵字專題50關(guān)鍵字專題500關(guān)鍵字專題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關(guān)鍵字專題關(guān)鍵字專題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

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

當ArcGIS10.2遇到SQLite

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

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

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

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


首先看看SQLite數(shù)據(jù)庫,這個數(shù)據(jù)庫一般應(yīng)用在手機開發(fā)中。

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

下載軟件點擊


ArcGIS10.2可以支持將數(shù)據(jù)存儲在SQLite上,ArcGIS提供了相關(guān)的GP工具(ArcPy,支持在SQLite上創(chuàng)建空間數(shù)據(jù)存儲)

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后綴名


創(chuàng)建完畢之后,系統(tǒng)會默認創(chuàng)建四個表

sqlite> .tables
st_aux_spatial_reference_systems st_spatial_reference_systems
st_geometry_columns st_vtspindex_interface

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

SQLite 可以讀取由多個用戶,但您應(yīng)不進行任何更新到數(shù)據(jù)庫而另一個用戶正在更新。例如,不要將數(shù)據(jù)追加到現(xiàn)有的表或另一個用戶正在將數(shù)據(jù)追加到現(xiàn)有的表或數(shù)據(jù)庫中創(chuàng)建表時在數(shù)據(jù)庫中創(chuàng)建表。


創(chuàng)建完畢之后,我們就可以使用桌面在SQlite數(shù)據(jù)中創(chuàng)建要素類或者將已有的要素類導(dǎo)入到數(shù)據(jù)庫中


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

dd是一個空要素類(Unknown)

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

gg是一個空要素類(Xian_1980_3_Degree_GK_CM_120E)

將要素類導(dǎo)入之后就很好奇,這些數(shù)據(jù)是怎么存儲到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表,還有一些系統(tǒng)表(我們習(xí)慣于稱呼為支持這種數(shù)據(jù)庫的系統(tǒng)表),這就是為什么GIS數(shù)據(jù)與其他數(shù)據(jù)的區(qū)別,因為GIS數(shù)據(jù)有地理的概念,這無疑就需要知道投影的信息,在以前我們研究NoSQL(MongoDB)也看到了有存儲投影的相關(guān)表。

ArcGIS支持MongoDB數(shù)據(jù)源 - ArcGIS技術(shù)研究 - 博客頻道 - CSDN.NET

我們可以看看這些表里面的相關(guān)信息

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之前還是用內(nèi)部的SRID,現(xiàn)在好了 只需要知道這個標準的編碼即可(比如WGS84——4326),具體查詢可以參考如下鏈接:
http://help.arcgis.com/en/arcgisserver/10.0/apis/rest/pcs.html

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

查看一下ff數(shù)據(jù)的信息

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字段是亂碼形式

同樣,我們可以看看相關(guān)表的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。

這里面也有相關(guān)的字段類型可以參考如下


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

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

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

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


同樣,我們也可以使用數(shù)據(jù)庫管理工具來對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不僅僅能夠創(chuàng)建空間字段為ST_Geometry類型的(Esri支持),也提供SQLite原生提供的Spatialite類型的

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

那么,我在已經(jīng)創(chuàng)建好的SQLite的原生Statialite存儲也同樣創(chuàng)建了相關(guān)系統(tǒng)表

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
我們查看一下相關(guān)表的記錄
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

大數(shù)據(jù)量導(dǎo)入測試:

我將一個面狀要素類(3000000)記錄的數(shù)據(jù)導(dǎo)入到SQLite里面,系統(tǒng)會自動創(chuàng)建索引,在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有直接讀取數(shù)據(jù)庫里面的Shape字段也就是讀取成圖形信息,這個應(yīng)用也很廣泛吧。


未完待續(xù):

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

1:有可能使用桌面操作SQLite就是調(diào)用這個dll

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

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

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

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

文檔

當ArcGIS10.2遇到SQLite

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

最新推薦

猜你喜歡

熱門推薦

專題
Top
主站蜘蛛池模板: 欧美成人精品一级高清片 | 日韩国产综合 | 欧美激情首页 | 日本一区二区三区不卡在线视频 | 在线观看亚洲一区二区 | 国产未成女年一区二区 | 国产一区二区三区亚洲欧美 | 在线日韩视频 | 精品国产欧美一区二区三区成人 | 五月婷婷中文字幕 | 欧美成人禁片在线www | 亚洲国产精久久久久久久 | 国产91精品一区二区麻豆亚洲 | 福利一区三区 | 欧美精品久久久亚洲 | 欧美综合国产精品日韩一 | 久久久久久国产a免费观看黄色大片 | 99久久免费精品国产免费高清 | 国产日韩一区二区三区在线观看 | 国产一区二区免费播放 | 另类交 | 日韩亚洲欧美一区 | 欧美成人精品一级高清片 | 久久久久久久久久久9精品视频 | 精品久久久久久综合日本 | 久久亚洲精品国产亚洲老地址 | 亚洲精品在线第一页 | 日本色图在线观看 | 国产国拍亚洲精品午夜不卡17 | 国产亚洲精品成人婷婷久久小说 | 亚洲欧洲精品一区二区三区 | 国产精品1区2区 | 天天操夜夜做 | 亚洲欧美色欧另类欧 | 国产不卡在线 | 久久伊人精品 | 国产高清美女一级a毛片久久 | 精品一区二区三区在线播放 | 日韩视频免费在线观看 | 中文日韩欧美 | 伊人蕉|