SQL Server Express テーブルに格納されている値を使用して、ラスター ファイル (植生と土地被覆のタイプを表す) を再分類しようとしています。テーブルには約 400 種のレコードのセットがあり、各行は異なる種を表し、列は各植生タイプを表しています。各植生タイプは、その種の生息地に適している場合は「1」、適していない場合は「0」としてコード化されます。次に、植生ラスターは、種の記録に関連付けられた値に基づいて、「1」または「0」の 2 つの値に再分類されます (これは種ごとにわずかに異なります)。
PythonWin では、pyodbc を使用して SQL Server Express データベース テーブルに接続し、select クエリ ステートメントを実行して、種レコード (行) の値を pyodbc カーソルに収集しています。次に、各列の値を remap ステートメントで出力ラスター値に割り当てたいと思います (添付のコードを参照)。残念ながら、次のエラーが発生し続けます。
TypeError: list indices must be integers, not tuple
カーソルには、選択クエリに基づく SQL Server Express テーブルのすべての値が含まれており、カーソル オブジェクトのrow
パラメーターを介してデータにアクセスできます。したがって、row.BIOME_X 変数は確実に 1 または 0 の値を格納しています。それとも、Python 構文を使ってばかげたことをしているだけなのでしょうか。何か案は?
ありがとう!
# Load Python libraries
import pyodbc
import arcpy
from arcpy import env
from arcpy.sa import *
import os
arcpy.env.overwriteOutput = 1
# Check out the ArcGIS Spatial Analyst extension license
arcpy.CheckOutExtension("Spatial")
# set variables
modelList = arcpy.ListFiles() # build list of species model names for loop
biome_Cur = ("xxxxxxx/xxxx/xxxxxx/1_Input.gdb/biome_current") # the original raster which will be reclassed
# connect to SQL Server Express database
cnxn = pyodbc.connect('DRIVER={SQL Server Native Client 10.0};SERVER=DESKTOP\SQLEXPRESS;DATABASE=Species;UID=sa;PWD=XXXXXX')
cursor = cnxn.cursor()
# main processing loop
for model in modelList:
# reclassifies biome raster based on suitability code from SQL Server Species database
# select query
cursor.execute("""
SELECT [BIOME_1],[BIOME_6],[BIOME_7],[BIOME_8],[BIOME_9],[BIOME_10],[BIOME_14],[BIOME_19],[BIOME_20],
[BIOME_21],[BIOME_22],[BIOME_23],[BIOME_24],[BIOME_25],[BIOME_27],[BIOME_29],[BIOME_30],[BIOME_31],
[BIOME_32],[BIOME_35],[BIOME_36],[BIOME_37],[BIOME_38],[BIOME_39],[BIOME_40],[BIOME_41],[BIOME_42],
[BIOME_43],[BIOME_44],[BIOME_45],[BIOME_46],[BIOME_47],[BIOME_48],[BIOME_50],[BIOME_100],[BIOME_200]
FROM Species.dbo.BiomesPerSpp_Rehfeldt
WHERE ID = ?""", (model))
# assign remap variable for reclassification
remap_cur = arcpy.sa.RemapValue([7, row.BIOME_7][8, row.BIOME_8],[9, row.BIOME_9],[14, row.BIOME_14],[20, row.BIOME_20],
[21, row.BIOME_21], [22, row.BIOME_22], [23, row.BIOME_23], [25, row.BIOME_25], [30, row.BIOME_30],
[31,row.BIOME_31],[32, row.BIOME_32], [36, row.BIOME_36], [38, row.BIOME_38], [41, row.BIOME_41],
[42, row.BIOME_42], [43, row.BIOME_43],[44, row.BIOME_44], [45, row.BIOME_45], [46, row.BIOME_46],
[47, row.BIOME_47], [50, row.BIOME_50], [100, row.BIOME_100],[200, row.BIOME_200])
biomeReClass_cur = arcpy.sa.Reclassify(biome_Cur, "Value", remap_cur, "NODATA")