অন্য ডিবিএফ টেবিলের মান সহ একটি শেপফাইল বৈশিষ্ট্য টেবিল আপডেট করুন


10

আমি এখানে যা করার চেষ্টা করছি তা বোঝানোর চেষ্টা করি:

আমার একই ক্ষেত্রগুলির সাথে একটি শেফফাইল এবং একটি স্বতন্ত্র ডিবিএফ টেবিল রয়েছে। ডিবিএফ সারণীতে সমস্ত ক্ষেত্র পপুলেটেড তবে শেফফিল বৈশিষ্ট্য টেবিলের মধ্যে একটি মাত্র, এর নামকরণ করুন "ওয়ানফিল্ড"। আমি যা করতে চাই তা হ'ল "ওয়ানফিল্ড" (শেফিল) থেকে প্রাপ্ত মানগুলি "ওয়ানফিল্ড" (ডিবিএফ টেবিল) এর মানগুলির সমান এবং যদি তাই হয়, তবে শূন্যপথের বিশিষ্ট টেবিলে বাকী ফাঁকা ক্ষেত্রগুলি একটির সাথে স্থাপন করতে স্বতন্ত্র ডিবিএফ টেবিলে।

এই মুহুর্তে আমি চেষ্টা করছি স্বাধীন ডিবিএফ টেবিল থেকে আকৃতিটি ফাইলের বৈশিষ্ট্য টেবিলের মানগুলি অনুলিপি করার জন্য তবে আমি আটকে আছি ( দয়া করে আমাকে একটা হাত দিতে পারেন?

কোডটি এখানে:

import arcpy

table = "link/to/table.dbf"
fc = "link/to/shapefile.shp"

# Create a search cursor

rowsTable = arcpy.SearchCursor(table)

# Create an update cursor

rowsFc = arcpy.UpdateCursor(fc) 

for row in rowsTable:
    row = row.getValue("OneField")
    valueTable = row
    for row in rowsFc:
        row = row.setValue("OneField", valueTable)
        rowsFc.updateRow(row)
        row = rowsFc.next()
    row = rowsTable.next()    

del row, rowsFc, rowsTable

আপনাকে অনেক ধন্যবাদ


1
আপনি আপনার মূল প্রশ্নটি সম্পাদনা করতে, তথ্য সংশোধন করতে বা যুক্ত করতে পারেন।
ব্র্যাড নেসোম

আর্কিপি সহ সর্বাধিক () () এর সমস্ত লাইনগুলি পুনরুক্ত করার চেষ্টা করে দেখুন, আপনি তাদের "লুপ" এর জন্য করেন, আপনি করেন না।
পূর্ববর্তী

উত্তর:


3

কিউজিআইএস এটি "অ্যাট্রিবিউট বাই অ্যাট্রিবিউট" সরঞ্জামটি ঠিক কী করছে। এটি একটি শেফফাইল এবং একটি ডিবিএফ ফাইল নেয় (বা একটি দ্বিতীয় শেফফিল) এবং তাদের বৈশিষ্ট্য সারণীতে যোগ দেয়। টুল, পাইথন লেখা আছে যাতে আপনি সবকিছু হবে তুমি এখানে প্রয়োজন: http://trac.osgeo.org/qgis/browser/trunk/qgis/python/plugins/fTools/tools/doJoinAttributes.py


3

কোড দৃষ্টিকোণ থেকে দেখে মনে হচ্ছে আপনি গুচ্ছ (~ 4) বিভিন্ন জিনিসের জন্য "সারি" ব্যবহার করছেন, যার মধ্যে কিছু অপ্রয়োজনীয় বলে মনে হয়। আমি আরকি দিয়ে বেশি কিছু করি না, তবে আমি কল্পনা করতাম যে এটির মতো আরও ভাল কাজ করবে। যদি এটি হয়ে থাকে তবে আপনি আপনার এফসি-র পুরো ওয়ানফিল্ড কলামটি শেষ করে আপনার টেবিল থেকে ওয়ানফিল্ডের সর্বশেষ মানটি সহ লিখেছেন:

for rowT in rowsTable:
    valueTable = rowT.getValue("OneField")
    for rowF in rowsFc:
        rowF.setValue("OneField", valueTable)
        rowsFc.updateRow(rowF)
        rowF = rowsFc.next()
    rowT = rowsTable.next() 

নিউহাউসর, আপনাকে অনেক ধন্যবাদ, আপনি এটি কীভাবে রেখেছিলেন তা ভালভাবে কাজ করে
বোগদান প্যালেড

3

আমি নিজে চেষ্টা করার জন্য বেশ ভাল সময় ব্যয় করেছি এবং আমার এমন কিছু কাজ হয়েছে যা কাজ করে। এটি কার্যকর করতে আমার কোডটি এখানে দেখুন।

শাখা সহ মানগুলির মাধ্যমে পুনরাবৃত্তি করে কীভাবে বৈশিষ্ট্য শ্রেণি আপডেট করবেন?

আপনাকে এমন একটি তালিকা তৈরি করতে হবে যাতে সমস্ত ক্ষেত্র রয়েছে যাতে আপনি সেগুলির মাধ্যমে পুনরাবৃত্তি করতে পারেন।


2

একটি ডিবিএফ থেকে কোনও শেফফাইলে ডেটা স্থানান্তর করার জন্য আমার পদ্ধতি। হয় (অবশ্যই আমি একটি জিআই সফ্টওয়্যার এর ভিতরে এটি করতে পছন্দ করি) শেবাফাইলে ডিবিএফ-এ যোগ দিন।

এই মুহুর্তে আমি সাধারণত এমন গুণাবলী নির্বাচন করি যা শূন্য নয় (আমি এটি দ্বিতীয় টেবিলের আইডি ক্ষেত্রে করি)। যদি তারা শূন্য না হয় তবে তারা মিলবে।

এটি সম্পন্ন হয়ে গেলে আপনি শেফফিল.এনফিল্ড <> টেবিল.োনফিল্ডের মাধ্যমে মানগুলি নির্বাচন করতে পারেন।

তারপরে আপনার গণনাটি শেফফাইলে চালান।


-1

আপনার প্রশ্নের উত্তর না দেওয়ার জন্য দুঃখিত, তবে আমি অবশ্যই এটির পরিবর্তে ডিবি-পরিবেশে এটি করব। বিশেষত যদি এটি প্রচুর ডেটা হয় তবে সম্ভবত এটি খুব দ্রুত হবে।

আপনি যদি উদাহরণস্বরূপ শেগফিল এবং ডিবিএফকে কোনও পোস্টজিআইএস ডিবিতে লোড করেন তবে আপনার ক্যোয়ারীটি এরকম কিছু দেখতে পারে:

CREATE TABLE new_table AS
SELECT a.the_geom, a.populated_field, b.populated_field2, b.populated_field3
FROM shape_table a LEFT JOIN dbf_table b ON a.populated_field=b.populated_field1;

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

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