Re: [問題] GIS 批次輸入Attributes Table
※ 引述《MAGICXX (逢甲阿法)》之銘言:
: 因為我這邊有上萬組的資料需要輸入點圖層
: 可是我現在遇到幾個問題
: 1.
: 我輸入field name的時候只輸入"數字"就會無法進行idw的動作
: 請問一下 這是他軟體的限制嗎?
: 還是說哪邊可以修改?
: 2.
: 因為我的資料量很龐大 要是一組一組的新增field的話
: 會花非常久的時間(更別提我之後還要再進行idw了..)
: 請問有辦法可以直接打開excel檔進行批次處理嗎?
: 就是把excel檔轉換成一個圖層 或者是把它直接加入我原本的點圖層裡面?
: 因為我現在有大概12個點
: 需要每個field都輸入不同的資料(這field大概有幾萬筆..)
: http://tinyurl.com/6ktrsu8
: 像這張圖 不過他會需要一直往右邊延伸(幾萬筆...囧)
: 請問有比較快的方法嗎 囧
: 一個一個輸入 可能會死人Orz
: 請大大們幫忙一下 謝謝
你的問題看來必須要用一點VBA才能解決
假設你的point.shp有5個點,各點欄位Name分別為A, B, C, D, and E
並新增一欄位value (float)
你的Excel試算表資料格式如下
date , A, B, C, D, E
1999010, 1, 1, 1, 1, 1
1999011, 2, 2, 2, 3, 4
1999012, 4, 1, 1, 2, 2
.....................
以下為我半生不熟的VBA寫的code,裡面可能還有不少bug,原PO你可能要自己debug
Private Sub batchIDW()
'讀取excel
Set myExcel = CreateObject("Excel.Application")
With myExcel
.Workbooks.Open "C:\test\data.xls" '要打開的 xls 檔案
Set rng = .ActiveSheet.UsedRange
row_c = rng.Rows.Count '讀取row數量
'呼叫toolbox
Dim GP As Object
Set GP = CreateObject("esriGeoprocessing.GpDispatch.1")
'Set the toolbox
GP.Toolbox = "C:\Program Files\ArcGIS\ArcToolBox\Toolboxes\
Data Management Tools.tbx"
Dim ss as string ' 用來儲存calculate field的 VB code
'開始迴圈
for i = 0 to row_c
dim output as string
'從excel欄位讀取第i行的數值
output = "C:\test\IDW" & .Worksheets("Sheet1").Range("A" & i)
Value_A = .Worksheets("Sheet1").Range("B" & i)
Value_B = .Worksheets("Sheet1").Range("C" & i)
Value_C = .Worksheets("Sheet1").Range("D" & i)
Value_D = .Worksheets("Sheet1").Range("E" & i)
Value_E = .Worksheets("Sheet1").Range("F" & i)
寫calculate field的 VB code
ss = "dim a as string"
ss = ss & "\n if [name] = ""A"" then a = " & Value_A
ss = ss & "\n elseif [name] = ""B"" then a = " & Value_B
ss = ss & "\n elseif [name] = ""C"" then a = " & Value_C
ss = ss & "\n elseif [name] = ""D"" then a = " & Value_D
ss = ss & "\n elseif [name] = ""E"" then a = " & Value_E
ss = ss & "\n end if"
gp.calculateField "C:\test\point.shp", "value", "VB", ss
'將此列數直寫入value欄位
GP.Toolbox = "C:\Program Files\ArcGIS\ArcToolBox\Toolboxes\Spatial Analyst Too
ls.tbx"
'IDW內插
gp.idw "C:\test\point.shp", "value", output, 100 'idw內插 cell size = 100m
next '結束迴圈
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 111.243.62.60
※ 編輯: twmtman 來自: 111.243.62.60 (03/08 23:04)
推
03/09 11:20, , 1F
03/09 11:20, 1F
→
03/09 11:21, , 2F
03/09 11:21, 2F
討論串 (同標題文章)