arcpy / pythonからストレージタイプ(ST_Geom / Oracle)を判別する方法


10

一部のフィーチャクラスをSDELOB(または一部の古いバイナリ形式)からST_Geometryに移行しています。ESRI Migrate Storage Toolを使用するようにarcpyスクリプトを作成するときに、何かがすでにST_Geomであるかどうかをテストしたいと思います...データベースにフックを書き込む以外に、comtypesパッケージなどを使用して、誰でも簡単なことを知っていますか?これを決定する方法?

回答:


6

PolyGeoの回答をフォローアップするために、Describeオブジェクトは本来あるべき場所ですが、そうではありません。ここにアクセスするには、データベースクエリが最善の方法です。

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"


1

これは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など)は通知しないことに注意してください。

これは、Oracle関数を作成したり、SDE.GEOEMTRY_COLUMNSテーブルにビューを作成したりして、さらに最適化することもできます。

* Oracle 11g(64ビット)上のArcSDE 10.2.2でテスト済み。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.