陳炯炯,陳 勝
(1.湖南省第三測繪院,湖南 長沙 410007)
智能化識別宗地四至研究
陳炯炯1,陳 勝1
(1.湖南省第三測繪院,湖南 長沙 410007)
探討了一種智能化﹑自動化的宗地四至識別方法。使用AutoCAD平臺ObjectARX開發(fā)軟件包實現(xiàn)了對宗地四至的自動化識別,為農(nóng)村集體土地所有權(quán)項目和宅基地使用權(quán)項目節(jié)省了大量人力,提高了數(shù)據(jù)準(zhǔn)確性。
宗地四至;鄰宗地;智能化;最小外包凸多邊形
宗地即土地權(quán)屬界址線封閉的地塊或空間,是不動產(chǎn)權(quán)屬調(diào)查和登記發(fā)證的基本土地單元。宗地四至是每宗地四鄰的名稱,一般填寫相鄰宗地的土地使用權(quán)人﹑所有權(quán)人的名稱;與道路﹑河流等線狀地物相鄰的應(yīng)填寫地物名稱;與空地﹑荒山﹑荒灘等未確定使用權(quán)的國有土地相鄰的,應(yīng)準(zhǔn)確描述相應(yīng)地物﹑地貌的名稱。由于沒有比較完善的宗地四至識別方法,目前大部分權(quán)屬調(diào)查軟件﹑建庫軟件均不提供四至識別功能,通常是在地籍調(diào)查階段或數(shù)據(jù)入庫整理階段由作業(yè)員對照地籍圖和宗地圖進(jìn)行人工識別,并手動錄入。該方法不僅效率低下,而且由于作業(yè)員的判別能力差異,判斷標(biāo)準(zhǔn)也不完全一致,導(dǎo)致最終成果并不理想。為了提高效率,出現(xiàn)了一些輔助軟件用于自動識別宗地四至:有的軟件以宗地中心為起點(diǎn),向東﹑南﹑西﹑北4個方向作射線,以與射線相交﹑離本宗地最近的鄰宗地作為四至(圖1),該方法對界址線數(shù)量少﹑形狀簡單的宗地識別速度快,但對復(fù)雜的宗地?zé)o效;有的軟件先獲取宗地的外接矩形,將宗地左上角和右上角之間的鄰宗地判定為北至,宗地右上角和右下角之間的鄰宗地判定為東至,宗地右下角和左下角之間的鄰宗地判定為南至,宗地左下角和左上角之間的鄰宗地判定為西至(圖2),該方法較前種方法識別效果有所提升,但對復(fù)雜圖形(圖3)的處理效果仍不理想。通過對其他軟件識別效果的比較,結(jié)合實踐經(jīng)驗,筆者提出了一種智能化﹑自動化的宗地四至識別方法。
圖1 宗地識別射線法
圖2 簡單宗地識別結(jié)果
圖3 復(fù)雜圖形宗地
1.1 宗地四至識別方法
1)各條界址線鄰宗地的識別:計算每條界址線中點(diǎn)與其他宗地的距離,若距離小于0.01 m,則該宗地為鄰宗地,該條界址線為公共界址線。
2)各條界址線方向的判斷:先計算宗地的外包凸多邊形,再以外包凸多邊形確定宗地的東﹑東南﹑南﹑西南﹑西﹑西北﹑北﹑東北8個極值點(diǎn),最后以8個極值點(diǎn)形成的方位區(qū)間判斷宗地界址線的方位。
3)生成四至:若每至只取一個宗地,則取北極值點(diǎn)兩條界址線中與Y軸夾角較小的一條作為北至,取東極值點(diǎn)兩條界址線中與X軸夾角較小的一條作為東至,取南極值點(diǎn)兩條界址線中與Y軸夾角較小的一條作為南至,取西極值點(diǎn)兩條界址線中與X軸夾角較小的一條作為西至;若每至要取所有宗地,則合并西北至北﹑北至東北兩個區(qū)間的鄰宗地為北至,合并東北至東﹑東至東南兩個區(qū)間的鄰宗地為東至,合并東南至南﹑南至西南兩個區(qū)間的鄰宗地為南至,合并西南至西﹑西至西北兩個區(qū)間的鄰宗地為西至。
1.2 宗地四至識別流程
根據(jù)識別思路,繪制宗地四至識別流程圖,見圖4。
圖4 宗地四至識別流程圖
在AutoCAD平臺上,本文使用ObjectARX開發(fā)實現(xiàn)了宗地四至識別方法。
2.1 界址點(diǎn)序列的提取
界址點(diǎn)序列是宗地所有界址點(diǎn)的集合,集合中前一個點(diǎn)和后一個點(diǎn)的連線為界址線?!兜丶{(diào)查規(guī)程》規(guī)定宗地界址點(diǎn)編號從西北角開始,順時針增加,因此宗地范圍線的起點(diǎn)也是西北角,方向為順時針方向。依次獲取所有節(jié)點(diǎn),由于AutoCAD中閉合線的特性,無法表示最后一條邊,需把第一個節(jié)點(diǎn)再復(fù)制到節(jié)點(diǎn)序列末尾,其主要實現(xiàn)代碼為:
AcDb2dPolyline* p2dPl; ‘宗地范圍線,在AutoCAD中為二維多段線
AcDbObjectIterator* pVertexIter = p2dPl->vertexIterator();‘二維多段線的節(jié)點(diǎn)迭代器
AcDb2dVertex *pVertex; ‘單個節(jié)點(diǎn)對象
vector<AcGePoint3d> vertexs; ‘節(jié)點(diǎn)序列
‘依次打開節(jié)點(diǎn),獲取節(jié)點(diǎn)坐標(biāo)
for (vertexNum = 0; !pVertexIter->done(); pVertexIter->step()) {
acdbOpenObject(pVertex, pVertexIter->objectId(), AcDb::kForRead);
vertexs.push_back(pVertex->position());
pVertex->close();
}
vertexs.push_back(vertexs[0]);‘把第一個點(diǎn)復(fù)制到末尾
2.2 最小外包凸多邊形的生成
界址線較多的宗地可能為凹多邊形,但凹邊對四至的識別沒有影響,為了簡化極值角點(diǎn)的計算,需先生成總的最小外包凸多邊形。計算多邊形最小外包凸多邊形的算法有很多,如卷包裹法﹑格雷厄姆法等。宗地范圍線為順時針方向的多段線,因此可以簡化算法:計算各點(diǎn)的前﹑中﹑后3點(diǎn)是否為順時針,若為順時針則為凸點(diǎn);若為逆時針,則為凹點(diǎn),應(yīng)刪除,以提高計算速度。其主要實現(xiàn)代碼為:
for (i = 1; i < hullPts.size() - 1; i++) {
vector<AcGePoint3d> triangle; ‘3點(diǎn)形成的三角形
triangle.push_back(hullPts[i - 1]);
triangle.push_back(hullPts[i]);
triangle.push_back(hullPts[i + 1]);
if (IsClockWise(triangle) > 0) {‘前、中、后3點(diǎn)是否為順時針
hullPts.erase(hullPts.begin() + i);
i = 0; ‘刪除一個點(diǎn)后,應(yīng)重新從頭開始計算
}
}
2.3 東、南、西、北4個角點(diǎn)的獲取
宗地范圍線的東﹑東南﹑南﹑西南﹑西﹑西北﹑北﹑東北8個極值點(diǎn)是依次間隔存在的,其中東﹑南﹑西﹑北4個極值點(diǎn)可通過簡單比較坐標(biāo)值獲取,再進(jìn)一步確定其他4個極值點(diǎn)。獲取的方法比較直接:先把東﹑南﹑西﹑北4個極值點(diǎn)初始化為節(jié)點(diǎn)序列的第一個點(diǎn),再與后面所有點(diǎn)的X﹑Y坐標(biāo)進(jìn)行比較,取X值最大者為北極值點(diǎn),X值最小者為南極值點(diǎn),Y值最大者為東極值點(diǎn),Y值最小者為西極值點(diǎn)。
2.4 東、南、西、北4條邊的確定
東﹑南﹑西﹑北4條極值邊是與相應(yīng)的極值點(diǎn)相連的,可以極值點(diǎn)所在兩條邊中方向與相應(yīng)的方位最接近的邊為極值邊。取北極值點(diǎn)兩條界址線中與Y軸夾角較小的一條作為北至邊,取東極值點(diǎn)兩條界址線中與X 軸夾角較小的一條作為東至邊,取南極值點(diǎn)兩 條界址線中與Y軸夾角較小的一條作為南至邊,取西極值點(diǎn)兩條界址線中與X軸夾角較小的一條作為西至邊。先計算各極值點(diǎn)前后界址線的方向,再計算極值點(diǎn)前后夾角,其主要實現(xiàn)代碼為:
vector<long> directs; ‘外包凸多邊形邊方位角,0待定,2東,4南,8西,16北
frontDirect = GetAzimuth(hullPts[0], hullPts[1]);
frontAng = CSCH::Pi * 2 - frontDirect;
backDirect = GetAzimuth(hullPts[0], hullPts[hullPts.size() - 1]); backAng = backDirect - CSCH::Pi;
if (frontAng < backAng) directs[0] += 16; else directs[directs.size() - 1] += 16;}
2.5 東北、東南、西南、西北角點(diǎn)的獲取
先計算其他未定邊的方位,順時針方向,起點(diǎn)→終點(diǎn),(0, 45]為北方向,(225, 315]為東方向,(135,225]為南方向,(45,135]為西方向,(315,360]為北方向。當(dāng)前后兩條邊剛好跨越兩個區(qū)間時,該點(diǎn)視為東北﹑東南﹑西南﹑西北角點(diǎn),其主要實現(xiàn)代碼為:
for (i = 0; i < directs.size(); i++) { if (directs[i] > 0) continue;
if (frontDirect > Degree315) {
ENPt = hullPts[i + 1];
} else if (frontDirect > Degree270) {
if (findENPt) continue;
ENPt = hullPts[i];
f
indENPt = true;
}
}
2.6 其他界址線方位的確定
計算8個極值點(diǎn)在點(diǎn)序列中的序號,標(biāo)記西北點(diǎn)至北點(diǎn)﹑北點(diǎn)至東北點(diǎn)兩個區(qū)間的界址線為北至邊;東北點(diǎn)至東點(diǎn)﹑東點(diǎn)至東南點(diǎn)兩個區(qū)間的界址線為東至邊;東南點(diǎn)至南點(diǎn)﹑南點(diǎn)至西南點(diǎn)兩個區(qū)間的界址線為南至邊;西南點(diǎn)至西點(diǎn)﹑西點(diǎn)至西北點(diǎn)兩個區(qū)間的界址線為西至邊。
2.7 各條邊鄰宗地信息的獲取
計算每條界址線中點(diǎn)與其他宗地的距離,若距離小于0.01 m,則認(rèn)為該宗地為鄰宗地,該條界址線為公共界址線,其主要實現(xiàn)代碼為:
for (i = 0; i < midPts.size(); i++)
for (j = 0; j < ZDids.length(); j++)
if (!OpenObject(pCurve, ZDids[j])) continue;
if (Acad::eOk == pCurve->getClosestPointTo(midPts[i], pt)) { if (GetDistance(midPts[i], pt) < 0.1) {‘該宗地為鄰宗地
}
}
2.8 合并鄰宗地信息至四至
4個方向的鄰宗地名稱存儲在4個字符串列表中,且每條界址線的鄰宗地名稱均被記錄了,所以當(dāng)同一方向的同一鄰宗地有多條公共界址線時,鄰宗地名稱會被記錄多次,需依次進(jìn)行比較,剔除重復(fù)名稱;再把同一方向的鄰宗地名稱進(jìn)行拼接,以“﹑”進(jìn)行分隔,形成東至﹑西至﹑南至﹑北至4個字符串,并寫入宗地范圍線的XData。
本文所提出的宗地四至提取方法已應(yīng)用于多個農(nóng)村集體土地所有權(quán)項目和宅基地使用權(quán)項目中,四至識別正確率達(dá)到99%以上,與人工識別的結(jié)果基本一致。該方法的推廣使用,可大大減少內(nèi)業(yè)工作量,提高數(shù)據(jù)正確率,也可廣泛應(yīng)用于其他不動產(chǎn)統(tǒng)一登記權(quán)籍調(diào)查工作。
[1] 陳維漢.基于CASS開發(fā)宗地四至屬性的自動生成探討[J].城市建設(shè)理論研究,2014(16):62-67
[2] 邵晴晴,朱福利.一種宗地四至提取方法探討[J].測繪地理信息,2014,39(4):58-61
[3] 鄭江,李曦凌,李磊,等.一種宗地四至關(guān)系提取算法的實現(xiàn)[J].云南水力發(fā)電,2015(5):17-19
[4] 陳艷梅,付寧波.基于AutoCAD的宗地四至自動識別與表達(dá)[J].江西建材,2016(24):183-184
[5] 方衎,胡維.農(nóng)村土地承包地塊四至自動讀取的研究[J].測繪與空間地理信息,2015(11):202-204
[6] 中華人民共和國國土資源部.地籍調(diào)查規(guī)程:TD/T 1001-2012[S].北京:中國標(biāo)準(zhǔn)出版社,2012:13-15
[7] 詹長根.地籍測量學(xué)[M].武漢:武漢大學(xué)出版社,2010
[8] 李長勛.AutoCAD ObjectARX程序開發(fā)技術(shù)[M].北京:國防工業(yè)出版社,2005:79-190
P273
B
1672-4623(2017)09-0100-03
10.3969/j.issn.1672-4623.2017.09.030
2017-02-08。
陳炯炯,碩士研究生,高級工程師,主要從事不動產(chǎn)權(quán)籍測量、攝影測量與遙感、地理信息系統(tǒng)的研究。