สิ่งนี้ควรเข้าถึงได้มากขึ้นผ่าน 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 บิต)