亚洲免费av电影一区二区三区,日韩爱爱视频,51精品视频一区二区三区,91视频爱爱,日韩欧美在线播放视频,中文字幕少妇AV,亚洲电影中文字幕,久久久久亚洲av成人网址,久久综合视频网站,国产在线不卡免费播放

        ?

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

        2013-03-06 05:43:50柳華橋王光昇
        城市勘測 2013年5期
        關鍵詞:多邊形入庫語句

        柳華橋,王光昇

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

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

        柳華橋?,王光昇

        (天津市測繪院,天津 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 引 言

        在當今的測繪行業(yè)中,AutoCAD軟件一直是數(shù)據(jù)采集加工的主流軟件。AutoCAD在要素表現(xiàn)上靈活多樣,命令定制方便快捷。但是在實際應用中,一般的CAD數(shù)據(jù)都要轉成GIS數(shù)據(jù),以滿足于不同專業(yè)的信息管理系統(tǒng)、電子地圖、空間數(shù)據(jù)庫等的需要??梢哉f,操作上的方便,使得AutoCAD成為數(shù)據(jù)采集理想平臺,而在信息承載、空間數(shù)據(jù)的分析和處理方面,GIS數(shù)據(jù)更能滿足信息化的需要。此外,AutoCAD軟件對幾何對象的空間運算處理能力的不足也影響了其向GIS數(shù)據(jù)轉換的質量。本文闡述了如何將輕量級空間數(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支持坐標系的投影變換;④采用GNU的libiconv支持多語言字符編碼;⑤基于SQLite的R?Tree擴展真正實現(xiàn)了空間索引,極大地提高了空間查詢和空間分析;⑥用戶可以對外部的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源程序添加進來,然后編寫操作數(shù)據(jù)庫的ADS函數(shù)提供給LISP程序調用。該方法需要以下兩個文件:

        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ù)庫進行操作了。

        需要注意的是,默認情況下,sqlite-amalgamation并沒有開啟所有功能擴展模塊,需要在編譯SQLite.lib的工程屬性設置中開啟所需的設置,如在“C/C++”→“預處理器”→“預處理器定義”中添加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依賴文件。

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

        應用程序模塊 表1

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

        3 應用方法及實例

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

        ;關閉數(shù)據(jù)庫

        (DSQL_CLOSE DB)

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

        圖1 空間數(shù)據(jù)庫文件結構

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

        圖3 空間索引表

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

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

        SELECT InitSpatialMetaData();

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

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

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

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

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

        3.3 入庫操作

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

        圖4 分區(qū)結合表

        主要的入庫步驟為:

        ①打開或新建空間數(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ù)庫中。需要注意的是,用程序構成POLYGON點表字符串時要讓起點和終點重合,表明是閉合的多邊形;當入庫的數(shù)據(jù)量比較大時,應該采用事務的方式,即:

        ;開啟事務

        (DSQL_DML DB"begin transaction;")

        ;入庫

        ;提交事務

        (DSQL_DML DB"commit transaction;")

        3.4 空間查詢示例

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

        圖5 空間查詢

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

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

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

        ③加載空間擴展模塊;

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

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

        空間查詢代碼:

        (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函數(shù)外,Spatialite支持的空間關系函數(shù)還包括:Equal、Disjoint、Touches、Within、Overlaps、Crosses、Contains、Relate等。

        3.5 AutoCAD對象的空間運算

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

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

        g3=Difference(g1,g2)

        圖6 多邊形剪切

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

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

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

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

        4 結 語

        將Spatialite輕量空間數(shù)據(jù)庫嵌入到AutoCAD中,可以實現(xiàn)對AutoCAD對象的空間分析運算,有效彌補AutoCAD空間分析處理能力不足的問題。將其合理地應用于AutoCAD平臺的數(shù)據(jù)采集、檢查、GIS轉換數(shù)據(jù),可以最大限度地保證數(shù)據(jù)質量。從實踐結果來看,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程序設計-技巧與范例[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—),男,工程師,注冊測繪師,主要從事工程測量及應用程序開發(fā)工作。

        猜你喜歡
        多邊形入庫語句
        多邊形中的“一個角”問題
        重磅!廣東省“三舊”改造標圖入庫標準正式發(fā)布!
        中國食品品牌庫入庫企業(yè)信息公示①
        中國食品(2021年2期)2021-02-24 03:55:35
        重點:語句銜接
        多邊形的藝術
        解多邊形題的轉化思想
        多邊形的鑲嵌
        精彩語句
        身臨其境探究竟 主動思考完任務——《倉儲與配送實務》入庫作業(yè)之“入庫訂單處理”教學案例
        人間(2015年8期)2016-01-09 13:12:42
        批量地籍圖入庫程序設計方法
        吉林地質(2014年4期)2014-03-11 16:48:17
        免费人成再在线观看视频| 国产免费成人自拍视频| 国产精品一区二区性色| 蜜臀av性久久久久蜜臀aⅴ| 精品视频入口| 国产成人精品自拍在线观看| 天天爽夜夜爽人人爽一区二区| 婷婷综合久久中文字幕蜜桃三电影| 偷拍熟女亚洲另类| 中文字幕人妻互换av| 色先锋av影音先锋在线| 激情内射亚洲一区二区三区爱妻| 国产精品国产三级国产an| 国产三级黄色大片在线免费看| 国产精品兄妹在线观看麻豆| 热の国产AV| av网站可以直接看的| 最新国产不卡在线视频 | 在教室轮流澡到高潮h免费视| 一本一道人人妻人人妻αv| 无限看片在线版免费视频大全| 国产目拍亚洲精品区一区| 亚洲一区二区三区四区地址| 色 综合 欧美 亚洲 国产| 精品久久久久久无码不卡| 国产精品午夜高潮呻吟久久av | 国产精品成人有码在线观看| 精品一区三区视频在线观看| 色八区人妻在线视频免费| 亚洲av日韩片在线观看| 国产日产韩国级片网站| 色视频线观看在线网站| 精品88久久久久88久久久| 日韩精品av在线一区二区| 99噜噜噜在线播放| 依依成人精品视频在线观看| 亚洲AV无码一区二区三区少妇av| 国产视频激情在线观看| 女人被狂c躁到高潮视频| 久久精品国产亚洲AV无码不| 亚洲av成人永久网站一区|