Isso deve ser mais acessível através do ArcPy, mas, enquanto isso, podemos tirar proveito das tabelas de registro da SDE para encontrar a resposta. A SDE.GEOMETRY_COLUMNS
tabela contém os nomes das classes de recurso F_TABLE_NAME
, seu proprietário do esquema F_TABLE_SCHEMA
e o nome da tabela de geometria correspondente G_TABLE_NAME
.
Se os nomes das tabelas de recurso e geometria forem os mesmos, a geometria da classe de recurso será armazenada na mesma tabela que os atributos; caso contrário, a geometria é armazenada em uma tabela de recursos separada (também conhecida como tabela "F").
Portanto, nossa consulta SQL seria algo como:
SELECT COUNT(*) AS GEOMETRY_IN_FEATURE_TABLE
FROM SDE.GEOMETRY_COLUMNS
WHERE F_TABLE_SCHEMA || '.' || G_TABLE_NAME = :featureClassName
Para o ArcPy, suponha que "GEODATABASE.sde" seja o nome de um arquivo de conexão SDE e "GIS.TAX_PARCELS_POLY" seja o nome de uma classe de recurso armazenada no 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]
Observe que esta solução informa apenas se a geometria está armazenada na mesma tabela que a classe de recurso e não o tipo de coluna real (por exemplo, SDEBINARY, SDELOB, ST_Geometry), embora eu acredite que possa ser encontrado em outras partes das tabelas SDE ou Oracle.
Isso também pode ser otimizado, criando uma função Oracle e / ou criando uma exibição na SDE.GEOEMTRY_COLUMNS
tabela.
* Testado com ArcSDE 10.2.2 no Oracle 11g (64 bits).