Це має бути більш доступним через ArcPy, але тим часом ми можемо скористатися таблицями реєстру SDE, щоб знайти відповідь. SDE.GEOMETRY_COLUMNS
Таблиця містить імена класів об'єктів F_TABLE_NAME
, їх власника схеми F_TABLE_SCHEMA
, і їх відповідної геометрії імені таблиці G_TABLE_NAME
.
Якщо назви таблиць ознак та геометрії однакові, то геометрія класу характеристик зберігається в тій самій таблиці, що і атрибути; в іншому випадку геометрія зберігається в окремій таблиці функцій (він же "F" таблиця).
Отже наш SQL-запит був би таким:
SELECT COUNT(*) AS GEOMETRY_IN_FEATURE_TABLE
FROM SDE.GEOMETRY_COLUMNS
WHERE F_TABLE_SCHEMA || '.' || G_TABLE_NAME = :featureClassName
Для ArcPy припустимо, що "GEODATABASE.sde" - це ім'я файлу з'єднання SDE, а "GIS.TAX_PARCELS_POLY" - ім'я класу функцій, що зберігається в схемі "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]
Зверніть увагу, що це рішення говорить лише про те, що геометрія зберігається в тій самій таблиці, що і клас об’єктів, а не фактичний тип стовпця (наприклад, SDEBINARY, SDELOB, ST_Geometry), хоча я вважаю, що їх можна знайти деінде в таблицях SDE або Oracle.
Це також можна додатково оптимізувати, створивши функцію Oracle та / або створивши подання на SDE.GEOEMTRY_COLUMNS
стіл.
* Тестовано з ArcSDE 10.2.2 на Oracle 11g (64-розрядний).