arcgis下的python編程
① arcgis怎麼用python
arcgis軟體中有專門的python窗口
② 在arcgis中如何保存python程序
1、如果你是使用集成的開發環境,直接去c盤文件夾下可以找到相應的程序文件,它是自動保存的;
2、如果你是使用python 自帶的gui,也可以像上面的方法找到文件,但也可以另存為(save as).py文件到你自己的地址;
3、如果你是使用命令行,你可以點擊菜單「全選」、「復制」,到一個新建的txt文件中,然後保存.txt文件,並將文件擴展名.txt修改為.py即可。
③ Arcgis Engine二次開發用python可以嗎
1.自定義工具箱是什麼
就像名字一樣,自定義工具箱是由個人創建的工具箱,就像下面這樣,可以理解成一個 .tbx 後綴的壓縮包,每一個工具箱中都可以添加多個工具集、腳本工具甚至模型構建器工具。
一大堆工具箱
1.1如何添加自定義工具箱(熟悉可跳過)
第一步:右鍵點擊 ArcToolbox -> 添加工具箱
第二步:在打開的添加工具箱窗口中選中需要添加的工具,然後點擊右下角的打開即可。
添加工具箱到 Arcmap
1.2如何創建自定義工具箱
點擊右上角的紅色工具箱符號,可以新建並重命名一個工具箱。
我們這里新創建了一個海怪工具箱,用於之後的教程演示。
新建工具箱
1.3添加一個腳本工具
新創建的工具箱就像一個大箱子,箱子呢是用來裝工具的,你可以直接在工具箱中右鍵,然後點擊添加,再點擊腳本,進而創建一個腳本工具;
亦或是右鍵,點擊新建,再點擊工具集,創建一個可以自定義名稱的工具集,然後在工具集里新建一個腳本工具。
這里添加的腳本工具只是一個空殼,我們後面會繼續完善。
新建的工具箱位於 ../Chapter7/海怪工具箱.tbx。
2.工具箱的封裝
工具箱由三部分組成,其中有兩部分需要我們來控制:
一是輸入界面:確定工具箱輸入界面的參數定義和設置;
二是 Python 源代碼:功能的實現,為 .py 後綴的腳本文件;
三是對參數行為提供額外控制的可選驗證代碼,其位於工具箱中(這部分自帶,基本上不用修改)。
所以下面的重點就是輸入界面和 Python 源代碼。
2.1工具箱輸入界面
工具箱輸入界面,或者說圖形交互界面(GUI),就像下面的幾張圖一樣,從該界面我們可以控制工具的行為,自定義輸入界面然後配合 Python 腳本,可以實現多種客制化的功能。
簡單來說,你可以認為輸入界面是依託於 Arcmap 的「前端」,腳本代碼就是負責運行的「後端」。
導入導出工具:
為方便演示,製作一個非常簡單的工具箱,它的功能呢就是把輸入的要素類(資料庫或者 shp )再導出來而已,是完全沒有用的導入導出功能啦,不過作為演示還是非常不錯的。
製作完成後的導入導出工具的界面
第一步:
在工具箱中,右鍵點擊添加,再點擊腳本,然後修改名稱,修改成你想要的名字,勾選存儲相對路徑名,然後點擊下一頁。
修改名稱
第二步:
然後添加腳本文件,添加該腳本文件 ../Chapter7/toolscript/input_and_output.py,讀者可以在最後的下載包中找到該文件。
然後點擊下一頁。
鏈接python腳本
第三步:
控制用戶交互界面。ArcGIS 在這里內置了一整套簡單但是實用的圖形控制項,比如輸入菜單、下拉框、多選框、單選等,藉由這些圖形控制項我們可以控制腳本工具的圖形交互界面。
我們這里使用的腳本功能非常簡單,上面也有說到:輸入一個矢量要素類,不做任何處理,然後輸出一個矢量要素類。
為了匹配這個腳本,我們需要設置一個輸入圖層的控制項,同時為了能順利的輸出,也需要一個輸出圖層的控制項,注意一個是輸入一個是輸出。
從下圖可以看到,左邊(左邊的橙色框)是顯示名稱,其中輸入輸出控制項的名稱以及輸入控制項的名稱,這里命名為輸入要素和輸出要素;然後在右邊(右邊的橙色框)的數據類型下拉框中,我們選擇要素圖層,這里只能做選擇,不能任意輸入。
設置名稱和數據類型
那麼輸入輸出是如何區分的呢?
選中輸入要素(變成藍色),然後可以看到下方(下方橙色框)的參數屬性設置選項卡,這里可以對參數進行調整。
參數選項
① 類型:有三種,一般只會用到 Required 和 Optional,表示必須和可選,用於控制參數是否可以忽略不填;
② 方向: 兩種,Input 和 Output,表示輸入和輸出,大部分情況都是使用 Input 來獲得參數,Output 用於獲得最後的成果數據,像是矢量、柵格或者圖表;
③ 多值:Yes 或者 No,用於輸入多個相同類型的數據,工具打開後就是下面這樣,在輸入要素中可輸入多個要素類;
④ 默認:設置一個控制項的默認值,直接輸入即可。可配合多值一同使用,使用 ; (英文的分號)分開,
結果如下,可以看到一打開該工具就已經填充上了預設的多個默認值(報錯是因為數據類型不是要素圖層);
⑤ 環境:工具箱的環境設置,比如掩膜、容差范圍、默認資料庫位置等,一般不預先設置;
⑥ 過濾器:選擇文件類型可以在選擇文件時只顯示特定格式的文件;
⑦ 獲取自:指定數據的獲取源。這是個什麼意思呢?比如我們想要獲取圖層A的某個欄位,獲取源就是圖層A。
以下面這種圖作為例子,新增名為欄位的控制項(上方的橙色框),數據類型也是欄位,然後參數屬性中獲取自選擇輸入要素(下方橙色框)。
設置欄位控制項
點擊完成後,打開腳本工具。在輸入要素框中選擇一個圖層,然後再點擊獲取欄位,如下就可以選擇圖層中的欄位了。
獲取圖層的欄位
⑧ 符號系統:在最下面還有一個符號系統,通常只能作用於輸出的矢量圖層(方向:Output),可為輸出圖層指定設置好的 lyr 文件樣式。
設置符號系統
第四步:
點擊右下方的完成,那麼腳本工具的輸入界面就完成了。
2.2 Python 腳本
工具箱輸入界面和 Python 代碼要相互配合才行,工具箱界面中的輸入、輸出以及各種各樣的參數,在 Python 腳本文件中都得一一對應上,將輸入界面中的各個參數傳給 Python 腳本,這樣才能讓 Python 腳本按照預期的效果正常運行。
看上去有點麻煩,但實際上 arcpy 中提供了現成的函數就可以直接獲得參數。
①參數對接(獲取)
至於如何對接參數,我們使用剛剛的那個腳本文件舉例:
../Chapter7/toolscript/input_and_output.py
# -*- coding:utf-8 -*-
import arcpy
#▶1◀
input_lyr = arcpy.GetParameterAsText(0)
output = arcpy.GetParameterAsText(1)
if __name__ == '__main__':
lyr = arcpy.mapping.Layer(input_lyr)
arcpy.CopyFeatures_management(lyr, output)
▶1◀:arcpy 提供了 GetParameterAsText(index) 函數,該函數根據輸入界面的排序號碼獲得指定的參數。比如 GetParameterAsText(0) 獲得的就是輸入圖層參數, GetParameterAsText(1) 獲得的就是第二個參數,也就是輸出圖層參數。
如果有更多參數,以此類推。
②參數對接中應該注意的情況
GetParameterAsText(index) 從輸入界面獲得的參數都會轉變成字元串,沒錯都是字元串。
如果你只是輸入輸出地址這種,那麼沒有問題,因為地址本來就是字元串,但是如果你設置了一個選擇長度范圍的長整型的控制項、亦或是某種布爾值選擇,最後輸入到 python 腳本這里都會變成字元串。
整數變成字元串,使用 int(str) 規避;
布爾型變成字元串,True 變成了 "True",False 變成了 "False",這樣就不能判斷真假了,需要寫一個判斷語句或者隨便你,方法很多;
還有就是一個輸入控制項多值的情況,所有值根據先後連接成一個字元串,中間由 、(英文分號)間隔,可以使用 split 函數分開;
④ arcgis9.3怎麼使用python
Python 表達式可通過 幾何對象中的屬性(type、extent、centroid、firstPoint、lastPoint、area、length、isMultipart 和 partCount)進行創建。
!shape.area!
Python 表達式可以使用具有面積或線性單位的幾何 area 和 length 屬性將值轉換為不同的測量單位(例如 !shape.length@kilometers!)。如果數據存儲在地理坐標系中且具有線性單位(例如英里),則使用測地線演算法計算長度。在地理數據中使用面積單位會產生不正確的結果,這是由於沿 globe 的十進制度並不一致。
面積測量單位關鍵字:
英畝 | 公畝 | 公頃 | 平方厘米 | 平方分米 | 平方英寸 | 平方英尺 | 平方千米 | 平方米 | 平方英里 | 平方毫米 | 平方碼 | 平方地圖單位 | 未知
線性測量單位關鍵字:
厘米 | 十進制度 | 分米 | 英尺 | 英寸 | 千米 | 米 | 英里 | 毫米 | 海里 | 磅 | 未知 | 碼
在工具對話框中,可將表達式直接輸入到表達式參數中,或者使用「欄位計算器」以交互方式構建表達式。
使用所選要素集(如從創建要素圖層或按屬性選擇圖層內的查詢中創建的要素集)時,此工具將只更新所選的記錄。
每次操作僅能對一個欄位應用計算。
現有欄位值將被覆蓋。如果想要保留原始欄位值,應創建輸入表副本
對於 Python 計算,必須在欄位名稱兩旁添加驚嘆號(!欄位名!)。
對於 VB 計算,欄位名稱必須用方括弧括起([欄位名])。
計算文本或字元欄位的字元串時,在對話框中,必須對字元串添加雙引號("字元串"),而在腳本中,還必須對加雙引號的字元串添加單引號('"字元串"')。
此工具也可用於更新字元項。應對使用字元串的表達式添加單引號(例如 [CHARITEM] = 『新字元串')。但是,如果字元串已包含單引號,則要對該字元串添加雙引號,例如 [CHARITEM] = "類型'A'"。
要計算數值欄位,可在表達式參數中輸入數值;值的兩旁無需加引號。
如果已指定 Python 表達式,則此工具支持 arcgis.rand() 函數。已為 ArcGIS 工具創建 arcgis.rand() 函數,不應將此函數與 Python Rand() 函數相混淆。arcgis.rand() 函數的可用分布的語法在隨機值的分布語法中進行介紹。
表達式與代碼塊會相互連接。代碼塊必須返回與表達式的關聯;代碼塊的結果應傳入到表達式中。
代碼塊參數可用於創建復雜表達式。您可以在對話框中直接輸入代碼塊,或在腳本中將代碼塊作為連續字元串輸入。
Python 數學模塊及格式可供代碼塊參數使用。您可以導入附加模塊。數學模塊可提供數論函數與表達函數、冪函數與對數函數、三角函數、角度轉換函數、雙曲函數以及數學常數。要了解更多有關數學模塊的內容,請參閱 Python 的幫助。
保存的 ArcGIS 先前版本的 VB .cal 文件可以直接使用或者只需做少量修改後即可使用。如果擁有使用 ArcObjects 的過去版本的 VBA 代碼,則計算需經過修改後才能用於 10.0。
計算連接數據時,您無法直接計算連接列。然而,您可以直接計算源表的列。要計算連接數據,必須先將連接表或連接圖層添加至 ArcMap。然後可以分別對此數據執行計算。這些更改將反映在連接列中。
計算欄位示例
⑤ 如何用python在arcgis中編寫程序,求兩點的最短路徑
你是想學PYTHON編程還是只是想只得到這個PYTHON文件。可以給你提供一條簡潔的途徑用modelbuilder來實現,將多個SHP文件拖入進去,再把MERGE工具拖進去,雙擊modelbuilder中的merge工具框設置,再雙擊output dataset框設置輸出。然後將這些shp文件用倒數第二個按鈕添加鏈接的功能將他們一個個與merge工具框鏈接起來。最後點擊model-export-to srcipt-python 就會輸出一個python文件,可以用記事本打開查看裡面的代碼。
⑥ 你好,arcgis中如何將多個shp文件,比如點文件進行合並,怎麼用python編程啊
你是想學PYTHON編程還是只是想只得到這個PYTHON文件。可以給你提供一條簡潔的途徑用modelbuilder來實現,將多個SHP文件拖入進去,再把MERGE工具拖進去,雙擊modelbuilder中的merge工具框設置,再雙擊output
dataset框設置輸出。然後將這些shp文件用倒數第二個按鈕添加鏈接的功能將他們一個個與merge工具框鏈接起來。最後點擊model-export-to
srcipt-python
就會輸出一個python文件,可以用記事本打開查看裡面的代碼。
⑦ 關於arcgis的python腳本編程, shape文件出png圖片問題
1、點類型的轉柵格:
PointToRasterexample1(Python
window)
.
importarcpy
fromarcpyimportenv
env.workspace="c:/data"
arcpy.PointToRaster_conversion("ca_ozone_pts.shp","ELEVATION",
"c:/output/ca_elev","MAXIMUM","",2000)
PointToRasterexample2
(stand-alonescript)
.
#Name:PointToRaster_Ex_02.py
#Description:.
#Requirements:ArcInfo
#Importsystemmoles
importarcpy
fromarcpyimportenv
#Setenvironmentsettings
env.workspace="C:/data"
#Setlocalvariables
inFeatures="ca_ozone_pts.shp"
valField="ELEVATION"
outRaster="c:/output/ca_elev02"
assignmentType="MAXIMUM"
priorityField=""
cellSize=2000
#ExecutePointToRaster
arcpy.PointToRaster_conversion(inFeatures,valField,outRaster,
assignmentType,priorityField,cellSize)
2、面類型的轉柵格:
PolygonToRasterexample1
(Pythonwindow)
.
importarcpy
fromarcpyimportenv
env.workspace="c:/data"
arcpy.PolygonToRaster_conversion("ca_counties.shp","NAME",
"c:/output/ca_counties.img",
"MAXIMUM_AREA","MALES",0.25)
PolygonToRasterexample2
(stand-alonescript)
.
#Name:PolygonToRaster_Ex_02.py
#Description:.
#Requirements:ArcInfo
#Importsystemmoles
importarcpy
fromarcpyimportenv
#Setenvironmentsettings
env.workspace="C:/data"
#Setlocalvariables
inFeatures="ca_counties.shp"
valField="NAME"
outRaster="c:/output/ca_counties"
assignmentType="MAXIMUM_AREA"
priorityField="MALES"
cellSize=0.5
#ExecutePolygonToRaster
arcpy.PolygonToRaster_conversion(inFeatures,valField,outRaster,
assignmentType,priorityField,cellSize)
3、線類型轉柵格
PolylineToRasterexample1
(Pythonwindow)
.
importarcpy
fromarcpyimportenv
env.workspace="c:/data"
arcpy.PolylineToRaster_conversion("roads.shp","CLASS","c:/output/roads.img",
"MAXIMUM_COMBINED_LENGTH","LENGTH",30)
PolylineToRasterexample2
(stand-alonescript)
.
#Name:PolylineToRaster_Ex_02.py
#Description:.
#Requirements:ArcInfo
#Importsystemmoles
importarcpy
fromarcpyimportenv
#Setenvironmentsettings
env.workspace="C:/data"
#Setlocalvariables
inFeatures="roads.shp"
valField="CLASS"
outRaster="c:/output/roads.tif"
assignmentType="MAXIMUM_COMBINED_LENGTH"
priorityField="LENGTH"
cellSize=30
#ExecutePolylineToRaster
arcpy.PolylineToRaster_conversion(inFeatures,valField,outRaster,
assignmentType,priorityField,cellSize)
⑧ 怎樣用arcgis中的python進行批量投影
接到的需求是對文件夾下包括子目錄所有影像進行投影變換,在網上找了找,大家的代碼好像和需求不太一致,自己寫了一個小工具。
思路是遍歷文件夾所有.tif文件。
1.用os.walk()函數來獲取路徑和文件名
2.用 if 語句限制讀取後綴為.tif的文件
3.將文件路徑和文件名組合起來
4.調用arcpy.ProjectRaster_management語句投影變換並輸出
由於剛剛接觸python,難點主要在於os.walk()目錄的讀取這個函數的了解上。
以下是代碼
#coding=utf-8
importos
importarcpy
fromarcpyimport*
#定義一個函數,第一個參數是一個集合,用來接收所有.tif的路徑。第二個函數是指定的文件夾。
defhuoqu(jieshou,lujing):
fordirpath,dirnames,filenamesinos.walk(lujing):
forfilenameinfilenames:
ifos.path.splitext(filename)[1]=='.tif':
file1=dirpath+'\'+filename
jieshou.append(file1)
#這里變數的設置,GetParameterAsText函數來獲取對應在python工具箱中的位置
env.workspace=GetParameterAsText(0)
work=env.workspace
ref=GetParameterAsText(1)
tifz=[]
#調用自定義的函數
huoqu(tifz,work);
#對所有的影像進行循環投影變換,並且將輸出路徑設置為指定的文件夾+原本的名字
forfileintifz:
out=GetParameterAsText(2)+"/"+os.path.basename(file)
ProjectRaster_management(file,out,ref)