Klassifisere ESRI raster ved hjelp av variabler fra en SQL Server tabell (forbinder med pyodbc)

stemmer
0

Jeg prøver å reklass en raster fil (som representerer vegetasjon og arealdekke typer) med verdiene som er lagret i en SQL Server Express tabellen. Jeg har et sett med ~ 400 arter poster i tabellen, med hver rad representerer en annen art, og en kolonne for hver vegetasjonstype. Hver vegetasjonstype er kodet som enten 1 hvis den er egnet habitat for denne arten, eller 0 hvis den er uegnet. Vegetasjonen raster vil så bli ført over to verdier, 1 eller 0, basert på de verdier som er knyttet til arten posten (dette vil være noe forskjellig for hver art).

I PythonWin, jeg bruker pyodbc å koble til SQL Server Express database tabell, deretter kjøre en utvalgsspørring utsagn for å samle verdiene for en art rekord (rad) i pyodbc markøren. Da ønsker jeg å tilordne hver kolonneverdi til utgangen raster verdien i omadresseringsbit regnskapet (se kode vedlagt). Dessverre, jeg får stadig følgende feilmelding:

TypeError: list indices must be integers, not tuple

Markøren har alle verdiene fra SQL Server Express tabell basert på utvalgsspørring, og jeg kan få tilgang til data via markøren objektets rowparameter. Så row.BIOME_X variabelen er definitivt lagring av en eller 0 verdi. Eller er jeg bare gjør noe dumt med Python syntaks. Noen ideer?

Takk!

# 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)
Publisert på 23/08/2012 klokken 04:46
kilden bruker
På andre språk...                            


1 svar

stemmer
1

Du utelatt komma mellom 7 og 8 elementer som er oppført under RemapValue. Også må du legge ved at hele listen av lister i parentes.

remap_cur = arcpy.sa.RemapValue([[7, row.BIOME_7],[8, row.BIOME_8]...[200, row.BIOME_200]])

For mer, se: http://resources.arcgis.com/en/help/main/10.1/index.html#//005m0000007q000000

Svarte 15/10/2012 kl. 17:18
kilden bruker

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more