আর্কম্যাপের ভিতরে থাকা পাইথন স্ক্রিপ্টগুলি বনাম যেগুলি চলে?


10

আমি কাজের জন্য পাইথন স্ক্রিপ্টিংয়ে প্রবেশ শুরু করছি।

আমি বর্তমানে একটি প্রক্রিয়া স্বয়ংক্রিয় করার জন্য একটি স্ক্রিপ্ট তৈরি করছি।

মূলত, এটি ব্যবহারকারীর ক্লায়েন্টের নাম জিজ্ঞাসা করে, উপলভ্য হলে প্রজেকশন পায়, ক্লায়েন্টের জন্য ডিরেক্টরি ড্রাইভ করে: ক্লায়েন্টের জন্য নির্দিষ্ট ফাইল জিওডাটাবেস তৈরি করে, প্রয়োজনীয় ডেটাसेट তৈরি করে এবং ক্লায়েন্টের ডেটা নির্দিষ্ট করে ফিচার ক্লাস তৈরি করে। শেষ পর্যন্ত, এটি প্রতিটি বৈশিষ্ট্য শ্রেণিতে প্রয়োজনীয় ক্ষেত্রগুলি এবং সম্ভবত কিছু অন্যান্য জিনিস যুক্ত করবে।

আমি এটি আরক্যাপের জন্য পাইথন স্ক্রিপ্টিংয়ের যথাযথ শিষ্টাচারটি না জেনে সত্যিই শুরু করেছি। তবে আমি এ পর্যন্ত যা তৈরি করেছি তা বিশ্বাস করি কেবল আর্কম্যাপের বাইরে চলে যাবে।

এটা কি গ্রহণযোগ্য?

আরকিপি.গেটেমেটারেস্টেক্সট () এর মাধ্যমে ব্যবহারকারীর ইনপুট পাওয়ার পরিবর্তে, যা আমি সবেমাত্র জানতে পেরেছি, আমি কাঁচা-ইনপুট () ব্যবহার করছি।

এটা ঠিক আছে?

এটি কাজ করে, আমি নিশ্চিত নই যে এটি স্ক্রিপ্টিং করার উপযুক্ত উপায় কিনা।

আমার এখন পর্যন্ত কোডটি এখানে।

import sys
import arcpy
import os

#Records name of the client
client = raw_input("Enter the name of the client: (letters and underscores only) \n")

#Records filepath of client to be created
clientpath = "C:/" + client

#Inquires if projection file exists
projection = raw_input("Is there a .prj or .shp available with correct projection? Y or N \n")

#Records the projection location if available
if projection.upper() == "Y":
    spatialr = raw_input("Drag the .prj or .shp here to record the filepath \n")
    nspatialr = spatialr.replace('"', "")
elif projection.upper() == "N":
    alert = raw_input("You must add the spatial reference manually, hit enter to continue. \n")
elif projection.upper() != "N" or "Y":
    exit = raw_input("That is not a valid response. Try again. \n")
    sys.exit()

#Checks if client folder exists; if not, creates one
if not os.path.exists(clientpath):
    os.makedirs(clientpath)

#Variable for file geodatabase location
FGBpath = clientpath + "/" + client + ".gdb"

#Checks if client file geodatabase exists; if not, creates one
if not arcpy.Exists(FGBpath):
    arcpy.CreateFileGDB_management(clientpath, client)

#Variable for dataset location
FDatasetpath = clientpath + "/" + client + ".gdb" + "/Network"

#Checks if dataset exists; if not, creates one
if not arcpy.Exists(FDatasetpath):
    if projection.upper() == "Y":
        arcpy.CreateFeatureDataset_management(FGBpath, "Network", nspatialr)
    elif projection.upper() == "N":
        arcpy.CreateFeatureDataset_management(FGBpath, "Network")

#Variable for cable feature class location
FCcablepath = clientpath + "/" + client + ".gdb" + "/Network" + "/cable"

#Checks if cable feature class exists; if not, creates one
if not arcpy.Exists(FCcablepath):
    if projection.upper() == "Y":
        arcpy.CreateFeatureclass_management (FDatasetpath, "cable", "POLYLINE", "", "", "", nspatialr)
    elif projection.upper() == "N":
        arcpy.CreateFeatureclass_management (FDatasetpath, "cable", "POLYLINE")

#Variable for splice point feature class location
FCsplicepath = clientpath + "/" + client + ".gdb" + "/Network" + "/splice_point"

#Checks if splice point feature class exists; if not, creates one
if not arcpy.Exists(FCsplicepath):
    if projection == 'Y' or projection == 'y':
        arcpy.CreateFeatureclass_management (FDatasetpath, "splice_point", "POINT", "", "", "", nspatialr)
    elif projection == 'N' or projection == 'n':
        arcpy.CreateFeatureclass_management (FDatasetpath, "splice_point", "POINT")

exit = raw_input("\n\n File geodatabase, dataset, and the cable \n and splice point feature classes successfully created. \n\n Hit enter to exit.")

প্রয়োজনীয় ক্ষেত্রগুলি যুক্ত করার মতো আমার এখনও কিছু কাজ বাকি আছে।

উত্তর:


18

আপনি কীভাবে আপনার ইনপুটগুলি পাবেন তা শেষ ব্যবহারকারী কে হবেন তার উপর 100% নির্ভর করে তবে আপনি ঠিক বলেছেন, আপনি আর্কম্যাপে কাঁচা-ইনপুট মোটেও ব্যবহার করতে পারবেন না। আপনি যদি স্ক্রিপ্টটি ব্যবহার করে একমাত্র হয়ে যান তবে আপনার ইনপুটগুলি কাঁচা_পিন্ডের মাধ্যমে পাওয়ার, বা আপনার স্ক্রিপ্টে ভেরিয়েবল হিসাবে হার্ড কোডিং পাথগুলি নিয়ে কোনও ভুল নেই। যাইহোক, অন্য কেউ স্ক্রিপ্ট যে বা কোন স্ক্রিপ্টিং অভিজ্ঞতা থাকতে পারে আবার নাও পারে ব্যবহার করা হবে, এটা শ্রেষ্ঠ ব্যবহার করা getParameterAsText () এবং একটি স্ক্রিপ্ট হাতিয়ার হিসেবে আপনার স্ক্রিপ্টটি বাস্তবায়ন ArcMap হবে। একটি স্ক্রিপ্ট সরঞ্জাম তৈরি করা ব্যবহারকারীর একটি ইন্টারফেস দেবে যা বেশিরভাগ ESRI সরঞ্জামের (যেমন বাফার ইত্যাদির মতো স্ট্যান্ডার্ড সরঞ্জাম ইত্যাদির দ্বারা ব্যবহৃত) এর অনুরূপ।

একটি বিষয় উল্লেখযোগ্য হ'ল আপনার কাঁচা_আনপুটগুলি যেভাবে ডিজাইন করেছেন তা ব্যবহারকারী এবং স্ক্রিপ্টের মধ্যে ধাপে ধাপে আন্তঃক্রিয়া তৈরি করে। এটি যদি আর্কম্যাপে getParameterAsText () ব্যবহার করে চালানো হয় তবে ধাপে ধাপে চলে যাবে এবং এটি কেবল স্ক্রিপ্ট চালানোর আগে ইনপুট হওয়া সেটিংসের একটি সিরিজ হবে।

স্ক্রিপ্টিংয়ের প্রধান উদ্দেশ্যগুলির একটি হ'ল অটোমেশন। আপনি যদি একাধিক ডেটাসেটে এটি চালাচ্ছেন তবে আপনার লুপগুলি পরীক্ষা করা উচিত । আপনি যদি এতদূর এসে পড়ে থাকেন তবে আপনি সম্ভবত সেগুলি সম্পর্কে কমপক্ষে পড়েছেন, তবে আপনি কীভাবে এগুলি ব্যবহার করতে পারেন তার উদাহরণ হিসাবে: বলুন যে আপনার একাধিক ডেটাসেট রয়েছে যাতে আপনার একই অপারেশনটি চালানো দরকার। আপনি যে প্রক্রিয়াগুলি একবার সম্পন্ন করতে হবে তার কোডটি লিখতে পারেন, তারপরে একটি 'ফর' লুপ অন্তর্ভুক্ত করুন যা ডেটাসেটের একটি তালিকা নেয় এবং সেগুলির প্রতিটিটিতে অপারেশন করে।

স্থানিক রেফারেন্সের মতো জিনিসের জন্য আপনি আরকিপি ব্যবহার করে বিদ্যমান শেফফাইল থেকে একটি স্থানিক রেফারেন্স 'চুরি' করতে পারেন es বর্ণনা করুন () , বা আপনি getParameterAsText () ব্যবহার করে একটি স্থানিক রেফারেন্স ইনপুট পেতে পারেন (যতক্ষণ আপনি একটি পরামিতিটিকে রেফারেন্স রেফারেন্স ইনপুট হিসাবে সংজ্ঞায়িত করেন স্ক্রিপ্ট সরঞ্জাম সেট আপ করার সময়)। পথের নাম পেতে কাঁচা_পিন্ড ব্যবহার করা কিছুটা জটিল।


4
+1, আমি অবশ্যই প্যারামিটারগুলি বনাম কাঁচা-ইনপুট নেব। বেশিরভাগ শেষ ব্যবহারকারী কোনও কমান্ড লাইন ইন্টারফেস বনাম একটি জিইউআই ব্যবহার করতে চাইবে না, বিশেষত যখন তারা আর্কজিআইএসের জিওপ্রোসেসিং সরঞ্জামগুলির মতো কোনও কিছুতে অভ্যস্ত থাকে।
blah238

10

@ Egdetti এর দুর্দান্ত পরামর্শ ছাড়াও , প্রতিটি লিখিত শর্তের জন্য / অন্যথায় যুক্তিযুক্ত লেখার পরিবর্তে কিছু অনুমান করে আপনি আপনার স্ক্রিপ্টটি খুব সহজ করতে পারবেন।

উদাহরণ স্বরূপ:

  • প্রতিটি আইটেম আগে থেকেই উপস্থিত রয়েছে কিনা তা যাচাইয়ের পরিবর্তে, ধরে নিন এবং এটি সেট করে ওভাররাইট করুন arcpy.env.overwriteOutput = True। এখন আপনার আগে আগে যাচাই করার দরকারের কিছু কারণ থাকতে পারে তবে ওভাররাইট করা ঠিক না হওয়ার চেয়ে প্রায়শই বেশি।

  • স্থানিক রেফারেন্স বিকল্পটি সেট করা আছে কিনা তা পরীক্ষা করে দেখার পরিবর্তে এবং একই কমান্ডটিকে দুটি ভিন্ন উপায়ে কল করার পরিবর্তে কেবলমাত্র স্থানিক রেফারেন্স ভেরিয়েবলকে একবার কমান্ডে পাস করুন এবং এটি নাল বা ফাঁকা স্ট্রিংগুলি হ্যান্ডেল করুন (যা এটি ঠিক ঠিক করবে)।

  • ব্যবহার করুন os.path.joinপরিবর্তে স্ট্রিং সংযুক্তকরণের, যা বিপদ সঙ্গে পরিপূর্ণ ব্যবহারের ফাইল পাথ উপাদান যোগ দিতে বলুন।

    যেমন পরিবর্তে:

    FGBpath = clientpath + "/" + client + ".gdb"

    ব্যবহার করুন:

    FGBpath = os.path.join(clientpath, client + ".gdb")

অসাধারণ! আমি যে ধরণের টিপস খুঁজছিলাম, ধন্যবাদ! আপনি কোনও ধরণের তালিকা জানেন যা লোকেরা সবচেয়ে সাধারণ ফাংশন / লাইব্রেরি দেখায়? যেমন os.path.join? এমন অনেকগুলি রয়েছে যে এটি এক ধরণের অপ্রতিরোধ্য। আমি পারলে আপনাকে +1 করতাম। তাদের উচিত আমাকে প্রশ্নগুলি উঁচু করে তোলা, কেবল সেগুলি হ্রাস করা উচিত নয়!
আইয়ানব্রোড

2
আমি ধরে নিয়েছি আপনি ইতিমধ্যে অফিসিয়াল পাইথন টিউটোরিয়ালটি পেরিয়ে গেছেন ? স্ট্যান্ডার্ড লাইব্রেরিতে এটির সুবিশাল বিভাগ ( 1 , 2 ) রয়েছে। আর একটি ভাল সংস্থান হ'ল তালিকার ডগ হেলম্যানের মডিউল: ডাগহেলম্যান
কনটেন্টস

এছাড়াও, নিমগ্নের চেয়ে অভিভূত হওয়া ভাল, আমি বলি!
blah238

ভাল, আমি এটি স্বীকার করতে ঘৃণা করি, তবে আমি এখনও টিউটোরিয়ালটি দিয়ে যাই নি। আমি এক ধরণের মধ্যে ঝাঁপিয়ে পড়েছি। আমি কয়েক বছর আগে একটি সি ++ ক্লাস নিয়েছি, তাই আমি বেসিকগুলি সম্পর্কে ভাল জানি তবে আমার অবশ্যই টিউটোরিয়ালটি ভালভাবে দেখতে হবে। আমি সর্বদা প্রথম ধরণের ব্যক্তির মাথায় ডুব দিয়েছি। লিঙ্কগুলির জন্য ধন্যবাদ।
আইয়ানব্রড

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