आर्कपी / अजगर से भंडारण प्रकार (ST_Geom / Oracle) का निर्धारण कैसे करें


10

हम SDELOB (या कुछ पुराने बाइनरी प्रारूप) से कुछ फीचर कक्षाओं को ST_Geometry पर माइग्रेट कर रहे हैं। जैसा कि हम ESRI माइग्रेट स्टोरेज टूल का उपयोग करने के लिए अपनी आर्कपी स्क्रिप्ट लिखते हैं, हम यह परीक्षण करना चाहते हैं कि क्या पहले से ही कुछ ST_Geom है या नहीं ... डेटाबेस में हुक लिखने के अलावा, कॉम्पीपेस पैकेज आदि का उपयोग करते हुए, क्या किसी को एक सरल का पता है इसे निर्धारित करने का तरीका?

जवाबों:


6

PolyGeo के उत्तर का अनुसरण करने के लिए, वर्णन करने वाली वस्तु निश्चित रूप से वह स्थान है जहाँ यह होना चाहिए, लेकिन यह नहीं है। डेटाबेस क्वेरीज़ यहां जाने का सबसे अच्छा तरीका हो सकता है।

हालाँकि, यदि आपके पास SDE कमांड-लाइन बायनेरिज़ है, तो एक और विकल्प कुछ ऐसा करने की कोशिश करेगा (हाँ यह हैक है, लेकिन काम कर सकता है):

import subprocess
output = subprocess.check_output("sdelayer -o describe_long -s servername -D dbname -u username -p password -l tablename,columname")
for line in output:
    if line.find("Layer Type") == 0:
        storagetype = line.partition(":")[2].strip() # Should be something like "SDE-BINARY" or "Extended SQL Type/ST_GEOMETRY"

2

यह अच्छा होगा यदि वर्णन वस्तु इस तक पहुंचने में सक्षम हो।

यह अब एक आर्किस आइडिया (जिस पर आप मतदान कर सकते हैं) के रूप में प्रस्तुत किया गया है ।


1

यह आर्कपी के माध्यम से अधिक सुलभ होना चाहिए लेकिन इस बीच हम जवाब खोजने के लिए एसडीई रजिस्ट्री तालिकाओं का लाभ उठा सकते हैं। 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 के साथ परीक्षण किया गया।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.