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

Arcgis中基于Python的地理數據庫批量合并方法研究

2018-08-13 11:24:42劉翔宇朱大明
軟件 2018年7期
關鍵詞:數據處理數據庫方法

劉翔宇,朱大明

?

Arcgis中基于Python的地理數據庫批量合并方法研究

劉翔宇,朱大明

(昆明理工大學 國土資源工程學院,云南 昆明 650093)

為了實現Arcgis不同地理數據庫中大量相同圖層批量合并的操作。本文基于云南省地質環境信息化建設項目,在對比分析Arcgis二次開發方法的基礎上,提出了一種新的面向ArcGis10.5的Python編程腳本。本文對Python地理空間分析原理、Python腳本功能以及實驗數據處理流程等作了詳細敘述。實驗結果證明了該腳本的可行性。得出結論:本文中基于ArcPy人工開發出的腳本,相比手動操作效率大大提高,不易出錯,實現了地理數據庫中指定同名圖層的批量合并。

Arcgis;地理數據庫處理;python;腳本編輯;合并

0 引言

ArcGIS是由美國ESRI公司研發生產的一款地理信息系統(GIS)軟件,其可以用與地理數據的采集,編輯,處理及多種形式的空間分析,同時可以為人們的生產提供決策。該軟件目前已廣泛應用于自然資源管理、自動制圖、設施管理、城市和區域規劃、交通管理等領域[1]。作為目前主流的GIS軟件,是一套完整的、可無縫擴展的平臺軟件,具有管理和分析空間數據的功能,可以通過二次開發語言對桌面功能進行擴展。常用的ArcGIS二次開發語言有Python,VBA,VB,.net等。其中Python作為一種簡單而且功能強大的開放性編程語言而備受矚目,它具有簡單易學、不受局限、可跨平臺使用等諸多優點[2]。在ArcGIS10.1版本中已經將Python進一步整合到ArcGIS的用戶界面里,供用戶編程以開發出大量用于處理地理數據的實用程序,而這些由用戶編寫的程序可以進行地理數據的自動化批量處理,從而大大提高了工作效率。

GIS軟件功能中的一個重要組成部分就是地理數據的處理,地理數據處理的本質其實就是多種空間數據進行處理,專業名詞即為空間分析。地理數據處理最終的目標為使用戶能夠根據自己的需求去執行模型的建立,各種空間分析功能。在大量地理數據需要處理的時候,需要進行多次數,長周期的處理模式。因此我們就需要可以自動進行多次數循環處理數據流的功能,基于python腳本加Arcgis的模式可以提供一組豐富的工具和機制來實現數據流的自動化批量操作,這些工具和腳本能夠將一系列的工具按照用戶自己的意愿相銜接,用以有序的進行地理數據的處理。

Arcgis軟件中自帶的典型數據處理工具會在ArcGIS數據集(如要素類、柵格或表)的框架中進行操作,最終的結果即生成一個新的要素類集。又因為數據變換的框架為地理處理的基礎。所以每個地理處理工具都對應一個數據處理的微操作。典型的例如向表中添加字段、要素的幾何變換、數據投影(即將一個要素數據集投影到另一個要素數據集中)。所有的數據處理工具都集合在ArcGIS軟件里的ArcToolbox中,其數量高達數百個。對于用戶或者專業處理數據的人員來說,在利用ArcGIS地理處理工具時,根據不同的情況就會出現不同的問題,例如如何將幾個簡單的小工具串聯起來,用于自動化地完成一個簡單工作流。此時就可以利用Python腳本來使得人工操作轉換為自動化的程序批處理過程用于進行數據處理[3]。下面我們就倆簡單介紹下基于Arcgis的python腳本。

1 ArcPy簡介

本文首先對ArcGIS的腳本語言Python的使用方法做一個簡單介紹,對比Python腳本與Arcgis中自帶工具的優劣,然后利用已經編寫好的Python腳本來說明其在地理數數據處理中的應用。

1.1 什么是Arcpy

1991年,程序員Guido van Rossum推出了一種跨平臺并且不受局限的開源式編程語言。在當時由于Python具有處理速度快、功能強大等特點獲得了大眾的廣泛認可。目前Python已延伸到ArcGIS中,成為了一種用于進行數據分析、數據轉換、數據管理和地圖自動化的語言[4]。ArcPy則是一個包含了各種python的原生程序包。ArcGIS 9.2版本中所采用的arcgisscripting 模塊的功能是它的雛形,ArcPy則是其進一步的衍生,提供了多種有用的函數和類并且為用戶提供了使用Python語言操作時所需要的所有地理處理工具的入口,以用于處理和詢問GIS數據[5]。后續的Arcgis的每個版本都進一步加強了用戶的Python體驗,直至今日的版本ESRI公司已將Python完全納入ArcGIS中,并將其視為可滿足用戶需求的語言[6]??梢允褂脕碜圆煌I域的GIS人員和程序員組成的眾多Python小群體開發的附加模塊是用ArcPy編寫的ArcGIS應用程序的一大優勢。

1.2 Python語言優勢

(1)Python 語言是一種解釋型的開源計算機語言,具有面向對象且可擴展的特征,包含豐富的庫。簡單易學,功能強大。

(2)相對于C、C++、Java等其他計算機語言,python的開發效率要大大提高。Python代碼的長度往往只有C++或Java代碼的四分之一左右,并且Python語言編寫的程序可以立即執行,不需要編譯鏈接等步驟,從而提高了開發效率。

(3)可轉變為ArcGIS工具

編輯好的Python腳本程序可以直接作為自定義工具使用并且添加到ArcToolBox中作為自定義工具,與系統提供的工具使用方法一致。簡化了操作過程,簡單易用。

(4)跨平臺,可移植性高

絕大多數Python程序不需要人工更改即可在當前主流的計算機系統平臺上使用。

(5)具有可嵌入性

Python程序可以作為插件嵌入到其他語言開發的應用程序中(例如Arcgis),提高了程序的重用性。

(6)地理處理自動化

Python腳本的執行過程實際上就是一個自動化的數據流處理過程。地理處理的過程按照程序設計的步驟依次完成相應的地理處理過程,中途無需人工干預。并且地理處理的過程可以實現批處理,大大簡化工作量[7]。

1.3 ArcPy的使用方法

(1)在命令行窗口中使用ArcPy

在用戶成功安裝ArcGIS軟件之后可以選擇安裝包括Python的安裝包,安裝以后用戶需要先運行Python IDLE。在使用數據處理工具之前需要先導入Arcpy站點包。

(2)在Python腳本文件中使用ArcPy

其人性化的設計之一是Python窗口中具有代碼提示功能,使用ArcPy的方式有很多種其中最方便的是利用腳本文件,常用的方法是利用記事本編輯我們所需要的程序。另一種方法則是在Python IDLE中創建腳本文件,在Python IDLE中打開腳本文件后,點擊Run->Run Module將運行腳本文件,可以顯示相應的提示信息。

(3)利用ArcPy創建地理處理工具

利用ArcPy創建用戶需要的地理處理工具也是常用的功能,該工具可以作為ArcCatalog中的自定義工具使用,其使用方法與ArcToolbox中工具的使用方法類似用戶可以通過對話框進行參數輸入并且根據不同的參數顯示不同的結果。

2 Arcgis中常規的數據庫合并處理方法

2.1 Arcgis中圖層合并的方法

2.1.1 直接導入法

如圖1所示,這種方法能夠選取自己想要合并的表格屬性。首先是在arccatalog工具欄中定位到我們需要合并的圖層,然后右鍵選擇導入(part2合并入part1圖層中,選擇part1右鍵選擇加載),需要注意的是加載圖層必須是在一個數據庫空間下(gdb或者是mdb目錄下)。

圖1 直接導入法

2.1.2 利用toolbox下的合并工具

如圖2所示,此方法我們需要注意各要素間的表格屬性。如果表格中的字段名稱或者是類型不一致,就會造成數據丟失。所以當圖層數較少時,我們可以采取加載的方式進行,如果要合并多個圖層時,合并工具就會更加有效,但是前提條件是我們預先處理好各表格中字段類型及名稱。(合并工具在ArcToolBox——Data Management Tools—— General——Merge中)。

但是上述兩種方法只適用于少量圖層的合并。由于本文中所處理的數據是包含多個圖層的地質公園數據庫數據,各個地質公園的數據分別存儲在數據庫中,分為水域,水系,注記等圖層,存儲位置太過分散,手動合并各個數據庫相同圖層工作量龐大且容易出錯,本文基于ArcGIS使用python對大量數據庫中的指定圖層進行批量合并,形成整個測區范圍的指定圖層數據,質檢員只需對合并后的數據進行一次檢查,極大的提高質檢效率,減輕質檢工作強度和避免逐幅檢查時易出現的圖幅漏查情況。以下是數據批量處理流程及具體實現。

圖2 利用工具合并

3 ArcPy數據處理實例

3.1 研究背景

在數據生產過程中,通常一個數據庫中包含很多圖層,點、線、面圖層同時存在,多個數據庫中基本包含相同圖層,例如此文中不同的地質公園數據庫中都包含水系,注記,山峰,地質遺跡等同名圖層。數據處理過程中由各個作業員生產的N個獨立的地理數據庫(gdb)最終將匯交至質檢人員,當質檢員應用GIS軟件對這些gdb格式的數據庫中某類要素(比如“水系”層)進行檢查時,由于每個水系圖層都存儲于一個獨立的地理數據庫(gdb)中,質檢員只能選擇將這N個數據庫中每個的水系圖層逐一檢查,這種檢查方式非常之耗時且由于繁瑣的操作而致使檢查工作易出現遺漏,若不想逐個檢查就必須對分散于多個數據庫中的圖層進行合并后再從整體上進行檢查[8]。

3.2 首先介紹數據庫存儲方式(以洞穴公園,恐龍鞏公園,山谷公園為例)

每個公園數據包含4個數據庫(gdb)如圖3所示,分別為邊界圖,地質圖,規劃總圖,科學導游圖,每個數據庫中都含有同名圖層水系,水域,注記,村莊等。

圖3 數據庫存儲方式

3.3 添加路徑識別代碼

由于數據存儲在中文路徑,首先在代碼前添加中文路徑識別代碼,便于python腳本識別數據庫。

否則數據不能被識別導致腳本出現錯誤,無法進行。

import arcpy

import sys

reload(sys)

sys.setdefaultencoding(‘utf8‘)

3.4 利用python腳本進行合并操作(數據庫合并主要代碼如下圖所示,以“邊界圖”數據庫為例)

這一步是利用腳本將三個公園的邊界圖數據庫,即三個不同公園的邊界圖.gdb中的所有同名圖層合并到一個新的數據庫BJ.gdb中。得到的新的數據庫中包含原來三個數據庫中的所有同名圖層,完成了批量合并操作,方便檢查錯位及遺漏。

arcpy.env.workspace=r’F:DZ’ #路徑設置

s1=arcpy.ListWorkspaces() #列出所有的文件夾

for i in s1: #對文件夾進行循環

arcpy.env.workspace=i #設置文件夾下的路徑

print I #把路徑打印出來

s2=arcpy.ListWorkspaces() #列出文件夾下路徑

for j in s2: #對當前路徑下的文件夾進行循環

arcpy.env.workspace=j #設置路徑

print j #把路徑打印出來

s3=arcpy.ListWorkspaces(“*邊界圖.gdb”)

#列出包含邊界圖.gdb的文件夾

for a in s3: #對當前路徑下的文件循環

arcpy.env.workspace=a #設置路徑

print a #打印路徑

ff=arcpy.ListFeatureClasses()

#列出當前路徑下的所有要素類

for f in ff: #對當前要素類進行循環

if not arcpy.Exists(r’F:DZ BJ. gdb’+ ”\”+f): #判斷某一要素是否存在

arcpy.CopyFeatures_management(str(a)+”\”+f,r’F: DZBJ.gdb’+”\”+f) #若不存在則直接復制

else:

print f

arcpy.Append_management (str(a)+”\”+f,r’F:DZBJ.gdb’+”\”+f ,”NO_TEST”,””,””) #如果存在,打印

print ”BJ” #程序完成,顯示“BJ”

3.5 處理結果以及匯總統計(匯總代碼如下所示)

arcpy.env.workspace=r’F:DZBJ.gdb’

ss=arcpy.ListFeatureClasses()

for s in ss:

count=arcpy.GetCount_management(s)

print s+” ”+str(count)

arcpy.env.workspace=r’F:DZ公園‘

s1=arcpy.ListWorkspaces()

for i in s1:

cnt=0

arcpy.env.workspace=i

s2= arcpy.ListWorkspaces()

for j in s2:

arcpy.env.workspace=j

s3=arcpy.ListWorkspaces(”*邊界圖.gdb”)

for a in s3:

arcpy.env.workspace=a

ff=arcpy.ListFeatureClasses(s)

for f in ff:

d=str(arcpy.GetCount_managment(f))

cnt=cnt+int(d)

print s+” ”+str(cnt)

此代碼主要是對合并前各個邊界圖數據庫中所有相同圖層的數量相加之和與合并后數據庫BJ.gdb中總圖層數量的比較,如數量一致,說明合并前后數量一致,所有相同圖層都被合并到新的數據庫中,沒有遺漏。處理結果如表1所示,根據圖中顯示的結果,前后數量一致,代碼完美運行。

表1 最終對比處理結果

Tab.1 Final contrast

3.6 實驗過程中存在的主要問題

在整個數據處理過程中主要存在合并數據類型不一致所引起的錯誤。主要原因是字符串類型不能存放在數值型字段中,如圖4所示。解決方法:查看原始數據,把數據類型改成一致。

圖4 處理過程中出現的錯誤

4 結語

本文以云南省地質環境信息化建設項目中的地質公園數據庫數據為例,探討了ArcPy在地理數據庫合并處理中的方法與應用,實現了對地理數據庫中的指定圖層的自動、批量合并,杜絕了大量地理數據庫圖層人工合并時人為遺漏的情況,極大的提高了工作效率。當采用ArcGIS Engine或是其他數據處理開發包實現此功能時,有著較高的編程門檻,主要面向的人群是專業的開發人員。此文中的方法則降低了編程的門檻,非專業人員也可以輕松上手并且在空間數據批量自動化處理和地理小工具的開發方面具有顯著的優勢[9],利用腳本可以簡化手工操作的步驟,減少誤操作概率,對用戶的日常數據處理工作有很大的幫助[10],Arcgis中提供的種類豐富的數據處理工具并不適用與所有的情況,在具體的工作任務中,合適且方便的地理數據工具往往更加實用,此時就需要個性化的工具去針對不同的工作內容,恰恰Arcpy可以實現這一點。由此可見Python在Arcgis地理處理框架中占據非常重要的位置[11]。在GIS行業今后的發展中,越來越多的開發人員,用戶,數據處理人員將更好的完善python腳本在數據處理方面的應用,工作效率也會也來越高。

[1] 何麗嫻, 甘淑, 陳應躍. 基于Python語言的空間數據處理[J]. 價值工程, 2014(36): 207-209.

[2] 卜麗靜, 鄭新杰, 張正鵬, 等. 基于Python的礦山遙感監測系統開發研究[J]. 測繪工程, 2015(6): 43-47.

[3] 柳琳. 基于工作流的地理處理建模技術[J]. 地理空間信息, 2011, 9(1): 39-42.

[4] 林璐, 王爽, 李海泉, 等. 在ArcGIS下基于Python的矢量數據處理方法[J]. 測繪技術裝備, 2016, 18(4): 63-65.

[5] 曹斌. 基于ArcPy的矢量數據批處理方法研究[J]. 科技創新與應用, 2017(21): 90-90.

[6] 邵保華, 田學志. 談Python在Arcgis地理處理中的應用[J]. 林業勘查設計, 2012(2): 99-100.

[7] 巨擘. ArcGIS中應用Python腳本提高數據生產力的研究[J]. 測繪技術裝備, 2017, 19(3): 12-14.

[8] 陳軒. 基于ArcGIS利用python腳本對地理數據庫中指定同名圖層的批量合并[J].

[9] 張橋平, 李德仁, 龔健雅. 城市地圖數據庫圖形合并技術[J]. 測繪通報, 2003(9): 27-29.

[10] 劉小華. 基于Python的地理信息數據處理研究[J]. 中國化工貿易, 2015, 7(32).

[11] 田學志. 基于Python的Arcgis地理處理應用研究[J]. 計算機光盤軟件與應用, 2013(7): 46-46.

Research on Batch Consolidation Method Based on Python in ArcGIS

LIU Xiang-yu, ZHU Da-ming

(Faculty of Land and Resource Engineering, Kunming University of Science and Technology, Kunming 650093, China)

In order to achieve the bulk consolidation of a large number of identical layers in different geodatabases in ArcGIS, This article is based on the geological environment information construction project in Yunnan Province, Based on a comparative analysis of Arcgis secondary development methods, A new Python programming script for ArcGis 10.5 is proposed. This article gives a detailed description of the principles of Python geospatial analysis, Python scripting capabilities, and experimental data processing flow. Experimental results prove the feasibility of the script. Conclusion: In this article, the scripts developed manually based on ArcPy are significantly more error-prone than manual operations, Achieve batch consolidation of layers with the same name in the geodatabase.

Arcgis; Geodatabase processing; Python; Script editing; Merge

TP79

A

10.3969/j.issn.1003-6970.2018.07.034

劉翔宇(1993-),男,昆明理工大學國土資源工程學院碩士研究生,研究方向為3S技術集成及應用。

本文著錄格式:劉翔宇,朱大明. Arcgis中基于Python的地理數據庫批量合并方法研究[J]. 軟件,2018,39(7):161-165

猜你喜歡
數據處理數據庫方法
認知診斷缺失數據處理方法的比較:零替換、多重插補與極大似然估計法*
心理學報(2022年4期)2022-04-12 07:38:02
ILWT-EEMD數據處理的ELM滾動軸承故障診斷
水泵技術(2021年3期)2021-08-14 02:09:20
數據庫
財經(2017年2期)2017-03-10 14:35:35
數據庫
財經(2016年15期)2016-06-03 07:38:02
用對方法才能瘦
Coco薇(2016年2期)2016-03-22 02:42:52
數據庫
財經(2016年3期)2016-03-07 07:44:46
數據庫
財經(2016年6期)2016-02-24 07:41:51
基于希爾伯特- 黃變換的去噪法在外測數據處理中的應用
四大方法 教你不再“坐以待病”!
Coco薇(2015年1期)2015-08-13 02:47:34
捕魚
主站蜘蛛池模板: 中文无码精品A∨在线观看不卡| 亚洲国内精品自在自线官| 日本91视频| 国产精品福利在线观看无码卡| 国产成人8x视频一区二区| 99热国产这里只有精品无卡顿"| 久久96热在精品国产高清| 国产成人精品高清不卡在线| 国产精品欧美激情| www.亚洲一区| 久久国产精品影院| 色男人的天堂久久综合| 青青国产视频| 国产免费人成视频网| 天天色综合4| 无码中文字幕精品推荐| 国产精品高清国产三级囯产AV| 亚洲性视频网站| 2021精品国产自在现线看| 99久久精品免费看国产免费软件| AV无码一区二区三区四区| 91在线中文| 国产黄色视频综合| 制服丝袜在线视频香蕉| 爽爽影院十八禁在线观看| 六月婷婷精品视频在线观看 | 国产亚洲视频中文字幕视频 | 综合色天天| 国产精品爽爽va在线无码观看 | 亚洲动漫h| 精品国产成人高清在线| 色噜噜狠狠狠综合曰曰曰| 在线亚洲天堂| 漂亮人妻被中出中文字幕久久| 亚洲综合18p| 亚洲综合色婷婷中文字幕| 91国内视频在线观看| 在线人成精品免费视频| 国产乱人伦精品一区二区| 丝袜国产一区| 99精品热视频这里只有精品7| 无码中文AⅤ在线观看| 在线观看视频一区二区| 午夜激情婷婷| 99这里只有精品免费视频| 国产精品久久精品| 91无码人妻精品一区| 看国产一级毛片| 久久综合九色综合97网| 国产亚卅精品无码| 国产视频只有无码精品| 欧洲日本亚洲中文字幕| 亚洲精品无码日韩国产不卡| 91福利在线看| 91外围女在线观看| 8090午夜无码专区| 亚洲国产综合精品一区| 国产情侣一区二区三区| 欧美黄网站免费观看| 亚洲成人播放| 亚洲男人的天堂久久香蕉网| 97一区二区在线播放| 亚洲国产精品日韩欧美一区| 亚洲AV无码不卡无码| 91福利片| 99在线视频免费| 五月婷婷精品| 精品三级在线| 亚洲欧美另类色图| 四虎永久免费网站| 日韩在线网址| 国产精品性| 亚洲黄网视频| 欧美福利在线播放| 国产在线精彩视频二区| 久久伊人久久亚洲综合| 色综合热无码热国产| 国产精品亚洲一区二区三区z| 日韩AV无码免费一二三区| 日韩黄色在线| 色亚洲成人| 亚洲区欧美区|