Esto debería ser más accesible a través de ArcPy, pero mientras tanto podemos aprovechar las tablas de registro SDE para encontrar la respuesta. La SDE.GEOMETRY_COLUMNS
tabla contiene los nombres de las clases de entidad F_TABLE_NAME
, el propietario del esquema F_TABLE_SCHEMA
y el nombre de la tabla de geometría correspondiente G_TABLE_NAME
.
Si los nombres de la tabla de entidades y geometría son los mismos, la geometría de la clase de entidad se almacena en la misma tabla que los atributos; de lo contrario, la geometría se almacena en una tabla de entidades separada (también conocida como tabla "F").
Entonces nuestra consulta SQL sería algo así como:
SELECT COUNT(*) AS GEOMETRY_IN_FEATURE_TABLE
FROM SDE.GEOMETRY_COLUMNS
WHERE F_TABLE_SCHEMA || '.' || G_TABLE_NAME = :featureClassName
Para ArcPy, suponga que "GEODATABASE.sde" es el nombre de un archivo de conexión SDE y "GIS.TAX_PARCELS_POLY" es el nombre de una clase de entidad almacenada en el esquema "GIS":
import arcpy, os
dstFeatureClass = "sde/DC_LISDBA (GIS).sde/GIS.PARCEL_PARCELS_POLY"
#open a connection to the geodatabase
wks = arcpy.ArcSDESQLExecute(os.path.dirname(dstFeatureClass))
#create the SQL query statement
sql = \
"SELECT COUNT(*) AS GEOMETRY_IN_FEATURE_TABLE " \
"FROM SDE.GEOMETRY_COLUMNS " \
"WHERE F_TABLE_SCHEMA || '.' || G_TABLE_NAME = " + \
"'" + os.path.basename(dstFeatureClass) + "'"
#execute the query and return the geometry type
print "ST_Geometry" if wks.execute(sql) else "SDEBINARY"
#delete the geodatabase connection
del [wks, sql]
Tenga en cuenta que esta solución solo le dice si la geometría se almacena en la misma tabla que la clase de entidad y no el tipo de columna real (por ejemplo, SDEBINARY, SDELOB, ST_Geometry) aunque creo que se puede encontrar en otro lugar en las tablas SDE u Oracle.
Esto también podría optimizarse aún más creando una función de Oracle y / o creando una vista en la SDE.GEOEMTRY_COLUMNS
tabla.
* Probado con ArcSDE 10.2.2 en Oracle 11g (64 bits).