¿Hay alguna manera de saber la versión de la geodatabase usando Python?

8

Quiero saber si un archivo o una geodatabase personal es 9.3, 10.0, 10.1, etc.

¿Hay alguna manera de hacer esto usando Python?

ianbroad
fuente
¿Hay alguna manera de distinguir una geodatabase "anterior" (10.2) de una geodatabase más nueva (10.7)? La mayoría de mis geodatabases he creado en 10.2 y he actualizado a 10,7 y sería bueno si pudiera distinguir entre las 2 versiones muy diferentes ....
Patty Miller

Respuestas:

8

Probaría la propiedad de lanzamiento Describe Workspace

http://resources.arcgis.com/en/help/main/10.1/index.html#/Workspace_properties/018v0000002v000000/

Nicholas Graf
fuente
¿Y si estoy usando 10.0?
ianbroad
2
@IB, en su pregunta original , preguntó si también podría averiguar si un gdb era 10.1, por lo que creo que era justo asumir que estaba usando 10.1, ya que es poco probable que la versión anterior (es decir: 10.0) alguna vez pueda para decirte algo sobre una futura versión gdb.
RyanKDalton
De la ayuda vinculada, parece que no hay diferenciación entre las geodatabases de lanzamiento 10.0 y 10.1. Ambos devolverán el valor 3,0,0.
blah238
6

Aquí hay una solución de tipos de ArcObjects + que funciona para mí en 10.0:

import arcpy
from ESRICOMHelpers import GetESRIModule, CType, NewObj

def GetGDBReleaseVersion(gdbPath):
    """Gets the release version of the given geodatabase."""
    esriGeoDatabase = GetESRIModule("esriGeoDatabase")
    esriGeoprocessing = GetESRIModule("esriGeoprocessing")
    gpUtilities = NewObj(esriGeoprocessing.GPUtilities, esriGeoprocessing.IGPUtilities)
    try:
        dataset = gpUtilities.OpenDatasetFromLocation(gdbPath)
        workspace = CType(dataset, esriGeoDatabase.IWorkspace)
        gdbRelease = CType(workspace, esriGeoDatabase.IGeodatabaseRelease2)
        return "%d.%d" % (gdbRelease.MajorVersion + 7, gdbRelease.MinorVersion)
    except:
        return None

if __name__ == "__main__":
    print GetGDBReleaseVersion(r"C:\GISData\test.gdb")

Salida:

>>> 
10,0

Grab comtypes aquí y ESRICOMHelpers aquí. Si estás en 10.1, asegúrate de ajustar los tipos automation.pycomo se describe en esta respuesta .

Nota: ¡ Tenga en cuenta que esto también devuelve 10.0 para las geodatabases 10.1 cuando se ejecuta desde ArcGIS 10.0! Editar: ¡ En realidad, esto devuelve 10.0 para una geodatabase de archivos 10.1 cuando se ejecuta desde ArcGIS 10.1 también! No estoy seguro de lo que está pasando: |

blah238
fuente
1
¿Está seguro de que se trata de una base de datos geográfica 10.1 y no solo de una base de datos 10.0 que se ha abierto en 10.1? ¿Puedes usar el botón "actualizar Geodatabase" en él? help.arcgis.com/en/arcgisdesktop/10.0/help/index.html#//…
Ragi Yaser Burhum
Dice que está en la versión actual de mi caja 10.1 y no puedo actualizarlo.
blah238
1
Error de
1
En realidad, la propiedad 10.1 arcpy Workspace describe releasedevuelve lo mismo para las geodatabases de lanzamiento 10.0 y 10.1 también: resources.arcgis.com/en/help/main/10.1/index.html#/…
blah238
1
Todo lo que hace el código es hacer una selección () en una de las tablas que tiene una cadena llamada versión. Esa cadena se actualiza cada vez que se cambia el esquema de GeoDatabase. Es muy posible que el esquema GeoDatabase no haya cambiado para esa versión y, por lo tanto, nadie tocó el código y, por lo tanto, el valor no se tocó. En mi humilde opinión, debería ser tocado por cada lanzamiento, pero supongo que si el esquema es el mismo, significa que se puede abrir en ambas versiones de ArcGIS, por lo que en realidad no hay un GDB "10.1", solo un GDB 10.0.
Ragi Yaser Burhum 01 de
1

¡Buena pregunta! En 10.0, no puedo encontrar ningún método de Python para describir la versión de la geodatabase. He probado usando la herramienta GP de actualización de geodatabase en 10.1 y podría ser útil.

"La herramienta Actualizar geodatabase solo funcionará con las geodatabases que se encuentran en una versión anterior".

Esto significa que podemos probar la ejecución de esta herramienta sin configurar la opción "Actualizar geodatabase" solo para ver si se ejecutará (si la geodatabase es de la misma versión, no se ejecutará). Si lo hará, entonces es de la versión actual (solo se realizará la verificación de requisitos previos y la geodatabase quedará intacta).

Con respecto a las pruebas 9.3 y 10.1: estaba pensando en intentar crear un conjunto de datos de muestra que sea posible crear solo en la geodatabase de la versión 10.0 / 10.1 y luego verificar si se creó. Si no, entonces es 9.3 / 10.1.

Aunque no es la solución más elegante ...

Alex Tereshenkov
fuente