আর্কপাই ব্যবহার করে ফিল্ডটির নামকরণ?


9

আমাকে কী করতে হবে:

  1. একটি সারণী / বৈশিষ্ট্য শ্রেণীর একটি ক্ষেত্রের নাম পরিবর্তন করুন
  2. সমস্ত ক্ষেত্রে নতুন ক্ষেত্রটি অনুলিপি করুন

এখনও পর্যন্ত আমি @ আর্টওয়ার্ক 21 এর পরামর্শ অনুসারে নিম্নলিখিত কোডগুলি সম্পন্ন করেছি:

import sys
import traceback
import arcpy
from arcpy import env

## ARGUMENTS
# argv[1] = input table/feature class path
# argv[2] = input old field name
# argv[3] = input new field name  

path = sys.argv[1]
oldFieldName = sys.argv[2] 
newFieldName = sys.argv[3] 

env.overwriteOutput = True

fields = arcpy.ListFields(path)
for field in fields:
    if field.aliasName == oldFieldName:
        if not oldFieldName == newFieldName:
            fieldType = field.type
            # Add new field
            arcpy.AddField_management(path, newFieldName, fieldType)
            #Calculates the new field based on old field values
            arcpy.CalculateField_management(path, newFieldName, "!"+oldFieldName+"!", "PYTHON", "")
            # Delete the old field (if necessary)
            arcpy.DeleteField_management(path, oldFieldName)

আমি কিভাবে ম্যাপ করতে পারেন field.typeকরার AddField_managementপদ্ধতি এর ক্ষেত্র প্রকার? ক্ষেত্রটি মাঝখানে স্থানে থাকলে মাঠটি মাঝখানে থেকে মুছে ফেলা হয় এবং সর্বশেষে যোগ করা হয়। ক্ষেত্রের নাম পরিবর্তন করে দেওয়া হয়েছে এমনটি মনে হচ্ছে না।

এই জিনিসগুলি করতে আমাকে আরও সহায়তা করার মতো আরও ভাল কোনও সমাধান আছে কি?


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

2
setNewName (সূচী, new_field_name), কেবলমাত্র নতুন ক্ষেত্রের নাম স্থাপনের জন্য থাকতে হবে, বিদ্যমান নাম পরিবর্তন করে নয়।
আর্টওয়ার্ক

2
কোনও ফিল্ডইনফো অবজেক্ট অন্তর্নিহিত ডেটাতে কিছু করে না, এটি কেবল ক্ষেত্রের বৈশিষ্ট্যগুলির প্রতিনিধিত্ব যা ফিল্ডম্যাপিংস অবজেক্টের মতো নতুন ডেটা তৈরির জন্য নির্দিষ্ট সরঞ্জামগুলির ইনপুট হিসাবে ব্যবহার করা যেতে পারে।
blah238

1
কি old_fieldএকটি পরিবর্তনশীল নাম অথবা পুরাতন মাঠের প্রকৃত নাম? যদি এটি একটি পরিবর্তনশীল নাম হয় তবে বন্ধনী (ভিবি পার্সার) বা বিস্মৃত বিবরণ (পাইথন পার্সার) দিয়ে ভেরিয়েবলের মান মোড়ানোর জন্য আপনার স্ট্রিং ফর্ম্যাটিং বা সংক্ষেপণ ব্যবহার করতে হবে।
blah238

1
সাধারণত একটি উপনাম হ'ল "ডাকনাম" বা ছদ্মনাম । এটি অগত্যা ডাটাবেসে প্রকৃত কলামের নামের সমান নয়।
blah238

উত্তর:


15

ক্ষেত্র যোগ করুন, ক্ষেত্র গণনা করুন, এবং ক্ষেত্র আরকি সরঞ্জামগুলি মুছুন এর সংমিশ্রণটি ব্যবহার করে এটি ব্যবহার করে দেখুন:

if fieldInfo.getFieldName(index) == "status":
    arcpy.AddField_management(layer, "stat", "TEXT", "", "", "50", "",        "NULLABLE", "NON_REQUIRED", "")                     
    arcpy.CalculateField_management(layer, "stat", "!status!", "PYTHON_9.3", "")
    arcpy.DeleteField_management(layer, "status")

1
আমি দুটি ক্ষেত্রের টাইপ একই করতে চাই। তবে ফিল্ড.টাইপ এবং অ্যাডফিল্ড_ম্যানেজমেন্ট পদ্ধতির ফিল্ড_ টাইপের নাম একই নয়। কি করো?
এমি

@ এমি, আমি "টু ফিল্ড টাইপ অভিন্ন" বলতে কী বোঝাতে চাইছি? আপনি "স্ট্যাটাস" এর মানটি চান, "স্ট্যাট" নামে একটি নতুন ক্ষেত্র স্থাপন করতে চান?
শিল্পকর্ম

হ্যাঁ আমি "স্ট্যাটাস" এর মানটি চাই, "স্ট্যাট" নামে নতুন ক্ষেত্র স্থাপন করতে চাই
এমি

fieldInfo.addField ("status", "stat", "VISIBLE", "NONE")পরিবর্তে চেষ্টাও করেছি fieldInfo.setNewName(index, "stat")। তবে আমার কোডে একই ত্রুটি ঘটেছে।
এমি

সারিগুলির জন্য = আরকিপি.উপডেট কার্সার (ইনপুটফিউচারক্লাস), সারিগুলি = আরকিপি চেষ্টা করুন Uঅ্যাপডেট কার্সার (স্তর)
আর্টওয়ার্ক

9

আপনি এখন কোর আর্কজিআইএস ডেস্কটপ জিপি সরঞ্জাম - অল্টার ফিল্ড (ডেটা ম্যানেজমেন্ট) ব্যবহার করে একটি ফিল্ডের নাম পরিবর্তন করতে পারেন । এই সরঞ্জামটি কোনও জিওডাটাবেস টেবিল বা বৈশিষ্ট্য শ্রেণীর জন্য ক্ষেত্রের নামকরণ বা ক্ষেত্রের নাম পরিবর্তন করার ক্ষমতা সরবরাহ করে।

এই সরঞ্জামটি 10.2.1 দিয়ে শুরু হয়


5
এটি কেবল নির্দিষ্ট ডেটা ফর্ম্যাটগুলিকে সমর্থন করে। উল্লেখযোগ্যভাবে, এটি শেফফাইলে একটি ত্রুটি নিক্ষেপ করে।
jpmc26

3

একটি টেবিল বা বৈশিষ্ট্য শ্রেণিতে একটি ক্ষেত্রের নাম পরিবর্তন করতে আমি এখানে বর্ণিত পদ্ধতিটি চেষ্টা করব ।

  1. আর্কম্যাপ শুরু করুন এবং ক্যাটালগ উইন্ডোটি খুলুন।
  2. আপনি যে টেবিলটি পরিবর্তন করতে চান তাতে ডাটাবেস সন্ধান করুন।
  3. সারণীতে ডান ক্লিক করুন এবং বৈশিষ্ট্যগুলি ক্লিক করুন।
  4. ক্ষেত্র ট্যাব ক্লিক করুন।
  5. ক্ষেত্রের নাম কলামে বিদ্যমান পাঠ্যে ক্লিক করুন এবং একটি নতুন নাম টাইপ করুন।

আমি ডেস্কটপ স্ট্যান্ডার্ড 10.1 এসপি 1 এর জন্য আরকিজিআইএস ব্যবহার করে একটি ফাইল জিওডাটাবেস টেবিলটিতে এটি পরীক্ষা করেছি এবং এটি দুর্দান্ত কাজ করেছে।

দুর্ভাগ্যক্রমে, এটি লেখার পরে আমি আরকজিআইএস 10.1 পিডিএফ ফাইলটিতে নতুন কী অনুসন্ধান করেছি এবং খুঁজে পেয়েছি যে এই কার্যকারিতাটি সেই সংস্করণে যুক্ত করা যেতে পারে - এখনও এটি সেখানে আবার পোর্ট করা হয়েছিল কিনা তা দেখতে 10.0 এর সর্বশেষ পরিষেবা প্যাকটি পরীক্ষা করা উপযুক্ত be


1
আমি বিশ্বাস করি এমি একটি আরকি সমাধান খুঁজছেন।
শিল্পকর্ম

আসলে আমি আরকিপি সমাধানটির জন্য অনুসন্ধান করছি
এমি

1
আমার ভুল - আমি ভেবেছিলাম @ ইমি বলেছিলেন "এর চেয়ে ভাল কোনও সমাধান আছে ..." [আমার সাহসী]।
পলিজিও

1

কোডটি নিয়ে দুটি বড় সমস্যা:

  • যদি ডেটা টাইপ কোনও ফিচারলায়ার না হয় তবে প্রোগ্রামটি ফিল্ডিনফোর ম্যানিপুলেশনগুলি বাদ দিবে এবং তারপরে মানটিকে নতুন / নামকরণ ক্ষেত্রের সাথে সেট করার চেষ্টা করবে যা কখনও তৈরি / পুনর্নবীকরণ করা হয়নি was

  • দুটি লাইন:

    gValue = row.getValue("status")

    row.setValue("stat", gValue)

    একটি বড় সমস্যা আছে। যদি আগের কোডটি কাজ করে তবে ক্ষেত্র "স্থিতি" উপস্থিত নেই।


আমি কোডটি যাচাই করেছিলাম এবং এটি একটি বৈশিষ্ট্য স্তর এবং বৈশিষ্ট্য শ্রেণিতে "স্ট্যাটাস" নামে একটি ক্ষেত্র রয়েছে, একই ত্রুটি দেয়
এমি

যদি প্রথম লাইনটি কাজ করে তবে দ্বিতীয় লাইনটি কাজ করবে না।
mhoran_psprep

আপনি স্তরটিতে তথ্য পরিবর্তন করেছেন, তবে ফিচারক্লাস থেকে / লিখে ডেটা পড়ছেন এবং লিখেছেন
mhoran_psprep

1

অ্যাডফিল্ড_ম্যানেজমেন্ট পদ্ধতির ক্ষেত্রের ধরণে আমি ফিল্ডটিপ টাইপ কীভাবে করব?

এই পোস্ট অনুসারে এটি স্বয়ংক্রিয়ভাবে সম্পন্ন হয় ।

ক্ষেত্রটি মাঝখানে স্থানে থাকলে মাঠটি মাঝখানে থেকে মুছে ফেলা হয় এবং সর্বশেষে যোগ করা হয়। ক্ষেত্রের নাম পরিবর্তন করে দেওয়া হয়েছে এমনটি মনে হচ্ছে না। এই জিনিসগুলি করতে আমাকে আরও সহায়তা করার মতো আরও ভাল কোনও সমাধান আছে কি?

আমি যেমন আপনার অন্যান্য প্রশ্নে উল্লেখ করেছি , আপনার কেবলমাত্র অন্যান্য বিকল্প হ'ল পুরো বৈশিষ্ট্য শ্রেণি / সারণিটি ড্রপ করে পুনরায় তৈরি করা বা অন্তর্নিহিত ডিবিএমএসে কলাম সংজ্ঞাটি সংশোধন করা।

আমি তোমাদের অনুমান করা যেতে পারে সমস্ত ব্যবহারকারী কলাম মুছে ফেলতে এবং তাদের পছন্দসই অনুক্রমে পুনরায় তৈরি কিন্তু যে একটু পাগল আছে। এই উত্তরের স্ক্রিপ্টটি হুবহু এটি করে, আপনি সম্ভবত এটি আপনার প্রয়োজনের সাথে খাপ খাইয়ে নিতে পারেন।


ক্ষেত্র.প্রকার = "স্ট্রিং" এর সময়, আমাদের অ্যাডফিল্ড_ম্যানেজমেন্টে "পাঠ্য" পাস করতে হবে। আমি এটি চেক করেছি।
এমি

তুমি কি নিশ্চিত? এটি আমার জন্য 10.0 এসপি 5 এ কাজ করে।
blah238

এটি আমাকে ত্রুটি দেয়: আরকিজিস্ক্রিপ্টিং। এক্সিকিউটিআরর: কার্যকর করতে ব্যর্থ। প্যারামিটারগুলি বৈধ নয়। ত্রুটি 000800: মানটি TEXT এর সদস্য নয় ফ্লোট | ডাবল | ছোট | দীর্ঘ | তারিখ | ব্লব | রাস্টার | GUID। (অ্যাডফিল্ড) কার্যকর করতে ব্যর্থ।
এমি

আপনি কোন সংস্করণ / এসপি এ?
blah238

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