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

輕量數(shù)據(jù)庫Spatialite在AutoCAD中的應(yīng)用

2013-03-06 05:43:50柳華橋王光昇
城市勘測 2013年5期
關(guān)鍵詞:數(shù)據(jù)庫

柳華橋,王光昇

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

輕量數(shù)據(jù)庫Spatialite在AutoCAD中的應(yīng)用

柳華橋?,王光昇

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

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

Spatialite;空間數(shù)據(jù)庫;AutoCAD

1 引 言

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

2 Spatialite空間數(shù)據(jù)庫

2.1 簡介

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

2.2 Spatialite支持的幾何類型

Spatialite支持的基本的幾何類型包括:POINT、LINESTRING和POLYGON,還支持很多復(fù)雜的類型,如MULTIPOINT、MULTILINESTRING、MULTIPOLYGON等。可以通過WKT(Well Known Text)表達(dá)式來描述每一個幾何對象,如:

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源程序添加進來,然后編寫操作數(shù)據(jù)庫的ADS函數(shù)提供給LISP程序調(diào)用。該方法需要以下兩個文件:

sqlite-amalgamation-3071000.zip、

SQLiteLsp[1[1]2.17.1].zip

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

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

第二步,鏈接Spatialite空間數(shù)據(jù)庫擴展模塊。

另外在Spatialite網(wǎng)站上下載以下兩個文件:

libspatialite-win-x86-2.4.0.zip

dependencies-win-x86.zip

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

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

應(yīng)用程序模塊 表1

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

3 應(yīng)用方法及實例

3.1 創(chuàng)建空間數(shù)據(jù)庫

通過以下LISP語句,創(chuàng)建一個空間數(shù)據(jù)庫:

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

;打開或新建數(shù)據(jù)庫

(DSQL_OPEN DB)

;加載空間擴展模塊

(setq DLL"libspatialite-2.dll")

(setq res(DSQL_LOADEXT DB DLL))

;初始化空間元數(shù)據(jù)

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

;創(chuàng)建表

(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');"))

;創(chuàng)建空間索引

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

;關(guān)閉數(shù)據(jù)庫

(DSQL_CLOSE DB)

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

圖1 空間數(shù)據(jù)庫文件結(jié)構(gòu)

圖2 空間元數(shù)據(jù)表

圖3 空間索引表

3.2 空間元數(shù)據(jù)和空間索引

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

SELECT InitSpatialMetaData();

來建立元數(shù)據(jù)表。

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

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

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

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

3.3 入庫操作

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

圖4 分區(qū)結(jié)合表

主要的入庫步驟為:

①打開或新建空間數(shù)據(jù)庫;

②加載空間擴展模塊;

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

實現(xiàn)的基本過程類似于3.1,主要的區(qū)別在于第③步,如何按照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))

以上代碼實現(xiàn)了將一個POLYGON寫入到空間數(shù)據(jù)庫中。需要注意的是,用程序構(gòu)成POLYGON點表字符串時要讓起點和終點重合,表明是閉合的多邊形;當(dāng)入庫的數(shù)據(jù)量比較大時,應(yīng)該采用事務(wù)的方式,即:

;開啟事務(wù)

(DSQL_DML DB"begin transaction;")

;入庫

;提交事務(wù)

(DSQL_DML DB"commit transaction;")

3.4 空間查詢示例

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

圖5 空間查詢

實現(xiàn)步驟如下:

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

②打開空間數(shù)據(jù)庫;

③加載空間擴展模塊;

④執(zhí)行空間查詢操作;

⑤關(guān)閉空間數(shù)據(jù)庫。

空間查詢代碼:

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

查詢返回的結(jié)果為:

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

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

_$

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

3.5 AutoCAD對象的空間運算

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

例如,如圖6所示,如果我們要用g2剪切g(shù)1,得到結(jié)果g3,實現(xiàn)方法為:

g3=Difference(g1,g2)

圖6 多邊形剪切

LISP的執(zhí)行代碼為:

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

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

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

4 結(jié) 語

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

[1] 李玲,王慶,王慧青.基于Spatialite輕量級空間數(shù)據(jù)庫的GIS數(shù)據(jù)管理[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開發(fā)指南[R].1999.

[6] 陳伯雄,馮偉.VisualLISP程序設(shè)計-技巧與范例[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—),男,工程師,注冊測繪師,主要從事工程測量及應(yīng)用程序開發(fā)工作。

猜你喜歡
數(shù)據(jù)庫
數(shù)據(jù)庫
財經(jīng)(2017年15期)2017-07-03 22:40:49
數(shù)據(jù)庫
財經(jīng)(2017年2期)2017-03-10 14:35:35
兩種新的非確定數(shù)據(jù)庫上的Top-K查詢
數(shù)據(jù)庫
財經(jīng)(2016年15期)2016-06-03 07:38:02
數(shù)據(jù)庫
財經(jīng)(2016年3期)2016-03-07 07:44:46
數(shù)據(jù)庫
財經(jīng)(2016年6期)2016-02-24 07:41:51
數(shù)據(jù)庫
財經(jīng)(2015年3期)2015-06-09 17:41:31
數(shù)據(jù)庫
財經(jīng)(2014年21期)2014-08-18 01:50:18
數(shù)據(jù)庫
財經(jīng)(2014年6期)2014-03-12 08:28:19
數(shù)據(jù)庫
財經(jīng)(2013年6期)2013-04-29 17:59:30
主站蜘蛛池模板: 久久综合丝袜长腿丝袜| 秋霞午夜国产精品成人片| 欧美激情第一欧美在线| 国产农村精品一级毛片视频| 欧美精品高清| 欧美日韩免费观看| a网站在线观看| 福利一区在线| 真人免费一级毛片一区二区| 国产最爽的乱婬视频国语对白| 国产91高跟丝袜| 嫩草影院在线观看精品视频| 亚洲精品桃花岛av在线| 色欲不卡无码一区二区| 日韩成人在线网站| 在线观看精品自拍视频| 色网在线视频| 国产精品久久久精品三级| 国产午夜精品一区二区三区软件| 蝌蚪国产精品视频第一页| 国产JIZzJIzz视频全部免费| 国产日韩AV高潮在线| 夜夜操国产| AV在线天堂进入| 国产精品女同一区三区五区| 免费网站成人亚洲| 欧美区日韩区| 91精品国产丝袜| 国产综合色在线视频播放线视| 伊人激情综合| 亚洲av片在线免费观看| 精品欧美一区二区三区在线| 蜜桃视频一区二区三区| 久久久久亚洲精品无码网站| aaa国产一级毛片| 国产一级在线播放| 亚洲成av人无码综合在线观看| 久久精品嫩草研究院| 亚洲av日韩av制服丝袜| 国产另类乱子伦精品免费女| 国产肉感大码AV无码| 四虎影视8848永久精品| 久久国产精品电影| 国产精品网址你懂的| 色婷婷色丁香| 亚洲中文字幕23页在线| 国产凹凸视频在线观看| 999国产精品永久免费视频精品久久 | 欧美精品伊人久久| 伊人久久精品无码麻豆精品| 亚洲视频影院| 国产精品久久久久久搜索| 亚洲品质国产精品无码| 99性视频| 精品国产网| 欧美精品亚洲二区| 尤物午夜福利视频| 无码内射中文字幕岛国片| 欧美午夜小视频| 国产精品毛片在线直播完整版| 欧美翘臀一区二区三区| 国产精品偷伦视频免费观看国产| 在线色国产| 国产成人精品高清在线| 暴力调教一区二区三区| 亚洲电影天堂在线国语对白| 91久久青青草原精品国产| 国产视频大全| 日本草草视频在线观看| 国产福利微拍精品一区二区| 尤物成AV人片在线观看| 99草精品视频| 亚洲精品无码高潮喷水A| 国产欧美高清| 人妖无码第一页| 精品欧美日韩国产日漫一区不卡| 成人日韩欧美| 亚洲天堂网在线视频| 91福利国产成人精品导航| 国产亚洲精| 青青操视频免费观看| 色香蕉影院|