আরকিপি / পাইথন থেকে কীভাবে স্টোরেজ প্রকার (ST_Geom / Oracle) নির্ধারণ করবেন


10

আমরা এসডিইএলওবি (বা কিছু পুরানো বাইনারি ফর্ম্যাট) থেকে এসT_ জ্যামিতিতে কিছু বৈশিষ্ট্য শ্রেণি স্থানান্তর করছি। ইএসআরআই মাইগ্রেট স্টোরেজ টুলটি ব্যবহার করার জন্য আমরা যখন আমাদের আরকি স্ক্রিপ্টটি লিখি আমরা ইতিমধ্যে কিছু এস এস জিওম কিনা তা পরীক্ষা করে দেখতে চাই ... ডাটাবেজে হুক লেখার বাইরে, কমপাইটস প্যাকেজ ইত্যাদি ব্যবহার করে, কেউ কি সাধারণ সম্পর্কে জানেন? এটি নির্ধারণ করার উপায়?

উত্তর:


6

পলিজিওর উত্তরে অনুসরণ করতে, বর্ণনা বস্তুটি অবশ্যই এটি কোথায় হওয়া উচিত , তবে তা নয়। ডাটাবেস কোয়েরিগুলি এখানে যাওয়ার সর্বোত্তম উপায় হতে পারে।

যদিও, আপনার যদি এসডিই কমান্ড-লাইন বাইনারি থাকে, তবে অন্য বিকল্পটি হ'ল এটির মতো কিছু করার চেষ্টা করা হবে (হ্যাঁ এটি হ্যাক, তবে কাজ করতে পারে):

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

এটি আরকিপির মাধ্যমে আরও অ্যাক্সেসযোগ্য হওয়া উচিত তবে এর মধ্যে আমরা উত্তরটি খুঁজতে এসডিই রেজিস্ট্রি টেবিলগুলির সুবিধা নিতে পারি। SDE.GEOMETRY_COLUMNSটেবিল বৈশিষ্ট্য ক্লাস নাম ধারণ করে F_TABLE_NAME, তাদের স্কিমা মালিক F_TABLE_SCHEMA, আর তাদের সংশ্লিষ্ট জ্যামিতি সারণী নাম G_TABLE_NAME

যদি বৈশিষ্ট্য এবং জ্যামিতি সারণীর নাম একই হয় তবে বৈশিষ্ট্য বর্গের জ্যামিতি বৈশিষ্ট্য হিসাবে একই টেবিলে সংরক্ষণ করা হয়; অন্যথায় জ্যামিতি একটি পৃথক বৈশিষ্ট্য সারণীতে (ওরফে "এফ" টেবিল) সঞ্চিত থাকে।

সুতরাং আমাদের এসকিউএল কোয়েরি কিছু হবে:

SELECT COUNT(*) AS GEOMETRY_IN_FEATURE_TABLE
FROM SDE.GEOMETRY_COLUMNS
WHERE F_TABLE_SCHEMA || '.' || G_TABLE_NAME = :featureClassName

আর্কপাইয়ের জন্য, ধরে নিন যে "জিওডিটিএবিএসইএসডি" একটি এসডিই সংযোগ ফাইলের নাম এবং "জিআইএস.টিএক্সএপিএসসিএআরএলসিপিএলওয়াই" "জিআইএস" স্কিমাতে সঞ্চিত বৈশিষ্ট্য শ্রেণীর নাম:

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টেবিলে একটি ভিউ তৈরি করে আরও অনুকূলিত করা যেতে পারে ।

* ওরাকল 11 জি (-৪-বিট) এ আর্কএসডিই 10.2.2 দিয়ে পরীক্ষিত।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.