2012-08-23 5 views
0

SQL Server Express 테이블에 저장된 값을 사용하여 래스터 파일 (식물 및 땅 덮개 유형을 나타냄)을 재급 리하려합니다. 나는 테이블에 ~ 400 종의 레코드 세트를 가지고 있는데, 각각의 행은 다른 종을 나타내고, 각 행은 각 식물 유형을 나타냅니다. 각 식물 유형은 그 서식지에 적합한 서식지라면 "1"로, 부적절한 경우에는 "0"으로 분류됩니다. 식생 래스터는 종 기록과 관련된 값을 기반으로 "1"또는 "0"의 두 가지 값으로 재 분류됩니다 (이것은 각 종마다 약간 다름).SQL Server 테이블의 변수 (pyodbc와 연결)를 사용하여 ESRI 래스터 재 분류

PythonWin에서 pyodbc를 사용하여 SQL Server Express 데이터베이스 테이블에 연결 한 다음 select 쿼리 문을 실행하여 pyodbc 커서에 종 레코드 (행) 값을 수집합니다. 그런 다음 각 열 값을 remap 문에서 출력 래스터 값에 할당하려고합니다 (첨부 된 코드 참조).

TypeError: list indices must be integers, not tuple 

커서가 선택 쿼리를 기반으로 SQL Server Express는 테이블에서 모든 값을 가지고, 나는 커서 객체의 row 매개 변수를 통해 데이터에 액세스 할 수 있습니다 : 불행하게도, 나는 다음과 같은 오류가 계속. 그래서 행 .BIOME_X 변수는 확실히 1 또는 0 값을 저장하고 있습니다. 아니면 그냥 파이썬 구문으로 무언가를하고있는 것입니다. 어떤 아이디어?

감사합니다.

# 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") 

답변