আর্কম্যাপে একাধিক শেফফিলের জন্য অনুমানের সংজ্ঞা দিচ্ছেন?


29

আমার কাছে 100 টিরও বেশি আকারের ফাইল রয়েছে যার কাছে .pj ফাইল নেই এবং এইভাবে আমি যখন তাদের আর্কেম্যাপ 10 এ নিয়ে যাই তখন তারা স্থানাঙ্ক সিস্টেমটিকে অজানা হিসাবে দেখায়। আমি জানি সমস্ত আকারের ফাইলের সমন্বয় ব্যবস্থা হ'ল জিসিএস ডাব্লু জিএস 1984. আমি আরও জানি আমি পৃথকভাবে প্রতিটি ফাইলে স্থানাঙ্ক সিস্টেমকে নির্ধারিত করার জন্য সংজ্ঞায়িত প্রজেকশন জিপি সরঞ্জামটি ব্যবহার করতে পারি তবে তা চিরতরে লাগবে।

আমি আশা করছিলাম যে ব্যাচগুলি সংজ্ঞায়িত করার জন্য একটি জিপি সরঞ্জাম রয়েছে তবে আমি এটি দেখতে পাচ্ছি না। পরবর্তী আমি ভেবেছিলাম সম্ভবত এটি করার জন্য আমি পাইথনটি ব্যবহার করতে পারি তাই আমি সহায়তা মেনুতে দেখেছি এবং একটি স্ক্রিপ্ট পেয়েছি তবে এটি আমাকে একটি ত্রুটি দেয়।

আমি যে পাইথন কোডটি চেষ্টা করেছি তা এখানে রয়েছে (এটি একটি একক shp ফাইলের জন্য তাই আমার প্রতিটি ফাইলের জন্য নাম টাইপ করার ব্যথাটি থাকতে হবে:

import arcpy
infc = r"C:\Documents and Settings\User\My Documents\ArcGIS\shpfiles\Site_2.shp"
prjfile = r"<install directory>\Coordinate Systems\Geographic Coordinate Systems\World\WGS 1984.prj"
arcpy.DefineProjection_management(infc, prjfile)

তবে আমি যদি মাল্টি রাস্টার ফাইলগুলির জন্য প্রজেকশনটি সংজ্ঞায়িত করতে চাই তবে আমি কী করতে পারি?

উত্তর:


29

আমার মনে হয় আপনি ছেলেরা এটিকে ওভারথাইজ করছে ...

  1. সরঞ্জামবাক্সের "সংজ্ঞা প্রজ্ঞাপন" সরঞ্জামে ডান ক্লিক করুন,
  2. "ব্যাচ" নির্বাচন করুন,
  3. আপনার স্তরগুলিকে "ইনপুট ডেটাसेट" কলামে টানুন এবং ছাড়ুন,
  4. সঠিক প্রজেকশন পূরণ করতে প্রথম "সমন্বিত সিস্টেম" বাক্সে ডান ক্লিক করুন,
  5. তারপরে আপনি সবেমাত্র নির্বাচিত অভিক্ষেপটিতে ডান ক্লিক করুন এবং "পূরণ করুন" চয়ন করুন যা আপনার জন্য থাকা সমস্ত অনুমানগুলি পূরণ করবে।
  6. "ওকে" চাপুন এবং আপনার কাজ শেষ হয়েছে।

বিকল্প পাঠ


এটি কি আসলে ওএস ফোল্ডারে শেফিল .আরপিজে সহায়তাকারী ফাইল জেনারেট করে, বা কেবল একটি স্তর বৈশিষ্ট্যটি বর্ননা করে? এবং আপনাকে আরকজিআইএসও চালু করতে হবে। পাইথন স্ক্রিপ্ট জে আপ করেছেন, এর কাজটি পুরোপুরি আর্কজিআইএসের বাইরে করবে, নির্দিষ্ট ফলাফল সহ - নন-ইএসআরআই প্রয়োজনের জন্য ভাল।
ভি স্টুয়ার্ট ফুয়েট

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

1
ধন্যবাদ রায়ান, আমি কোনও ধারণা দিই না যে আপনি আরও বিকল্প পেতে জিপি সরঞ্জামে ডান ক্লিক করতে পারেন। এটি একটি দুর্দান্ত কৌশল এবং আমি যা খুঁজছিলাম ঠিক সেটাই ছিল। অনেক প্রশংসিত.
উইলবেভ

13

যদি তারা একই ডিরেক্টরিতে থাকে তবে এর মতো কিছু কাজ করবে (কেবল আপনার পাথগুলি প্রতিস্থাপন করুন, সম্ভবত কিছু ব্যতিক্রম হ্যান্ডলিংয়ে যুক্ত করুন):

import os, shutil

wgs84prjpath='c:/Program Files/ArcGIS/Desktop10.0/Coordinate Systems/Geographic Coordinate Systems/World/WGS 1984.prj'

def definewgs84(shpfilepath):
    tgtpath = os.path.splitext(shpfilepath)[0] + '.prj'
    shutil.copyfile(wgs84prjpath,tgtpath)


yourshapefiledirectory='C:/temp/'
extension='shp'

shpfileslist = [file for file in os.listdir(yourshapefiledirectory) if file.lower().endswith(extension)]

for filename in shpfileslist:
    definewgs84(os.path.join(yourshapefiledirectory,filename))

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

দুঃখিত যে আমি ভুল করে আটকানো যোগ করেছেন, এখানে এটা: রানটাইম ত্রুটি <টাইপ 'exceptions.NameError'>: নাম 'অপারেটিং সিস্টেম' সংজ্ঞায়িত করা হয় না
wilbev

ওফ ... আমদানিগুলি সাহায্য করবে!: import os, shutil (উত্তরটি আপডেট দেখুন) docs.python.org/tutorial/stdlib.html আপনার সেখানে থাকা উচিত।
জে কামিন্স

9

কেবলমাত্র .prj এর কপিগুলি এবং পুনরায় নামকরণ করুন। সুতরাং, উদাহরণস্বরূপ, যদি আপনার 3 টি শেফফাইল থাকে:

  • one.shp,
  • two.shp,
  • three.shp।

One.shp এর জন্য প্রজেকশনটি সংজ্ঞায়িত করুন এবং আপনার ডিরেক্টরিতে one.prj থাকবে। Two.shp ডিরেক্টরিতে one.prj টি অনুলিপি করুন এবং two.prj এ পুনরায় নামকরণ করুন, সমস্ত আকারের ফাইলের জন্য পুনরাবৃত্তি করুন। .Prj কেবল একটি পাঠ্য ফাইল file যতক্ষণ না .shp হিসাবে একই ডিরেক্টরিতে এবং একই নামের সাথে একটি .prj থাকে ততক্ষণ সফ্টওয়্যার এটিকে বেছে নেবে। ফাইল অনুলিপি এবং নামকরণের জন্য আপনি যে কোনও সরঞ্জামের সাথে পরিচিত তার সাথে স্বয়ংক্রিয় করুন।


4

সম্পাদনা:

সম্ভবত সবচেয়ে সহজ পদ্ধতি হবে। তাদের সকলকে এনে ডকুমেন্টে সঠিক সিআরএস বরাদ্দ করুন। এগুলি "অপ্রস্তুত" হবে তবে সঠিক জায়গায় বসে থাকবে। তারপরে কেবল নতুন স্থানে রফতানি করুন (একাধিক)।

আমি ব্যাচের অভিক্ষেপের জন্য একটি জিপি সরঞ্জাম দেখতে পাচ্ছি।

ব্যাচ প্রজ

এটি আরকেপিতে উন্মুক্ত নাও হতে পারে। ??

আমি মনে করি আমি একটি পিজিডিবি তৈরি করব (ফাইল, ব্যক্তিগত বা এমনকি এসডিই) এবং তারপরে একটি এফডিএস তৈরি করব (বৈশিষ্ট্য ডেটা সেট)।

উপযুক্ত এফডিগুলিতে সিআরএস বরাদ্দ করুন।

আকৃতি ফাইলগুলি (একাধিক) আমদানি করুন। [একটি এফডিসিতে সমস্ত এফসিএস এর সিআরএস উত্তরাধিকারী]

তারপরে আপনি ফাইল (একাধিক) আকারে রফতানি করতে পারেন।

এটি ব্যাচের অভিক্ষেপের পরিবর্তে হবে এবং আমি নিশ্চিত যে স্ক্রিপ্ট করা যেতে পারে।


যদিও এই পদ্ধতিটি কাজ করে, রায়ান ডালটনের পরামর্শের চেয়ে অনেক বেশি সময় নেয়। বৈশিষ্ট্য শ্রেণিতে 100 টিরও বেশি আকারের ফাইলের আমদানি খুব ধীর।
উইলবেভ


1

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

আপনার ভেক্টরগুলির জন্য এটির জন্য সামান্য মোড দরকার - ফাইললিস্ট = আরকিপি.লিস্ট ফিচার ক্লাস ()

# Defines projection for all rasters with undefined projection
# CAUTION - make sure you know that the projection you are defining is the correct one
# for all files in the current directory.

#Licence: Creative Commons
#Created by: George Corea; georgec@atgis.com.au, coreagc@gmail.com

import arcpy, glob, os, sys, arcgisscripting
from arcpy import env, mapping
path = os.getcwd()
env.workspace = path
env.overwriteOutput = True

print 'Reading files from ' + path
os.chdir(path)
prjFile=r'C:\\Python26\\GDA_1994_MGA_Zone_55.prj'

x=0
z=x+1
NoProjCount=0
FileList= arcpy.ListRasters()
for File in FileList:
    desc = arcpy.Describe(File)
    SR = desc.spatialReference
    if SR.name == "Unknown":
        print "Projection of " + str(File) + " is " + SR.name + " so defining projection."
        f = open('NoProjection.txt', 'a')
        f.write(str(File)+"\n")
        f.close()
        arcpy.DefineProjection_management(File, prjFile) 
        NoProjCount=NoProjCount+1
    else:    
        print File + " is projected " + str(SR.name)
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.