ফাইল জিওডাটাবেজে ফিচারের ডেটাসেটের অন্তর্ভুক্ত সমস্ত ফিচার ক্লাস তালিকাভুক্ত করছেন?


24

পাইথন থেকে আমি কীভাবে ফাইলের জিওডাটাবেজে (* .gdb) সমস্ত বৈশিষ্ট্য শ্রেণীর একটি তালিকা বানাতে পারি, এর ভিতরে ফিচার ডেটাসেট সহ? মান উদাহরণস্বরূপ শুধুমাত্র তালিকা geodatabase উপরের স্তরে শ্রেণীর বৈশিষ্ট্য:

import arcgisscripting, os
gp = arcgisscripting.create(9.3)

gp.workspace = 'd:\scratch.gdb'
fcs = gp.ListFeatureClasses()

for fc in fcs:
    print fc

আপনার উত্তরটি কোন আর্কজিআইএস ডেস্কটপ সংস্করণে প্রযোজ্য তা নির্দেশ করুন (আমি 9.3 এর সন্ধান করছি তবে আমরা পাশাপাশি সমস্ত সংস্করণ এক জায়গায় সংগ্রহ করতে পারি)।


1
সম্পর্কিত সম্পর্কিত তবে আরও হালনাগাদ প্রশ্নোত্তর (ব্যবহার সহ arcpy.da.Walk) কীভাবে জিআইএস তালিকা তৈরি করবেন?
blah238

উত্তর:


34

আরকিসিস 10 এর এই রুটিনটি একটি জিডিবির অভ্যন্তরে সমস্ত এফসিএস (কোনও বৈশিষ্ট্য ডেটাসেটের অভ্যন্তরে বা স্ট্যান্ডেলোন OR) প্রদান করে। কেবলমাত্র আপনার আরকিপি.এনভি.ওয়ার্কস্পেস সেট করুন তারপরে লুপের জন্য একটি করুন

def listFcsInGDB():
    ''' set your arcpy.env.workspace to a gdb before calling '''
    for fds in arcpy.ListDatasets('','feature') + ['']:
        for fc in arcpy.ListFeatureClasses('','',fds):
            yield os.path.join(arcpy.env.workspace, fds, fc)

সুন্দর এবং পরিষ্কার!
চাদ কুপার

1
ধন্যবাদ গোছুলা! আমি প্রথমবারের মতো ফলন বিবরণীর মুখোমুখি হয়েছি, এটি বের করার জন্য কিছুটা পড়তে হয়েছিল। আপনি নকল করতে ভুলে গেছেন আপনার নমুনা আরকিস ভি 10 এর জন্য।
ম্যাট উইলকি

1
দুঃখিত, হ্যাঁ এটি 10.x এর জন্য is এবং হ্যাঁ, ফলন দুর্দান্ত, পরিষ্কার কোড তৈরি করে।
গেটছুলা

ধন্যবাদ গেটচুলা, আমি জানি এটি একটি পুরানো পোস্ট তবে আমি প্রতি সপ্তাহে যুক্ত হওয়া একটি ডাটাবেস পরিচালনার জন্য এটি খুব সহায়ক বলে মনে করেছি। আমি কি আপনাকে জিজ্ঞাসা করতে পারি যে + ['']: তৃতীয় লাইনে কী সম্পাদন করে?
ডিলান ওয়ারবার্গ

1
আমি আরকিপি.লিস্টফিটের ক্লাসগুলিকে আরকপির একটি লুপের ভিতরে বলি ist.লিস্টড্যাটাসেটস। আমাকে এমন বৈশিষ্ট্যযুক্ত ক্লাসগুলি অন্তর্ভুক্ত করতে হবে যা কোনও বৈশিষ্ট্য ডেটাসেটের মধ্যে নেই (ওরফে স্ট্যান্ডেলোন বৈশিষ্ট্য শ্রেণি), সুতরাং আমি '' ডেটাসেটের তালিকায় '' যুক্ত করি যার কারণে তালিকা-ফিচারক্লাসগুলি fd ভেরিয়েবল হিসাবে '' দিয়ে ডাকা হয়।
গেচুলা

12

আমি ব্যবহার শেষ পর্যন্ত gotchula এর উত্তর কিন্তু ফলন ছাড়া কারণ আমি সাধারণত পুনঃ-ব্যবহার করে এফসি হ্যান্ডলগুলি তৈরি করেছেন এবং ফলন এর একবার ব্যবহার করা হয় তারপর বাতিল বেশি সহজ আমাকে পড়তে ও বুঝতে কি জন্য fcs.append()চেয়ে করছে fcs = yield(...)

def listFcsInGDB(gdb):
    ''' list all Feature Classes in a geodatabase, including inside Feature Datasets '''
    arcpy.env.workspace = gdb
    print 'Processing ', arcpy.env.workspace

    fcs = []
    for fds in arcpy.ListDatasets('','feature') + ['']:
        for fc in arcpy.ListFeatureClasses('','',fds):
            #yield os.path.join(fds, fc)
            fcs.append(os.path.join(fds, fc))
    return fcs

gdb = sys.argv [1]
fcs = listFcsInGDB(gdb)
for fc in fcs:
    print fc            

ফলাফল:

d:\> python list-all-fc.py r:\v5\YT_Canvec.gdb
Processing  r:\v5\YT_Canvec.gdb
Buildings_and_structures\BS_2530009_0
Buildings_and_structures\BS_2380009_2
Buildings_and_structures\Tower
Buildings_and_structures\Underground_reservoir
...

এটি এখন মডিউলটিতে আমি আর্কপ্লাস * বলে। আপনার অন্যান্য কোড বা পাইথনপথ এবং তারপরে রাখুন:

import arcplus
fcs = arcplus.listAllFeatureClasses('d:\default.gdb')
for fc in fcs:
    print "magic happens with: ", fc

আর্কপ্লাস ওয়াইল্ডকার্ড ফিল্টারিং যোগ করে; "হাইড্রো" সমন্বিত বৈশিষ্ট্য ডেটাসেটের মধ্যে "এইচডি_" দিয়ে শুরু হওয়া কেবল বৈশিষ্ট্যযুক্ত ক্লাসগুলির প্রক্রিয়া করতে

fcs = arcplus.listAllFeatureClasses(gdb, fd_filter='*Hydro*', fc_filter='HD_*')

। * এখন গিথুবে, ১০.০ এর জন্য আপগ্রেড করা হয়েছে আর্কগিস 9.3 এর জন্য এখানে দেখুন


1
নিশ্চিত না যে আমি yieldএখানে ব্যবহার এড়ানো পিছনে যুক্তি বুঝতে পেরেছি । একটির জন্য, আপনি যে "হ্যান্ডলগুলি" উল্লেখ করেছেন সেগুলি হ্যান্ডেলগুলি মোটেই নয়, সেগুলি কেবল স্ট্রিং। এবং যদি আপনার উদ্দেশ্য একাধিক পুনরাবৃত্তির জন্য ফিচার ক্লাসগুলির তালিকা চারপাশে রাখা হয় তবে আপনি এটিকে এখনও জেনারেটরের ফাংশন হিসাবে রাখতে পারেন এবং কেবল এটি "অনুকূলকরণ" করতে পারেন: my_list = list(generator_function(args))এটি জেনারেটরের মূল্যায়ন করে ফলাফলকে একটি তালিকা পরিবর্তনশীল হিসাবে সংরক্ষণ করে।
blah238

@ ব্লাহ 238: ওহ। আমার ধারণা আমি তখনও ফলন করি না। আমি বুঝতে চাইছি যে একটি বিবৃতি এর fcs = fcs.append(...)চেয়ে আরও দ্রুত কী করছে fcs = list(yield(...))
ম্যাট উইলকি 26'14

8

আমি বুঝতে পেরেছি যে এই প্রশ্নটি 9.3 ট্যাগ করা আছে, তবে যে কেউ 10.1 এর পরে একই উত্তর খুঁজছেন আরকিপি.ডি.ওয়াল্ক ব্যবহার করা ভাল । এটি তালিকাডেটসেটস / ফিচার ক্লাস / রাস্টার / ইত্যাদির চেয়ে দ্রুত এবং আরও নির্ভুল।

import arcpy
import os

for root, dirs, datasets in arcpy.da.Walk('d:\scratch.gdb'):
    for ds in datasets:
        print os.path.join(root, ds)

অজগরের হাঁটার মতোই ওয়াক ফাংশনটি কাজ করে । এটি প্রদত্ত পথে এবং প্রতিটি পুনরাবৃত্তিতে ডিরেক্টরিগুলির মাধ্যমে পুনরাবৃত্তি করে, রুট ডিরেক্টরিটির সম্পূর্ণ পথকে উপস্থাপন করে এবং ডায়ারস এবং ডেটাসেটগুলি অন্তর্ভুক্ত সাব-ডিরেক্টরি এবং ফাইলগুলির তালিকা।

জিওডাটাবেস দিয়ে যাওয়ার সময়, বৈশিষ্ট্য ডেটাসেটগুলি ডিরেক্টরিগুলির মতো একইরকম আচরণ করা হয়। আপনি যদি কেবল মূল ফোল্ডারে ডেটাসেট এবং বৈশিষ্ট্যযুক্ত ডেটাসেটগুলি তালিকাবদ্ধ করতে চান এবং বিষয়বস্তুগুলি দেখতে বৈশিষ্ট্যটি ডেটাসেটগুলি না খোলেন, আপনি এটি করতে পারেন:

for root, dirs, datasets in arcpy.da.Walk('d:\scratch.gdb'):
    print 'feature datasets:'
    for fds in dirs:
        print os.path.join(root, fds)
    print 'datasets:'
    for ds in datasets:
        print os.path.join(root, ds)
    break

আমি প্রদত্ত হিসাবে দ্রুত গ্রহণ করব; আপনি "আরও নির্ভুল" যদিও প্রসারিত করতে পারেন? ধন্যবাদ।
ম্যাট উইলকি

তালিকাডেটসেটস, তালিকাসমূহের ক্লাসিস ইত্যাদি সর্বদা সঠিক ডেটাসেটগুলি ফেরত দেয় না। এছাড়াও, আপনি এসডিই এবং ফাইল জিডিবি-র মধ্যে পৃথক ফলাফল পান। আমি সঠিক সমস্যাটি মনে করতে পারি না, তবে আমরা আরকিপি.লিস্ট ব্যবহার বন্ধ করে দিয়েছি ... কারণ আমরা ফলাফলগুলিতে বিশ্বাস করতে পারিনি।
jon_two

5

ListDatasets পদ্ধতি আমার মনে আপনি এ খুঁজছেন হয়। এই এফজিডিবিতে এটিতে একটি এফডি রয়েছে যার নাম "ওয়েলস" এবং এটিতে এটিতে 3 টি এসসি রয়েছে। 9.3.1 এর জন্য:

C:\WINDOWS\system32>python
Python 2.5.1 (r251:54863, Apr 18 2007, 08:51:08) [MSC v.1310 32 bit (Intel)] on
win32
Type "help", "copyright", "credits" or "license" for more information.
>>> import arcgisscripting
>>> gp=arcgisscripting.create(9.3)
>>> d='c:\data\Third_Party_Wells_PRD.gdb'
>>> gp.workspace = d
>>>
>>> fds=gp.ListDatasets('','Feature')
>>> for fd in fds:
...     print fd
...
Wells
>>> for fd in fds:
...     gp.workspace=d + '/' + fd
...     fcs=gp.ListFeatureClasses()
...     for fc in fcs:
...             print fc
...
Third_Party_Wells_BHL
Third_Party_Wells_LAT
Third_Party_Wells_SHL
>>>
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.