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

基于NetTopologySuite在AutoCAD中實現拓撲多邊形的構建

2014-06-26 07:39:48王光昇周奎
城市勘測 2014年1期
關鍵詞:信息方法模型

王光昇 ,周奎

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

1 引 言

AutoCAD 軟件是國內地形圖數據采集加工的主流軟件,它為開發人員提供了豐富的開發接口,便于我們定制開發滿足專業應用需求的應用程序。為了滿足國家新版地形圖圖式、數據字典的要求,天津市測繪院開發了基于AutoCAD Map3D 的地形圖采集編輯軟件,該軟件實現了局部拓撲構面功能,即通過已有的邊界自動生成多邊形。最初,我們通過Map3D 的Clean、Topology 等功能來實現,但經過應用測試,發現這種方法存在弊端,首先,Clean 操作會生產中間數據,對于最終結果而言,這些數據是沒有用的;其次,Map3D 的Clean、Topology 功能沒有完全釋放選擇集,在同一繪圖環境下多次應用會產生“超出選擇集數量的最大范圍”的問題,而采集軟件中的拓撲構面功能應該是能夠與用戶交互的反復調用的工具,所以這種構建多邊形的方法是不可取的。本文闡述了在AutoCAD 中引入符合OpenGIS 標準的GIS 分析、操作類庫NetTopology-Suite,通過GIS 解決方案對AutoCAD 中的線狀對象進行空間分析,生成拓撲多邊形。這種方法的優點是:采用完全的幾何運算,不產生中間數據,速度快;不依賴于Map3D 軟件,降低了對CAD 軟件平臺的要求。

2 NetTopologySuite 簡介

NetTopologySuite(以下簡稱NTS)是著名的JTS Topology Suite 的C#/.NET 版本,NTS 項目的目的是提供一個基于.NET,快速、穩定的GIS 解決方案,以應用于所有.NET 平臺,包括各類嵌入式設備。

JTS Topology Suite 是一個OpenGIS 標準的GIS 分析、操作類庫,它實現了OGC(Open Geospatial Consortium)定義在SFS(Simple Features Specification)中的簡單對象模型,提供了完整的二元比較集合,支持的空間關系包括:equals、disjoint、touches、crosses、within、contains、overlaps;JTS 支持基本的空間分析方法,包括:Intersection、Union、Difference、Symmetric Difference、Convex hull、Buffer。同時,JTS API 支持用戶自定義精度模型。

3 程序流程

程序實現的基本流程如圖1所示。

圖1 程序基本流程

3.1 輸入數據

用戶輸入的數據主要包括3 項:線狀邊界、精度模型比例尺、多邊形內一點。

3.2 建立精度模型

NTS 允許用戶指定一個明確的精度模型,即輸入坐標值精確的位數。實現方法如下:

PrecisionModel _precisionModel;

GeometryFactory _geometryFactory;

_precisionModel.Scale=in_scale;

_geometryFactory = new GeometryFactory(_precisionModel,0);

在后續的步驟中,用_geometryFactory 的CreateLineString 方法建立的LineString 對象都受到精度模型_precisionModel 的約束,如:

ILineString lstr=_geometryFactory.CreateLineString(

cl.ToCoordinateArray());

3.3 分析、處理、存儲邊界數據

分如下幾步:

第一,用AutoCAD 的幾何類型存儲每條邊界線的每一段。如果是直線段(Line),用LineSegment2d 類型存儲,如果是弧段,用CircularArc2d 存儲,如果是多段線(Polyline),由于它是由多個直線段(或弧段)組成的,所以可以將其存儲為LineSegment2d 與CircularArc2d 的集合。使用幾何類型存儲后,后續的坐標信息讀取、幾何運算就不用再讀取CAD 對象了,可以有效地提高運算速度。

第二,建立LineString 集合。將直線段直接創建LineString 對象并存入集合中;對于弧段,首先計算與其他所有線段的交點,然后對交點排序,再分割弧段為子弧段,最后,對子弧段進行加密、創建LineString 對象存入集合。

分割弧段時,首先要對弧上所有分割點按照相對起始點的參數(或距離)進行排序,如圖2所示:

圖2 分割圓弧

排序方法為:

其中,MyCompare 是自定義的比較器:

然后取得相鄰兩個分割點之間子弧段,方法如下:

分割子弧段后,還需要按4.2 所述的方法加密子弧段。

3.4 打斷交叉對象

通過上面的分析處理,我們已經準備好了用于拓撲分析的原材料,即LineString 集合,在生成多邊形之前,需要進行圖形規范化,其中最主要的是打斷交叉對象,如圖3所示:

圖3 打斷交叉對象

實現方法如下:

3.5 生成多邊形

NTS 提供了Polygonizer 類,可以對規范化之后的LineString 集合進行處理,獲取多邊形,方法為:

Polygonizer polygonizer=new Polygonizer();

polygonizer.Add(nodedLineStrings);

IList <IGeometry >polys=polygonizer.GetPolygons()as IList <IGeometry >;

遍歷所有多邊形,包含用戶輸入的區域內一點的多邊形即為目標多邊形。

3.6 將加密點解析成圓弧

上述目標多邊形點表中如果包含子弧段加密點,那么我們必須對加密弧段信息進行解析,復原弧段信息,才能得到最終的結果,詳見4.2。

3.7 輸出結果多邊形

程序整個過程,僅僅在用戶輸入邊界數據之后,我們讀取了一次AutoCAD 線狀邊界數據,并保存到幾何類型中,之后所有的運算都是通過幾何運算來實現的,最大限度地減少了對AutoCAD 對象的直接操作。這樣既提高了運算速度,又增強了程序的穩定性。

基于此設計思想,在輸出結果多邊形時,我們并不直接創建具體的AutoCAD 閉合多段線,而是通過ResultBuffer 類型返回多邊形點表及凸度信息,然后由調用函數完成具體對象的創建。

4 關鍵問題處理

通過NTS 在AutoCAD 實現拓撲多邊形的構建,需要解決兩個關鍵的問題:

4.1 精度模型

剛開始研究本課題的時候,沒有用到精度模型,很快就遇到了一些奇怪的問題:在CAD 中明明是能夠形成閉合的邊界,但在NTS 中卻得不到多邊形。如圖4所示,a、b、c 是由不同的邊界圍成的閉合區域,用NTS構面時,可能只能得到a、b 兩個多邊形。

圖4 NTS 構面

經過研究發現,NTS 在處理坐標精度時,默認情況下使用精密精確度模型,即用雙精度表示,自從Java使用IEEE-754 浮點標準以來,它就提供了53 位的精確度。過高的精度設置使得NTS 在比較兩個雙精度浮點數是否相等時過于嚴格,導致我們無法得到期望的結果。圖4中區域c 中邊l1的終點和邊l2的起點由于精度要求過高,使得NTS 認為它們并不重合,所以無法構建多邊形。

為了解決這一問題,我們先后測試了兩種方法:

第一種,在AutoCAD 中,先將所選的線狀邊界對象放大一定的比例(相當于精度模型中的比例尺),分析處理以后,再恢復對象比例。這種方法雖然解決了精度問題,但是需要修改CAD 對象,并不是最理想的方案。

第二種,NTS 中精度模型的設計很好地解決了這一難題。精度模型包括三種類型:固定精度、浮點精度、精密精確度。這里使用固定精度模型,替代了前一種方法,程序編寫起來更簡單、結構更清晰、代碼更易于維護。

4.2 圓弧處理

如圖5所示,只有分割圓弧后再進行圓弧加密,最終生成的多邊形才能解析出弧段信息。圓弧的分割點1、2 是多邊形的特征點,是解析子弧段信息的重要依據,是不能遺失的。而在(a)中只是粗略地對整個圓弧進行加密,遺失了特征點,所以不能再解析子弧段了;(b)中先對整個圓弧進行分割,然后對每個子弧段進行加密,生成的多邊形中不僅包含了特征點,而且包含了完整的子弧段加密信息,所以能夠解析出子弧段的信息。

圖5 圓弧分割、加密與解析

圓弧的分割方法3.3 中已經提到,子弧段加密的方法如下:

Point2d[]pts=sub_arc.GetSamplePoints(20);

即對所有圓弧的采樣點取固定的數值,這里取值20。采樣點僅僅是為處理圓弧而使用的臨時點,所以選取數量可以自己設定,但要前后統一,考慮到效率問題,也不宜選取太多的點。

解析子弧段的方法:

遍歷所有子弧段,每個子弧段取采樣點20 個,將采樣點集合與多邊形上的點進行比較,如果都落在多邊形上,則該子弧段的圓弧信息就應該映射到多邊形上,作如下處理:保留多邊形上與采樣點集合中首尾點重合的點,移除與中間的點重合的點,然后計算凸度值,即可恢復子弧段信息。如圖5中(b)、(c)所示。

計算3 點圓弧凸度的方法為:

// s_pt 是起點,e_pt 是終點,i_pt 是弧上一點

private static double GetBulgeBy3Pt(Point2d s_pt,Point2d e_pt,Point2d i_pt)

{

//i_pt 到e_pt 的角度

double angle1 =i_pt.GetVectorTo(e_pt).Angle;

//s_pt 到i_pt 的角度

double angle2 =s_pt.GetVectorTo(i_pt).Angle;

double bulge=Math.Tan((angle1 - angle2)/ 2.0);

return bulge;

}

5 應用測試

如圖6所示,拓撲得到的多邊形為一個帶有內環的多邊形,經過圓弧處理,所有的弧段信息都正確地解析出來了。在NTS 中,讀取Polygon 對象的坐標時,用ExteriorRing 屬性獲得外環坐標,用InteriorRings 獲得所有內環信息,如:

圖6 環狀拓撲多邊形

Coordinate[]pts1 =poly.ExteriorRing.Coordinates;

foreach (LineString ls in poly.InteriorRings){

Coordinate[]pts2 =ls.Coordinates;

}

6 結 語

目前,很多開源的GIS 軟件都將NTS 作為其空間幾何對象運算、處理的插件。本文討論了如何在AutoCAD 中引入NTS GIS 分析、操作類庫,實現拓撲多邊形的構建。其中,對精度模型的建立和圓弧信息的處理兩個關鍵問題進行了深入的論述,并提出了解決方案。

總之,NTS 的很多功能都可以移植到CAD 平臺,為CAD 的數據處理提供更豐富的空間分析手段,具有很強的實用價值。

[1]JTS Topology Suite Developer’s Guide[R].2003,9 ~12.

[2]JTS Topology Suite Technical Specification[R].2003.

[3]Nagel.C.C#高級編程[M].北京:清華大學出版社,2008.

[4]Charles McAuley.AutoCAD 2000 ObjectARX 編 程 指 南[M].北京:機械工業出版社,2000.

[5]李冠億.深居淺出AutoCAD 二次開發[M].北京:中國建筑工業出版社,2012.

[6]王文波,鄒清源,張斯珩等.AutoCAD 2010 二次開發實例教程(ObjectARX)[M].北京:機械工業出版社,2013.

猜你喜歡
信息方法模型
一半模型
重要模型『一線三等角』
重尾非線性自回歸模型自加權M-估計的漸近分布
訂閱信息
中華手工(2017年2期)2017-06-06 23:00:31
3D打印中的模型分割與打包
用對方法才能瘦
Coco薇(2016年2期)2016-03-22 02:42:52
四大方法 教你不再“坐以待病”!
Coco薇(2015年1期)2015-08-13 02:47:34
捕魚
展會信息
中外會展(2014年4期)2014-11-27 07:46:46
健康信息
祝您健康(1987年3期)1987-12-30 09:52:32
主站蜘蛛池模板: 久久这里只有精品2| 国产免费高清无需播放器 | 国产大片喷水在线在线视频| 亚洲无码不卡网| 久久国产精品麻豆系列| 国产在线精品美女观看| 日韩成人在线网站| 看国产毛片| 四虎永久免费地址在线网站| 久久久久国色AV免费观看性色| 国产日韩丝袜一二三区| 亚洲色图另类| 小蝌蚪亚洲精品国产| 成人年鲁鲁在线观看视频| 久久伊伊香蕉综合精品| 国产凹凸一区在线观看视频| 91综合色区亚洲熟妇p| 国产乱码精品一区二区三区中文| 久久综合色视频| 青青青伊人色综合久久| 久久中文字幕2021精品| 热久久综合这里只有精品电影| 在线色国产| 精品欧美一区二区三区在线| 国产裸舞福利在线视频合集| 性欧美在线| 成人综合久久综合| 亚洲精品福利网站| 永久免费无码日韩视频| 爽爽影院十八禁在线观看| 亚洲人妖在线| 色视频国产| 欧美va亚洲va香蕉在线| 国产亚洲视频播放9000| 三级视频中文字幕| 久久久久国产精品嫩草影院| 99re这里只有国产中文精品国产精品| 国产在线观看高清不卡| 欧美无遮挡国产欧美另类| 亚洲国产精品日韩欧美一区| 亚洲成A人V欧美综合天堂| 无码人妻免费| 国产午夜精品鲁丝片| 2024av在线无码中文最新| 成人综合网址| 一级毛片在线直接观看| а∨天堂一区中文字幕| 亚洲午夜片| 亚洲精品在线影院| 欧美一区福利| 无码'专区第一页| 熟女日韩精品2区| www.国产福利| 男人天堂伊人网| 日韩黄色精品| 久久不卡精品| 色噜噜狠狠色综合网图区| 亚洲综合片| 一本二本三本不卡无码| 国产后式a一视频| 亚洲视频一区| 欧美综合中文字幕久久| 无码专区国产精品第一页| 国产精品偷伦视频免费观看国产| 色亚洲成人| 9999在线视频| 青青久久91| 91精品国产一区| 日本成人精品视频| 真实国产精品vr专区| 少妇被粗大的猛烈进出免费视频| 在线观看国产精美视频| 中文字幕在线看视频一区二区三区| 欧美精品亚洲精品日韩专区va| 精品乱码久久久久久久| 国产精品无码久久久久AV| 原味小视频在线www国产| 91在线无码精品秘九色APP| 亚洲欧美日韩高清综合678| 日韩av无码精品专区| 国产日韩欧美一区二区三区在线 | 激情网址在线观看|