Questo dovrebbe essere più accessibile tramite ArcPy ma nel frattempo possiamo sfruttare le tabelle del registro SDE per trovare la risposta. La SDE.GEOMETRY_COLUMNS
tabella contiene i nomi delle classi di entità geografiche F_TABLE_NAME
, il proprietario dello schema F_TABLE_SCHEMA
e il nome della tabella della geometria corrispondente G_TABLE_NAME
.
Se i nomi delle tabelle di geometria e geometria sono uguali, la geometria della classe di geometria viene memorizzata nella stessa tabella degli attributi; in caso contrario la geometria viene memorizzata in una tabella delle caratteristiche separata (nota anche come tabella "F").
Quindi la nostra query SQL sarebbe simile a:
SELECT COUNT(*) AS GEOMETRY_IN_FEATURE_TABLE
FROM SDE.GEOMETRY_COLUMNS
WHERE F_TABLE_SCHEMA || '.' || G_TABLE_NAME = :featureClassName
Per ArcPy, supponiamo che "GEODATABASE.sde" sia il nome di un file di connessione SDE e "GIS.TAX_PARCELS_POLY" sia il nome di una classe di funzionalità memorizzata nello schema "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]
Nota questa soluzione ti dice solo se la geometria è memorizzata nella stessa tabella della classe di caratteristiche e non il tipo di colonna effettivo (ad esempio SDEBINARY, SDELOB, ST_Geometry) anche se credo che possa essere trovato altrove nelle tabelle SDE o Oracle.
Questo potrebbe anche essere ulteriormente ottimizzato creando una funzione Oracle e / o creando una vista sulla SDE.GEOEMTRY_COLUMNS
tabella.
* Testato con ArcSDE 10.2.2 su Oracle 11g (64 bit).