版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、實(shí)習(xí)一 Python基礎(chǔ)學(xué)習(xí)1.什么是python Python是一種不受局限、跨平臺(tái)的開源編程語(yǔ)言,它功能強(qiáng)大且簡(jiǎn)單易學(xué)。因而得到了廣泛應(yīng)用和支持。 ArcGIS 9.0社區(qū)中引入了Python。此后,Python被視為可供地理處理用戶選擇的腳本語(yǔ)言并得以不斷發(fā)展。每個(gè)版本都進(jìn)一步增強(qiáng)了Python體驗(yàn),從而為您提供更多的功能以及更豐富、更友好的Python體驗(yàn)。 ESRI已將Python完全納入ArcGIS中,并將其視為可滿足用戶需求的語(yǔ)言。下面僅介紹Python的部分優(yōu)勢(shì):· 易于學(xué)習(xí),非常適合初學(xué)者,也特別適合專家使用· 可伸縮程度高,適于大型項(xiàng)目或小型的一次性程序
2、(稱為腳本)· 可移植,跨平臺(tái)· 可嵌入(使ArcGIS可腳本化)· 穩(wěn)定成熟· 用戶社區(qū)規(guī)模大 Python已延伸到ArcGIS中,成為了一種用于進(jìn)行數(shù)據(jù)分析、數(shù)據(jù)轉(zhuǎn)換、數(shù)據(jù)管理和地圖自動(dòng)化的語(yǔ)言,因而有助于提高工作效率。2.在ArcGIS中使用Python(1)打開ArcMap,在工具欄中點(diǎn)擊“”按鈕,位置如圖1-1所示,即可打開Python編輯窗口。圖1-1(2)Python程序?yàn)榻忉屵\(yùn)行,輸入一行代碼,按“回車”鍵后即可運(yùn)行,如圖1-2。圖1-23.行和縮進(jìn)學(xué)習(xí)Python與其他語(yǔ)言最大的區(qū)別就是,Python的代碼塊不使用大括號(hào)()來(lái)控制類,函
3、數(shù)以及其他邏輯判斷。python最具特色的就是用縮進(jìn)來(lái)寫模塊。(1)縮進(jìn)的空白數(shù)量是可變的,但是所有代碼塊語(yǔ)句必須包含相同的縮進(jìn)空白數(shù)量,這個(gè)必須嚴(yán)格執(zhí)行。在Python窗口中輸入如圖1-3所示的代碼塊并運(yùn)行,該代碼塊是嚴(yán)格縮進(jìn)的。圖 1-3(2)以下代碼將會(huì)執(zhí)行錯(cuò)誤,如圖1-4:圖1-4實(shí)習(xí)二 使用ArcPy ArcPy 是一個(gè)以成功的 arcgisscripting 模塊為基礎(chǔ)并繼承arcgisscripting功能進(jìn)而構(gòu)建而成的站點(diǎn)包。目的是為以實(shí)用高效的方式通過(guò)Python執(zhí)行地理數(shù)據(jù)分析、數(shù)據(jù)轉(zhuǎn)換、數(shù)據(jù)管理和地圖自動(dòng)化創(chuàng)建基礎(chǔ)。 該包提供了豐富純正的Python體驗(yàn),具有代碼自動(dòng)完成
4、功能(輸入關(guān)鍵字和點(diǎn)即可獲得該關(guān)鍵字所支持的屬性和方法的彈出列表;從中選擇一個(gè)屬性或方法即可將其插入),并針對(duì)每個(gè)函數(shù)、模塊和類提供了參考文檔。 在Python中使用ArcPy的另一個(gè)主要原因是,Python是一種通用的編程語(yǔ)言。Python是一種支持動(dòng)態(tài)輸入的解釋型語(yǔ)言,適用于交互式操作以及為稱為腳本的一次性程序快速制作原型,同時(shí)其具有編寫大型應(yīng)用程序的強(qiáng)大功能。用ArcPy 編寫的ArcGIS應(yīng)用程序的優(yōu)勢(shì)在于,可以使用由來(lái)自多個(gè)不同領(lǐng)域的GIS專業(yè)人員和程序員組成的眾多Python小群體開發(fā)的附加模塊。1.通過(guò)Python使用工具 每個(gè)地理處理工具都具有一組固定的參數(shù),這些參數(shù)為工具提供
5、執(zhí)行所需的信息。在Python中使用工具時(shí),必須正確設(shè)置工具的參數(shù)值,以便在腳本運(yùn)行時(shí)工具可以執(zhí)行。下面以緩沖區(qū)分析為例練習(xí)通過(guò)Python使用工具的方法。(1)點(diǎn)緩沖1)在ArcMap中打開實(shí)驗(yàn)數(shù)據(jù)中的“point.shp”文件,如圖2-1。圖2-12)打開Python窗口,在其中輸入圖2-2所示的代碼,其中workspace的路徑根據(jù)數(shù)據(jù)在電腦中的實(shí)際路徑設(shè)置。在調(diào)用工具(圖中紅色部位)的時(shí)候會(huì)在窗口右側(cè)出現(xiàn)提示信息,根據(jù)提示信息,輸入相關(guān)參數(shù),運(yùn)行結(jié)果如圖2-3。運(yùn)行后會(huì)在目錄中生成一個(gè)“pointBuffer.shp”文件,這個(gè)文件的文件名和路徑均在代碼中設(shè)置。圖2-2圖2-3(2)線
6、緩沖1)在ArcMap中打開實(shí)驗(yàn)數(shù)據(jù)中的“l(fā)ine.shp”文件,選中其中的一條線,如圖2-4。圖2-42)打開Python窗口,在其中輸入圖2-5所示的代碼,運(yùn)行結(jié)果如圖2-6。圖2-5圖2-63)取消選中,重新運(yùn)行一次代碼,運(yùn)行結(jié)果如圖2-7所示。從兩次運(yùn)行結(jié)果可以看出,地理處理工具處理對(duì)象首先應(yīng)是選中的要素,如果沒(méi)有選中要素,則默認(rèn)為圖層中所有對(duì)象。圖2-7(3)多層緩沖 在輸入要素周圍的指定距離內(nèi)創(chuàng)建多個(gè)緩沖區(qū)。使用緩沖距離值可隨意合并和融合這些緩沖區(qū),以便創(chuàng)建非重疊緩沖區(qū)。 在ArcMap中打開實(shí)驗(yàn)數(shù)據(jù)中的“l(fā)ine.shp”文件,運(yùn)行如圖2-8所示的程序,結(jié)果如圖2-9。多個(gè)緩沖區(qū)
7、的距離為“10,20,30”,可根據(jù)實(shí)際情況自己設(shè)定。圖2-8圖2-92.使用Python處理游標(biāo) 游標(biāo)是一種數(shù)據(jù)訪問(wèn)對(duì)象,可用于在表中迭代一組行或者向表中插入新行。游標(biāo)有三種形式:搜索、插入或更新。arcpy.da.InsertCursor(in_table, field_names)插入行arcpy.da.SearchCursor(in_table, field_names, where_clause, spatial_reference, explode_to_points, sql_clause)只讀訪問(wèn)arcpy.da.UpdateCursor(in_table, field_nam
8、es, where_clause, spatial_reference, explode_to_points, sql_clause)更新或刪除行讀取幾何(1)讀取點(diǎn)1)在ArcMap中打開“point.shp”文件,點(diǎn)的相對(duì)位置如圖2-10。圖2-102)在Python窗口中運(yùn)行如圖2-11所示的代碼,“SHAPEXY”表示一個(gè)要素的質(zhì)心XY坐標(biāo),點(diǎn)的質(zhì)心為其本身。cursor為一個(gè)搜索游標(biāo),其中“for row in cursor”是用一個(gè)for循環(huán)來(lái)遍歷游標(biāo)中的每一行。運(yùn)行結(jié)果如圖2-12所示,紅框中的數(shù)據(jù)為點(diǎn)的坐標(biāo)。圖2-11(2)讀取折線或面1)在ArcMap中打開實(shí)驗(yàn)數(shù)據(jù)中的“l(fā)i
9、ne.shp”文件,兩個(gè)線要素相對(duì)位置如圖2-13。圖 2-132)在Python窗口中運(yùn)行如圖2-14所示的代碼,結(jié)果如圖2-15所示。紅色方框中的數(shù)據(jù)為兩個(gè)先要素的折點(diǎn)坐標(biāo)。搜索游標(biāo)中“OID”表示要素的FID,“SHAPE”表示幾何要素對(duì)象。圖2-14圖2-15寫入幾何通過(guò)使用插入游標(biāo)可以實(shí)現(xiàn)寫入幾何功能,(1)寫入點(diǎn) 將“point.shp”加載到ArcMap中,在Python窗口中輸入圖2-16所示的代碼并運(yùn)行,運(yùn)行結(jié)束后點(diǎn)擊左下方的“”按鈕,刷新一下地圖窗口,結(jié)果如圖2-17。在寫入點(diǎn)要素時(shí),只有單個(gè)點(diǎn)對(duì)象用于設(shè)置點(diǎn)要素幾何。使用“SHAPEXY”,就可輕松地創(chuàng)建點(diǎn)。圖 2-16圖
10、2-17(2)寫入線 將“l(fā)ine.shp”加載到ArcMap中,在Python窗口中輸入圖2-18所示的代碼并運(yùn)行,運(yùn)行結(jié)果如圖2-19。代碼中“arcpy.Array”表示數(shù)組對(duì)象可包含任意數(shù)量的地理處理對(duì)象,例如點(diǎn)、幾何或空間參考。(點(diǎn)坐標(biāo)可自行設(shè)置)圖2-18圖 2-19實(shí)習(xí)三 創(chuàng)建ArcGIS Python Add-in 加載項(xiàng)是一種自定義項(xiàng),它可以插入到 ArcGIS for Desktop 應(yīng)用程序(即 ArcMap、ArcCatalog、ArcGlobe 和 ArcScene)中以便提供補(bǔ)充功能以完成自定義任務(wù),例如工具條上的工具集合。1.創(chuàng)建加載項(xiàng)項(xiàng)目(1)選擇加載項(xiàng)項(xiàng)目文件
11、夾:解壓“addin_assistant.zip”(圖3-1)文件,在解壓后的文件夾處找到 addin_assistant.exe (圖3-2)文件并雙擊。將打開瀏覽文件夾對(duì)話框,在其中輸入用來(lái)存儲(chǔ)加載項(xiàng)項(xiàng)目的文件夾。必須選擇一個(gè)空文件夾或創(chuàng)建一個(gè)新文件夾(圖3-3),單擊確定。圖 3-1圖 3-2圖3-3(2)輸入項(xiàng)目設(shè)置:選擇工作文件夾之后,將顯示向?qū)У牡谝粋€(gè)面板(圖3-4)??稍诖颂庉斎腠?xiàng)目設(shè)置。這些設(shè)置是項(xiàng)目的元數(shù)據(jù),存儲(chǔ)在 config.xml 文件中。使用加載項(xiàng)時(shí),這些設(shè)置在部署期間十分重要。 圖3-42.創(chuàng)建工具條 單擊加載項(xiàng)內(nèi)容選項(xiàng)卡,右鍵單擊工具條,然后單擊“新建工具條”,如
12、圖3-5。向?qū)У挠覀?cè)面板將顯示工具條的屬性,如圖3-6。工具條必須具有標(biāo)題和ID。標(biāo)題用于為工具條提供標(biāo)注。ID 表示唯一的名稱,用于區(qū)分不同工具條。ID不能包含空格。默認(rèn)情況下,啟動(dòng)應(yīng)用程序時(shí)初始顯示工具條這一選項(xiàng)處于選中狀態(tài)。如果不希望在啟動(dòng)應(yīng)用程序時(shí)顯示工具條,可以取消選中此選項(xiàng)。圖3-5圖3-63.創(chuàng)建按鈕 (1)輸入工具條屬性后,即可創(chuàng)建新按鈕。右鍵單擊名為“工具條”的新工具條并選擇“新建按鈕”,如圖3-7。圖3-7(2)新建按鈕后,為按鈕鍵入相應(yīng)的屬性信息,如圖3-8,圖3-8按鈕具有多個(gè)屬性需要設(shè)置。以下列出了所有這些屬性及其對(duì)應(yīng)的說(shuō)明。這些屬性存儲(chǔ)在項(xiàng)目的 config.xml
13、 文件中屬性描述標(biāo)題(必填)定義按鈕標(biāo)題。下圖顯示了 ArcGIS 加載項(xiàng)管理器中使用的標(biāo)題,有助于標(biāo)識(shí)不同類型的可用自定義內(nèi)容(加載項(xiàng)類型在括號(hào)中標(biāo)識(shí)):類(必填)在桌面應(yīng)用程序中單擊按鈕后執(zhí)行的 Python 類。Python 類是寫入按鈕業(yè)務(wù)邏輯的位置。構(gòu)造類時(shí)應(yīng)使用 Python 單詞首字母大寫命名約定,例如應(yīng)使用“ZoomToSelectedFeatures”而不是“zoomtoselectedfeatures”。ID(必填)用于標(biāo)識(shí)按鈕的唯一名稱。您可以為給定項(xiàng)目創(chuàng)建多個(gè)按鈕,此 ID 便用來(lái)區(qū)分不同的按鈕。理想情況下,應(yīng)使用更有意義的值替換默認(rèn) ID。ID 不應(yīng)包含任何空格??梢?/p>
14、使用下劃線連接單詞。不應(yīng)使用 Python 關(guān)鍵字。有關(guān)保留字信息,請(qǐng)查閱 Python 文檔。工具提示(可選)將鼠標(biāo)指針懸停在桌面應(yīng)用程序中的按鈕上方時(shí)出現(xiàn)的簡(jiǎn)短描述。消息(可選)按鈕功能的詳細(xì)描述。將鼠標(biāo)指針懸停在按鈕上方時(shí),此消息會(huì)顯示在工具提示下方。圖像(可選)此圖像應(yīng)為 16 * 16 像素的圖像,用于符號(hào)化按鈕。圖像格式應(yīng)為任意一種常用圖片格式(即.bmp、.jpg等)。圖像將復(fù)制到加載項(xiàng)項(xiàng)目中創(chuàng)建的圖像文件夾中。4.編輯 Python 腳本 此時(shí)已為定義加載項(xiàng)按鈕所需的屬性添加了值。此工作流的下一步是編輯 Python 腳本并更新 Python 類,以包含“縮放至所選要素”這一功
15、能。如果未選擇任何要素,則會(huì)縮放至所有圖層的全圖。要將此功能添加到自定義按鈕,執(zhí)行以下步驟:(1) 在arcgis軟件目錄下找到如圖3-9所示的Python編輯器,打開通過(guò)向?qū)?chuàng)建的工作文件夾下的“install”文件夾中Python腳本。 圖3-9(2) 在onClick(self)函數(shù)中鍵入相關(guān)代碼,如圖3-10.圖3-10 (3) 保存腳本,如果出現(xiàn)圖3-11所示的警告信息,則需要在腳本頭上加上“# coding gbk”如圖3-12.圖 3-11圖3-125.測(cè)試按鈕(1)創(chuàng)建加載項(xiàng)文件: 轉(zhuǎn)到工作文件夾,雙擊該文件夾以運(yùn)行 makeaddin.py (圖3-13)腳本。此腳本將加載項(xiàng)
16、所需的全部文件和文件夾都復(fù)制到工作文件夾中的加載項(xiàng)壓縮文件中。文件名包括工作文件夾名稱和.esriaddin 擴(kuò)展名(圖3-14)。圖3-13圖3-14(2)安裝加載項(xiàng):雙擊新的加載項(xiàng)文件以啟動(dòng) ESRI ArcGIS 加載項(xiàng)安裝工具。調(diào)用此工具后,它分析加載項(xiàng)文件內(nèi)的 config.xml,并顯示創(chuàng)建加載項(xiàng)時(shí)輸入的項(xiàng)目設(shè)置以及加載項(xiàng)是否包含受信數(shù)字簽名(如圖3-15)。圖3-15(3)使用加載項(xiàng):此時(shí)可使用為 ArcGIS for Desktop 應(yīng)用程序設(shè)計(jì)的自定義功能。啟動(dòng)桌面應(yīng)用程序 (ArcMap)。自定義工具條()可能已經(jīng)處于可見(jiàn)狀態(tài)并可用于測(cè)試。如果不可見(jiàn),可轉(zhuǎn)到自定義菜單,然后
17、單擊加載項(xiàng)管理器。加載項(xiàng)管理器對(duì)話框?qū)⒘谐鲠槍?duì)當(dāng)前應(yīng)用程序安裝的加載項(xiàng)。應(yīng)顯示作為項(xiàng)目設(shè)置而輸入的加載項(xiàng)信息,如名稱、描述和圖像。如果加載項(xiàng)列于管理器中,可單擊自定義按鈕打開自定義 對(duì)話框。要將工具條添加到應(yīng)用程序,可單擊工具條選項(xiàng)卡,然后選擇您所創(chuàng)建的工具條。(4)將示例數(shù)據(jù)加載到ArcMap中,開始編輯后任意選中一個(gè)要素(如圖3-16),單擊自定義工具條中的“”按鈕,地圖會(huì)自動(dòng)縮放到選中要素的位置(如圖3-17)。圖3-16圖3-17實(shí)習(xí)四 宗地四至提取1. 四至提取步驟 界址線表示地塊的邊界線,界址點(diǎn)表示界址線的轉(zhuǎn)折點(diǎn)或交點(diǎn)。界址點(diǎn)、線是確定地塊位置的重要資料。界址點(diǎn)、線屬性信息要采集的
18、重要內(nèi)容。屬性信息中,規(guī)定的界標(biāo)類型有九種,分別是鋼釘、水泥樁、石灰樁、噴涂、瓷標(biāo)志、無(wú)標(biāo)識(shí)和其他界標(biāo);界址線類別有九種,分別是田埂、溝渠、道路、行樹、圍墻、墻壁、柵欄、兩點(diǎn)連線;界址線位置分為內(nèi)中外三種,分別對(duì)應(yīng)界址線地物的自有、共有和他有;毗鄰地物權(quán)利人代表界址線兩側(cè)對(duì)應(yīng)也是需四的承包地塊方名稱,中間用逗號(hào)隔開。四至提取就是提取宗地四鄰(東南西北)的地塊權(quán)屬,或者相鄰道路。 1)提取界址點(diǎn)的步驟:循環(huán)讀取地塊要素類的地塊,取出每個(gè)地塊的所有節(jié)點(diǎn),若點(diǎn)要素類中沒(méi)有坐標(biāo)相同的點(diǎn),則將節(jié)點(diǎn)存入點(diǎn)要素類中。界址點(diǎn)位置由農(nóng)戶種地時(shí)自行約定,實(shí)際上表現(xiàn)為田埂的拐角,無(wú)明顯地物標(biāo)志,故界標(biāo)類型默認(rèn)設(shè)為“
19、其他界標(biāo)”。2)界址線提取的步驟:循環(huán)讀取地塊,將面狀的地塊轉(zhuǎn)換為多段線,再將多段線轉(zhuǎn)換為單個(gè)的線段,若線要素類中沒(méi)有相同的線段,則將線段作為界址線存入界址線要素類中。查找與界址線相交的地塊并取出地塊的“CBFMC”屬性,將屬性賦值給界址線的毗鄰地物權(quán)利人屬性。界址線類別和界址線位置的判斷標(biāo)準(zhǔn)是,如果與界址線相交的地塊有兩個(gè)則界址線類別為“田埂”,界址線位置為“中”;如果與界址線相交的地塊只有一個(gè)則界址線類別為“道路”,界址線位置為“內(nèi)”。3)四至提取中心法:圖4-1,中間的點(diǎn)為地塊的中心或質(zhì)心,四至區(qū)域通過(guò)與x軸成45°和135°的兩條直線劃分,周圍地塊的中心落入哪個(gè)四至
20、區(qū)域則選擇其作為地塊對(duì)應(yīng)的四至地塊。圖 4-1具體步驟為: 循環(huán)讀取地塊圖層,獲取地塊的中心點(diǎn) 對(duì)當(dāng)前地塊作緩沖區(qū),根據(jù)疊置關(guān)系找到當(dāng)前地塊周圍的地塊,并求得周圍地塊的中心; 連接當(dāng)前地塊的中心與周圍地塊的中心,根據(jù)斜率判斷地塊的四至; 對(duì)地塊的四至信息進(jìn)行更新。 4)四至提取界址線法:地塊對(duì)應(yīng)的四至地塊與該地塊東、南、西、北四個(gè)方向最遠(yuǎn)四個(gè)界址點(diǎn)相接。而且其中的每個(gè)界址點(diǎn)對(duì)應(yīng)該地塊的兩條界址線,斜率絕對(duì)值較小的界址線為該地塊與其南至和北至地塊共有的界址線;斜率絕對(duì)值較大的界址線則為該地塊與其東至和西至地塊共有的界址線。界址線中的毗鄰地物權(quán)利人屬性中有兩個(gè)名字,一個(gè)是該地塊的承包方名稱,另一個(gè)
21、則為其毗鄰承包地塊權(quán)利人姓名;如果毗鄰地物權(quán)利人中只有一個(gè)名字,該地塊在這條界址線處沒(méi)有毗鄰地塊,四至信息默認(rèn)設(shè)置為“道路”。具體步驟是: 循環(huán)讀取地塊圖層,取出一個(gè)地塊的所有節(jié)點(diǎn),將其存入一個(gè)鏈表中; 通過(guò)Y坐標(biāo)值的比較找到地塊南北方向上兩個(gè)最遠(yuǎn)界址點(diǎn);通過(guò)X坐標(biāo)值比較地塊東西方向兩個(gè)最遠(yuǎn)界址點(diǎn),將這些點(diǎn)以東南西北的順序進(jìn)行存儲(chǔ); 通過(guò)九交模型查找與每個(gè)方向最遠(yuǎn)界址點(diǎn)相接的兩條界址線,然后通過(guò)斜率判斷與地塊四至有關(guān)的四條界址線; 根據(jù)這四條界址線尋找本地塊毗鄰地塊得到四至信息并寫入地塊四至屬性之中。2.代碼實(shí)現(xiàn)1)設(shè)置默認(rèn)地理數(shù)據(jù)庫(kù):在Python中如果沒(méi)有設(shè)置工作環(huán)境(env.worksp
22、ace),默認(rèn)的環(huán)境為“默認(rèn)地理數(shù)據(jù)庫(kù)”。在目錄中右鍵單擊“test.mdb”,選擇“設(shè)為默認(rèn)地理數(shù)據(jù)庫(kù)”,如圖4-2。圖 4-22)根據(jù)第一小節(jié)中的界址點(diǎn)、線與四至提取步驟在Python窗口中進(jìn)行代碼編寫和調(diào)試;3)代碼成功運(yùn)行后,根據(jù)實(shí)習(xí)三中的步驟,自定義一個(gè)工具條和四個(gè)按鈕如圖4-3,將Python窗口中的代碼復(fù)制到與按鈕對(duì)應(yīng)的函數(shù)中。圖4-34)提取完成后打開“jzd”圖層屬性表,如圖4-4,圖4-45)提取完成后打開“jzx”圖層屬性表,如圖4-5圖4-55)提取完成后打開“dk”圖層屬性表,如圖4-6,圖4-6附:參考代碼# coding:gbkimport arcpyimport
23、 pythonaddinsclass Bound1(object): """Implementation for bound1_addin.button (Button)""" def _init_(self): self.enabled = True self.checked = False def onClick(self): curdk = arcpy.da.SearchCursor("dk","OID", "SHAPE","DKBM","
24、CBFMC","") for row in curdk: mdk = row1 cbfmc = row3 for part in row1: arrpoint = for pnt in part: arrpoint.append(pnt) boundpoints = #存儲(chǔ)四個(gè)方向上的最遠(yuǎn)點(diǎn) eastPoint = arrpoint0 southPoint = arrpoint0 westPoint = arrpoint0 northPoint = arrpoint0 #根據(jù)坐標(biāo)判求得四個(gè)方向最遠(yuǎn)點(diǎn) for mpnt in arrpoint: if northPo
25、int.Y <= mpnt.Y: northPoint = mpnt if southPoint.Y >= mpnt.Y: southPoint = mpnt if eastPoint.X <= mpnt.X: eastPoint = mpnt if westPoint.X >= mpnt.X: westPoint = mpnt boundpoints.append(eastPoint) boundpoints.append(southPoint) boundpoints.append(westPoint) boundpoints.append(northPoint)
26、containedjzxs = #存儲(chǔ)與四個(gè)點(diǎn)相交的8條界址線 cjzxqlrs = #存儲(chǔ)與四個(gè)點(diǎn)相交的8條界址線的毗鄰地物權(quán)利人 for boundPoint in boundpoints: njzx = arcpy.da.SearchCursor("jzx","OID", "SHAPE","PLDWQLR","") for crowjzx in njzx: jzxpoint = cjzxqlr = crowjzx2 jzx = crowjzx1 for partjzx in crowjzx
27、1: for jzxpnt in partjzx: jzxpoint.append(jzxpnt) ptstart = jzxpoint0 ptend = jzxpoint1 isStartTouch = ptstart.touches(mdk) isEndTouch = ptend.touches(mdk) isContain = (isStartTouch and isEndTouch) isTouch = jzx.touches(boundPoint) isBoundjzx = (isContain and isTouch) if isBoundjzx : containedjzxs.a
28、ppend(jzx) cjzxqlrs.append(cjzxqlr) del njzx dksz = default = "道路" #根據(jù)界址線的斜率確定哪個(gè)是與四至相關(guān)的界址線 #地塊東至 if abs(containedjzxs0.firstPoint.Y - containedjzxs0.lastPoint.Y)/(containedjzxs0.firstPoint.X - containedjzxs0.lastPoint.X) >= abs(containedjzxs1.firstPoint.Y - containedjzxs1.lastPoint.Y)/(
29、containedjzxs1.firstPoint.Y - containedjzxs1.lastPoint.Y): mboundStrings = cjzxqlrs0.split(",") if len(mboundStrings) = 1: dksz.append(default) else: for bString in mboundStrings: if not(bString = cbfmc): dksz.append(bString) else: mboundStrings = cjzxqlrs1.split(",") if len(mbou
30、ndStrings) = 1: dksz.append(default) else: for bString in mboundStrings: if not(bString = cbfmc): dksz.append(bString) #地塊南至 if abs(containedjzxs2.firstPoint.Y - containedjzxs2.lastPoint.Y)/(containedjzxs2.firstPoint.X - containedjzxs2.lastPoint.X) >= abs(containedjzxs3.firstPoint.Y - containedjz
31、xs3.lastPoint.Y)/(containedjzxs3.firstPoint.Y - containedjzxs3.lastPoint.Y): mboundStrings = cjzxqlrs3.split(",") if len(mboundStrings) = 1: dksz.append(default) else: for bString in mboundStrings: if not(bString = cbfmc): dksz.append(bString) else: mboundStrings = cjzxqlrs2.split(",&
32、quot;) if len(mboundStrings) = 1: dksz.append(default) else: for bString in mboundStrings: if not(bString = cbfmc): dksz.append(bString) #地塊西至 if abs(containedjzxs4.firstPoint.Y - containedjzxs4.lastPoint.Y)/(containedjzxs4.firstPoint.X - containedjzxs4.lastPoint.X) >= abs(containedjzxs5.firstPoi
33、nt.Y - containedjzxs5.lastPoint.Y)/(containedjzxs5.firstPoint.Y - containedjzxs5.lastPoint.Y): mboundStrings = cjzxqlrs4.split(",") if len(mboundStrings) = 1: dksz.append(default) else: for bString in mboundStrings: if not(bString = cbfmc): dksz.append(bString) else: mboundStrings = cjzxql
34、rs5.split(",") if len(mboundStrings) = 1: dksz.append(default) else: for bString in mboundStrings: if not(bString = cbfmc): dksz.append(bString) #地塊北至 if abs(containedjzxs6.firstPoint.Y - containedjzxs6.lastPoint.Y)/(containedjzxs6.firstPoint.X - containedjzxs6.lastPoint.X) >= abs(conta
35、inedjzxs7.firstPoint.Y - containedjzxs7.lastPoint.Y)/(containedjzxs7.firstPoint.Y - containedjzxs7.lastPoint.Y): mboundStrings = cjzxqlrs7.split(",") if len(mboundStrings) = 1: dksz.append(default) else: for bString in mboundStrings: if not(bString = cbfmc): dksz.append(bString) else: mbou
36、ndStrings = cjzxqlrs6.split(",") if len(mboundStrings) = 1: dksz.append(default) else: for bString in mboundStrings: if not(bString = cbfmc): dksz.append(bString) #更新四至 curupdk = arcpy.da.UpdateCursor("dk","DKDZ","DKXZ","DKNZ","DKBZ","
37、SHAPE","") for rowup in curupdk: if rowup4.equals(mdk): rowup0 = dksz0 rowup1 = dksz2 rowup2 = dksz1 rowup3 = dksz3 curupdk.updateRow(rowup) del curupdk del curdk passclass Bound2(object): """Implementation for bound2_addin.button (Button)""" def _init_(s
38、elf): self.enabled = True self.checked = False def onClick(self): #中心法 curdk = arcpy.da.SearchCursor("dk","OID", "SHAPE","CBFMC","") for row in curdk: overdk = #存儲(chǔ)當(dāng)前地塊周圍地塊 overcbfmc = #存儲(chǔ)當(dāng)前地塊周圍地塊承包方名稱 dkdz = dknz = dkxz = dkbz = mdk = row1 cbfmc = ro
39、w2 bmdk = mdk.buffer(0.5) #對(duì)當(dāng)前地塊作緩沖區(qū)分析 #獲取當(dāng)前地塊周圍地塊 alldk = arcpy.da.SearchCursor("dk","OID", "SHAPE","CBFMC","") for arow in alldk: if not mdk.equals(arow1): isOverlap = bmdk.overlaps(arow1) if isOverlap : overdk.append(arow1) overcbfmc.append(arow2)
40、 del alldk i = 0 #獲取四個(gè)方向的地塊 while i < len(overdk) : k = abs(mdk.centroid.Y - overdki.centroid.Y)/(mdk.centroid.X - overdki.centroid.X) if k <= 1 : if mdk.centroid.X > overdki.centroid.X : dkxz.append(overcbfmci) else: dkdz.append(overcbfmci) else : if mdk.centroid.Y > overdki.centroid.Y
41、: dknz.append(overcbfmci) else: dkbz.append(overcbfmci) i = i + 1 #如果沒(méi)有則默認(rèn)為道路 if len(dknz) = 0 : dknz.append("道路") if len(dkdz) = 0 : dkdz.append("道路") if len(dkxz) = 0 : dkxz.append("道路") if len(dkbz) = 0 : dkbz.append("道路") #更新四至 upCur = arcpy.da.UpdateCurso
42、r("dk","DKDZ","DKXZ","DKNZ","DKBZ","SHAPE","") for rowup in upCur: if rowup4.equals(mdk): rowup0 = dkdz0 rowup1 = dkxz0 rowup2 = dknz0 rowup3 = dkbz0 upCur.updateRow(rowup) del upCur del curdk passclass JZD(object): ""&q
43、uot;Implementation for JZD_addin.button (Button)""" def _init_(self): self.enabled = True self.checked = False def onClick(self): #提取界址點(diǎn) jzd = #循環(huán)讀取每個(gè)地塊獲取所有的界址點(diǎn) curdk = arcpy.da.SearchCursor("dk","OID", "SHAPE","CBFMC","") for row in c
44、urdk: cbfmc = row2 for part in row1: arrpoint = for pnt in part: arrpoint.append(pnt) for cpoint in arrpoint: isSaved = False for cjzd in jzd : if cjzd.equals(cpoint): isSaved = True if not isSaved : jzd.append(cpoint) del curdk #插入界址點(diǎn) curInsert = arcpy.da.InsertCursor("jzd","SHAPE","YSDM","JZDLX","JBL
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 國(guó)內(nèi)產(chǎn)品代理分銷合同(2篇)
- 二零二五年度知識(shí)產(chǎn)權(quán)質(zhì)押擔(dān)保合同模板3篇
- 二零二五年度電動(dòng)車輛使用權(quán)及所有權(quán)轉(zhuǎn)移合同3篇
- 2025版楊氏離婚協(xié)議及共同債務(wù)處理合同3篇
- 二零二五年度海上木材運(yùn)輸合同標(biāo)的含水率檢測(cè)與運(yùn)輸責(zé)任3篇
- 2024版水電安裝工程內(nèi)部承包協(xié)議
- 浙江舟山群島新區(qū)旅游與健康職業(yè)學(xué)院《概率論與數(shù)理統(tǒng)計(jì)D》2023-2024學(xué)年第一學(xué)期期末試卷
- 2024運(yùn)輸合同中的運(yùn)輸保險(xiǎn)條款設(shè)計(jì)與理賠流程3篇
- 2024版機(jī)柜租用服務(wù)商合同范本
- 2024版合作戰(zhàn)略協(xié)議書
- “數(shù)字城市”公共智慧底座項(xiàng)目解決方案
- 經(jīng)銷商交接三方協(xié)議書范本
- 浙江省寧波市慈溪市2022-2023學(xué)年上學(xué)期八年級(jí)科學(xué)期末試卷
- 醫(yī)院藥品質(zhì)量管理
- 裝飾圖案智慧樹知到答案2024年齊魯工業(yè)大學(xué)
- 漢語(yǔ)言文學(xué)本科自考真題1301-全國(guó)-古代漢語(yǔ)
- 醫(yī)院開展反恐防恐知識(shí)培訓(xùn)
- MDCG 2020-3 Rev.1 歐盟更新醫(yī)療器械重大變更指南文件
- 五年級(jí)口算每頁(yè)100題(打印版)
- 廣西欽州市浦北縣2023-2024學(xué)年七年級(jí)上學(xué)期期末語(yǔ)文試題
- 技術(shù)服務(wù)補(bǔ)充協(xié)議范本
評(píng)論
0/150
提交評(píng)論