2011. október 13., csütörtök

Geometria felülírása arcgisscripting segítségével

#####################################################################
# Geometria felülírása egy létező shp fájlból egy meglévő mdb fájlba
# Egyező id alapján
# arcgisscripting(9.3)
#####################################################################

# -*- coding: utf-8 -*-


import os
import arcgisscripting


workspace='C:\\MUNKA\\KOZOS\\Fetikovizig\\'
mdb=os.path.join(workspace,'teszt.mdb')

shp=os.path.join(workspace,'teszt_shp.shp')
fcs=os.path.join(mdb,'teszt_1')

gp=arcgisscripting.create(9.3)
gp.workspace=workspace

# FORRÁS:
# http://webhelp.esri.com/arcgisdesktop/9.3/index.cfm?id=1063&pid=980&topicname=SearchCursor_method
# http://webhelp.esri.com/arcgiSDEsktop/9.3/index.cfm?TopicName=UpdateCursor_method
# http://gis.stackexchange.com/questions/4741/updating-a-points-geometry-based-on-geometry-of-another-feature-class

if gp.exists(shp) ==False or gp.exists(mdb)==False:
    print 'Vagy az mdb vagy a shp nem létezik pls állítsd be az elérési útvonalat'


# Nézze végig a shapet
# Ehhez létre kell hozni egy serchcursor generátort
shp_rows=gp.SearchCursor(shp)
shp_row=shp_rows.Next()                     # meghívom a generátort

while shp_rows:                                        # Az utolsó elemig
    geom=shp_row.GetValue('Shape')        # Leszedem a geometriát
    id=shp_row.GetValue('id')                     # Leszedem az azonosítót
    where =  "OBJECTID" +'='+ str(id)      # SQL lekérdezés OBJECTID az mdb default id mezője (a vicces az, ha searchcursort használok akkor már ugyanúgy kell pontosan formázni, ahogyan a select by locationban teszem)
    fcs_rows=gp.UpdateCursor(fcs,where) # Létrehozom az updatecursor generátort, ami a where feltétel szerint szűrt már.
    fcs_row=fcs_rows.Next()                    # meghívom a generátort (tekintve, hogy csak 1 obj van, így nem kell while
    fcs_row.shape=geom                              # beállítom az új geometriát
    fcs_rows.UpdateRow(fcs_row)              # updatelek
    del fcs_rows                                           # törlöm az mdb updatecursorát

del shp_rows                                             # törlöm a shp searchcursorát
   
A script innen letölthető


Nincsenek megjegyzések:

Megjegyzés küldése