999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

輕量數據庫Spatialite在AutoCAD中的應用

2013-03-06 05:43:50柳華橋王光昇
城市勘測 2013年5期
關鍵詞:數據庫

柳華橋,王光昇

(天津市測繪院,天津 300381)

輕量數據庫Spatialite在AutoCAD中的應用

柳華橋?,王光昇

(天津市測繪院,天津 300381)

一般的GIS軟件都支持幾何對象的空間分析處理,如Within、Intersect、Contain、Overlap等,而AutoCAD缺少像GIS那樣的空間分析功能,但可以借助于輕量級空間數據庫Spatialite實現對AutoCAD對象的空間操作。本文討論了如何將Spatialite空間數據庫模塊嵌入到AutoCAD平臺中以及如何實現對AutoCAD對象的空間處理和運算。

Spatialite;空間數據庫;AutoCAD

1 引 言

在當今的測繪行業中,AutoCAD軟件一直是數據采集加工的主流軟件。AutoCAD在要素表現上靈活多樣,命令定制方便快捷。但是在實際應用中,一般的CAD數據都要轉成GIS數據,以滿足于不同專業的信息管理系統、電子地圖、空間數據庫等的需要??梢哉f,操作上的方便,使得AutoCAD成為數據采集理想平臺,而在信息承載、空間數據的分析和處理方面,GIS數據更能滿足信息化的需要。此外,AutoCAD軟件對幾何對象的空間運算處理能力的不足也影響了其向GIS數據轉換的質量。本文闡述了如何將輕量級空間數據庫Spatialite嵌入到AutoCAD中,實現對AutoCAD對象的空間操作。Spatialite在AutoCAD與GIS之間架起了一座橋梁,將兩者有機地融合在一起。

2 Spatialite空間數據庫

2.1 簡介

SQLite是一個輕量級的數據庫,簡單、穩定、可移植性好、支持跨平臺操作。Spatialite是SQLite數據庫的空間數據引擎,能夠支持幾何數據類型操作擴展的SQL函數。Spatialite是對SQLite的擴展,遵循OGC空間數據規范。主要功能包括:①借助于GEOS庫,實現了對OpenGIS空間函數集的完全支持,如:Overlaps、Touches、Union、Buffer等;②遵循OpenGIS規范完全支持空間元數據格式;③采用PROJ.4和EPSG支持坐標系的投影變換;④采用GNU的libiconv支持多語言字符編碼;⑤基于SQLite的R?Tree擴展真正實現了空間索引,極大地提高了空間查詢和空間分析;⑥用戶可以對外部的Shape文件、CSV/TXT文件進行SQL查詢。

2.2 Spatialite支持的幾何類型

Spatialite支持的基本的幾何類型包括:POINT、LINESTRING和POLYGON,還支持很多復雜的類型,如MULTIPOINT、MULTILINESTRING、MULTIPOLYGON等??梢酝ㄟ^WKT(Well Known Text)表達式來描述每一個幾何對象,如:

POINT(123.45 543.21)

LINESTRING(100.0 200.0,201.5 102.5,1234.56 123.89) POLYGON((101.23 171.82,201.32 101.5,215.7 201.953,101.23 171.82))

2.3 在AutoCAD中嵌入Spatialite

第一步,我們將SQLite嵌入到AutoCAD中。

SQLite是輕量級的,可以作為程序的一個模塊來直接使用。我們建立一個ObjectARX工程,將SQLite源程序添加進來,然后編寫操作數據庫的ADS函數提供給LISP程序調用。該方法需要以下兩個文件:

sqlite-amalgamation-3071000.zip、

SQLiteLsp[1[1]2.17.1].zip

其中,第一個文件是SQLite的源程序,可以從www. sqlite.org網站上找到;第二個文件是www.theswamp.org網站上由Daniel提供的開源的ObjectARX工程,用于操作SQLite數據庫。編譯時,首先將sqlite-amalgamation源程序編譯成一個靜態庫SQLite.lib,然后將它鏈接到SQLiteLsp工程中,生成SQLiteLsp18x32.arx,加載到AutoCAD中,就可以對數據庫進行操作了。

需要注意的是,默認情況下,sqlite-amalgamation并沒有開啟所有功能擴展模塊,需要在編譯SQLite.lib的工程屬性設置中開啟所需的設置,如在“C/C++”→“預處理器”→“預處理器定義”中添加SQLITE_ENABLE_COLUMN_METADATA和SQLITE_ENABLE_RTREE兩個宏定義,使SQLITE支持對元數據和R?Tree的操作。

第二步,鏈接Spatialite空間數據庫擴展模塊。

另外在Spatialite網站上下載以下兩個文件:

libspatialite-win-x86-2.4.0.zip

dependencies-win-x86.zip

其中,第一個文件包含Spatialite的空間擴展模塊libspatialite-2.dll,第二個文件是它的Windows依賴文件。

通過以上兩步的準備工作,得到以下三部分可以在AutoCAD中使用的應用程序模塊,如表1所示。

應用程序模塊 表1

第三步,需要作如下兩步配置:首先,將SQLiteL-sp18x32.arx應用程序加載到AutoCAD中;然后,再將libspatialite-2.dll和它的所有依賴文件放到AutoCAD搜索路徑中,這樣,我們就可以在AutoCAD中應用Spatialite空間數據庫了。

3 應用方法及實例

3.1 創建空間數據庫

通過以下LISP語句,創建一個空間數據庫:

(setq DB"C:\spatial.db")

;打開或新建數據庫

(DSQL_OPEN DB)

;加載空間擴展模塊

(setq DLL"libspatialite-2.dll")

(setq res(DSQL_LOADEXT DB DLL))

;初始化空間元數據

(setq res(DSQL_QUERY DB"SELECT InitSpatialMetaData ();"))

;創建表

(setq SQL(strcat"CREATE TABLE MyPoly(name TEXT NOTNULL);"))

(DSQL_DML DB SQL)

;添加幾何字段

(setq res(DSQL_QUERY DB"SELECT AddGeometryColumn ('MyPoly','geom',4326,'POLYGON','XY');"))

;創建空間索引

(setq res(DSQL_QUERY DB"SELECT CreateSpatialIndex(' MyPoly','geom');"))

;關閉數據庫

(DSQL_CLOSE DB)

運行以上代碼,就創建了一個空的空間數據庫文件,使用spatialite_gui工具查看其文件結構如圖1~圖3所示。代碼中語句(setq res(DSQL_LOADEXT DB DLL))負責裝載"libspatialite-2.dll空間擴展模塊,其返回值res為T時表明裝載成功,只有裝載成功后,后面的空間查詢語句才能生效。InitSpatialMetaData、AddGeometryColumn、CreateSpatialIndex都是Spatialite的SQL查詢語句,分別用于初始化空間元數據、創建幾何字段、創建空間索引,而且我們注意到這些函數在運行時都是以SELECT查詢的方式來執行的。

圖1 空間數據庫文件結構

圖2 空間元數據表

圖3 空間索引表

3.2 空間元數據和空間索引

像其他空間數據庫一樣,Spatialite也通過元數據機制來管理空間數據,所以在創建數據庫文件之后,且在調用空間SQL函數之前需要調用語句

SELECT InitSpatialMetaData();

來建立元數據表。

Spatialite的空間索引依賴于SQLite的R?Tree模型,我們通過調用語句

SELECT CreateSpatialIndex('MyPoly','geom');

建立空間索引表,當向數據庫中INSERT、UPDATE或DELETE記錄時,Spatialite會通過觸發器自動更新空間索引??臻g索引對于大數據量的查詢檢索操作非常有效。

成年曼加利察豬的體形較大,一身綿羊毛般的卷毛讓它們看起來非常特別。曼加利察豬是目前世界上唯一擁有長毛的豬,喜歡吃玉米、土豆、胡蘿卜、牧草、野山果等。

3.3 入庫操作

圖4為天津市區的DWG格式的分區結合表,每個分區要素獨立閉合,分區號存儲在擴展屬性中,我們將其入到空間數據庫spatial.db中。

圖4 分區結合表

主要的入庫步驟為:

①打開或新建空間數據庫;

②加載空間擴展模塊;

③建立選擇集,遍歷每個分區要素,將每個要素寫入庫中;

實現的基本過程類似于3.1,主要的區別在于第③步,如何按照Spatialite的要求將幾何對象寫入庫中。例如,我們要將3個點的多邊形:(0,0)、(2,0)、(1,1)寫入庫中:

setq poly"POLYGON((0.0 0.0,2.0 0.0,1.0 1.0,0.0 0. 0))")

(setq geom(strcat"GeomFromText('"poly"',4326)"))

(setq res(DSQL_DML DB"INSERT INTO MyPoly(name,geom)VALUES('%s',%s);"name geom))

以上代碼實現了將一個POLYGON寫入到空間數據庫中。需要注意的是,用程序構成POLYGON點表字符串時要讓起點和終點重合,表明是閉合的多邊形;當入庫的數據量比較大時,應該采用事務的方式,即:

;開啟事務

(DSQL_DML DB"begin transaction;")

;入庫

;提交事務

(DSQL_DML DB"commit transaction;")

3.4 空間查詢示例

例如我們要在CAD中選擇一個多邊形,然后在空間數據庫中查詢與它相交的對象,如圖5所示。

圖5 空間查詢

實現步驟如下:

①在CAD中選擇多邊形,然后通過GeomFromText構建一個多邊形幾何對象geom(如3.3中代碼與示);

②打開空間數據庫;

③加載空間擴展模塊;

④執行空間查詢操作;

⑤關閉空間數據庫。

空間查詢代碼:

(setq res(DSQL_ASSOCQUERY DB"SELECT name FROM MyPoly WHERE Intersects(MyPoly.geom,%s);"geom))

查詢返回的結果為:

_$(mapcar'(lambda(x)(cdr(assoc"name"x)))res)

("C31""C30""C29""C28""C27""C25""C24"" C23")

_$

除了Intersects函數外,Spatialite支持的空間關系函數還包括:Equal、Disjoint、Touches、Within、Overlaps、Crosses、Contains、Relate等。

3.5 AutoCAD對象的空間運算

從前面的例子可以得知,AutoCAD的對象并不一定要寫入到空間數據庫以后才能進行空間運算。我們可以通過GeomFromText函數先把WKT表達式構造成空間幾何對象,再通過空間數據庫,進行空間分析運算。

例如,如圖6所示,如果我們要用g2剪切g1,得到結果g3,實現方法為:

g3=Difference(g1,g2)

圖6 多邊形剪切

LISP的執行代碼為:

(setq res(DSQL_ASSOCQUERY DB"SELECT AsText (Difference(%s,%s));"g1 g2))

返回值中包含結果多邊形g3的WKT表達式信息,我們要得到g3,只需要解析出點坐標信息,新建多邊形即可。

上面語句中,DB參數是空間數據庫,它只是g1和g2進行空間運算的環境,而g1和g2并沒有寫入到數據庫中,所有的AutoCAD對象都可以以這種方式直接進行空間運算。

4 結 語

將Spatialite輕量空間數據庫嵌入到AutoCAD中,可以實現對AutoCAD對象的空間分析運算,有效彌補AutoCAD空間分析處理能力不足的問題。將其合理地應用于AutoCAD平臺的數據采集、檢查、GIS轉換數據,可以最大限度地保證數據質量。從實踐結果來看,Spatialite為CAD與GIS兩個平臺的統一提供了良好的解決方案。

[1] 李玲,王慶,王慧青.基于Spatialite輕量級空間數據庫的GIS數據管理[J].地理信息世界,2010(4).

[2] Alessandro Furieri.Spatialite Cookbook[R].2011.

[3] http://www.gaia-gis.it/gaia-sins/spatialite-tutorial-2.3.1. html#mbr_cache[EB/OL].

[4] http://www.gaia-gis.it/gaia-sins/spatialite-sql-4.0.0.html.[EB/OL].

[5] Autodesk.ObjectARX開發指南[R].1999.

[6] 陳伯雄,馮偉.VisualLISP程序設計-技巧與范例[M].北京:人民郵電出版社,2002.

The Application of the lightweight database-Spatialite in AutoCAD

Liu Huaqiao,Wang Guangsheng
(Tianjin Institute of Surveying and Mapping,Tianjin 300381,China)

The general GIS software support geometric objects spatial analysis,such asWithin,Intersects,Contains,Overlaps and so on,while AutoCAD lacks these functions,but we can use lightweight spatial database-Spatialite to achieve AutoCAD object space operation.This article discusses how to embed the Spatialite space database module into AutoCAD platform,aswell as how to realize the AutoCAD object spatial processing and operation.

spatialite;spatial database;AutoCAD

1672-8262(2013)05-46-04

P208.1

B

2012—12—18

柳華橋(1980—),男,工程師,注冊測繪師,主要從事工程測量及應用程序開發工作。

猜你喜歡
數據庫
數據庫
財經(2017年15期)2017-07-03 22:40:49
數據庫
財經(2017年2期)2017-03-10 14:35:35
兩種新的非確定數據庫上的Top-K查詢
數據庫
財經(2016年15期)2016-06-03 07:38:02
數據庫
財經(2016年3期)2016-03-07 07:44:46
數據庫
財經(2016年6期)2016-02-24 07:41:51
數據庫
財經(2015年3期)2015-06-09 17:41:31
數據庫
財經(2014年21期)2014-08-18 01:50:18
數據庫
財經(2014年6期)2014-03-12 08:28:19
數據庫
財經(2013年6期)2013-04-29 17:59:30
主站蜘蛛池模板: 欧美亚洲国产日韩电影在线| 亚洲综合极品香蕉久久网| 一区二区三区高清视频国产女人| 久久香蕉国产线看观看亚洲片| 欧美人在线一区二区三区| 久久国产精品影院| 韩国v欧美v亚洲v日本v| 青青草一区| 日本欧美中文字幕精品亚洲| 播五月综合| 高清大学生毛片一级| 国产粉嫩粉嫩的18在线播放91| 国产亚洲精品97在线观看| 精品国产一区91在线| 国产内射一区亚洲| 国产欧美精品午夜在线播放| 男人的天堂久久精品激情| 亚洲伊人电影| 扒开粉嫩的小缝隙喷白浆视频| 亚洲人成网站在线播放2019| 尤物在线观看乱码| 亚洲码一区二区三区| 婷婷综合缴情亚洲五月伊| 亚洲日韩Av中文字幕无码| 国产毛片久久国产| 久久国产精品波多野结衣| h网址在线观看| 久草网视频在线| 久久精品中文字幕免费| 黄色片中文字幕| 国产情侣一区二区三区| 高清不卡一区二区三区香蕉| 国内黄色精品| 露脸一二三区国语对白| 四虎综合网| 视频二区国产精品职场同事| 免费又爽又刺激高潮网址| 少妇精品久久久一区二区三区| 精品黑人一区二区三区| 亚洲成人动漫在线观看| 亚洲视频无码| 91丨九色丨首页在线播放| 国产性猛交XXXX免费看| 手机成人午夜在线视频| 日本亚洲最大的色成网站www| 亚洲成人精品在线| 成人第一页| 青青国产在线| 亚洲黄色高清| 精品国产成人三级在线观看| 成人免费午间影院在线观看| 国产精品欧美激情| 国产精品成人久久| 国产福利观看| 欧洲熟妇精品视频| 亚洲性视频网站| 免费人成视网站在线不卡| 91年精品国产福利线观看久久| 91免费观看视频| 日韩福利在线观看| 综合色在线| 亚洲an第二区国产精品| Jizz国产色系免费| 亚洲第一视频网| 77777亚洲午夜久久多人| 亚洲婷婷六月| 国产精品太粉嫩高中在线观看| 日本成人精品视频| 日韩欧美中文亚洲高清在线| 91福利在线观看视频| 又粗又硬又大又爽免费视频播放| 欧美国产另类| 国产成人毛片| 福利姬国产精品一区在线| 日本一区二区三区精品视频| 奇米影视狠狠精品7777| 99久久国产综合精品2023| 国产精品微拍| 亚洲手机在线| 成人字幕网视频在线观看| 无码'专区第一页| 免费99精品国产自在现线|