यह आर्कपी के माध्यम से अधिक सुलभ होना चाहिए लेकिन इस बीच हम जवाब खोजने के लिए एसडीई रजिस्ट्री तालिकाओं का लाभ उठा सकते हैं। SDE.GEOMETRY_COLUMNS
सारणी सुविधा वर्गों के नाम शामिल हैं F_TABLE_NAME
, उनके स्कीमा मालिक F_TABLE_SCHEMA
है, और उनके इसी ज्यामिति तालिका नाम G_TABLE_NAME
।
यदि फ़ीचर और ज्योमेट्री टेबल के नाम समान हैं, तो फ़ीचर क्लास की ज्योमेट्री को उसी तालिका में संग्रहीत किया जाता है, जैसे कि विशेषताएँ; अन्यथा ज्यामिति को एक अलग फीचर टेबल (उर्फ "एफ" टेबल) में संग्रहित किया जाता है।
तो हमारी SQL क्वेरी कुछ इस तरह होगी:
SELECT COUNT(*) AS GEOMETRY_IN_FEATURE_TABLE
FROM SDE.GEOMETRY_COLUMNS
WHERE F_TABLE_SCHEMA || '.' || G_TABLE_NAME = :featureClassName
आर्कपी के लिए, मान लें कि "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.GEOEMTRY_COLUMNS
टेबल पर एक दृश्य बनाकर इसे और भी अनुकूलित किया जा सकता है ।
* Oracle 11g (64-बिट) पर ArcSDE 10.2.2 के साथ परीक्षण किया गया।