ArcMap में कई आकार के लिए अनुमानों को परिभाषित करना?


29

मेरे पास 100 से अधिक आकार की फाइलें हैं जिनके पास .prj फाइल नहीं है और इस प्रकार जब मैं उन्हें आर्केप 10 में लाता हूं तो वे समन्वय प्रणाली को अज्ञात के रूप में दिखाते हैं। मुझे पता है कि सभी आकार की फाइल समन्वय प्रणाली जीसीएस डब्ल्यूजीएस 1984 है। मुझे यह भी पता है कि मैं व्यक्तिगत रूप से प्रत्येक फाइल में समन्वय प्रणाली को असाइन करने के लिए डिफाइन प्रोजेक्शन जीपी उपकरण का उपयोग कर सकता हूं लेकिन यह हमेशा के लिए ले जाएगा।

मैं उम्मीद कर रहा था कि इनको परिभाषित करने के लिए एक GP उपकरण था, लेकिन मैं एक नहीं देखता। आगे मैं सोच रहा था कि शायद मैं ऐसा करने के लिए अजगर का उपयोग कर सकता हूं इसलिए मैंने मदद मेनू में देखा और एक स्क्रिप्ट मिली लेकिन यह मुझे एक त्रुटि देता है।

यहाँ मैंने कोशिश की अजगर कोड है (यह एक एकल 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. हिट "ठीक है" और आप कर रहे हैं।

वैकल्पिक शब्द


क्या यह वास्तव में OS फ़ोल्डर में शेपफाइल .PRJ हेल्पर फ़ाइल उत्पन्न करता है, या केवल एक परत विशेषता को एनोटेट करता है? और आपको आर्कजीआईएस को भी लॉन्च करना होगा। पायथन लिपि जे लगाई गई, अपने काम को पूरी तरह से आर्कजीआईएस के बाहर करेगी, कुछ परिणामों के साथ - गैर-ईएसआरआई आवश्यकताओं के लिए अच्छा।
वी स्टुअर्ट फूटे

हां, "प्रॉजेक्ट प्रोजेक्शन" टूल उन सभी शेपफाइल्स के लिए PRJ फाइल लिखता है जो इसके माध्यम से प्रोसेस की जाती हैं। जबकि मैं सहमत हूं कि पायथन लिपि जे पोस्ट की गई महान काम करेगा, स्क्रिप्टिंग अक्सर औसत जीआईएस विशेषज्ञ के कौशल सेट के बाहर होती है, जबकि पुश-बटन "परिभाषित प्रोजेक्शन" उपयोगिता नहीं है।
रयानडाल्टन 23

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))

मैंने इस मार्ग की कोशिश की क्योंकि मैं अजगर का अधिक उपयोग करना सीखना चाहता हूं लेकिन मैं सफल नहीं था। यह 'os' नाम पर गलत है। मैं नीचे त्रुटि संदेश में चिपकाया गया। कोई भी विचार क्या गलत हो सकता है?
विल्बेव

क्षमा करें, जो त्रुटि में चिपकाने से पहले जुड़ गया, यहां यह है: रनटाइम त्रुटि <प्रकार 'अपवाद। नाम पता'>: नाम 'ओएस' परिभाषित नहीं है
wilbev

उफ़ ... आयातों में मदद मिलेगी !: import os, shutil (अद्यतन उत्तर देखें)। docs.python.org/tutorial/stdlib.html आपको चाहिए।
जे कमिंस

9

बस .prj और नाम बदलें। तो, उदाहरण के लिए, यदि आपके पास 3 शेपफाइल्स हैं:

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

One.shp के लिए प्रक्षेपण को परिभाषित करें और आपके पास निर्देशिका में one.prj होगा। One.prj को two.shp की डायरेक्टरी में कॉपी करें और two.prj को नाम बदलें, सभी शेपफाइल्स के लिए दोहराएं। .Prj सिर्फ एक पाठ फ़ाइल है। जब तक एक .shp और उसी नाम के साथ एक ही निर्देशिका में .prj है, तब तक सॉफ्टवेयर इसे उठाएगा। फ़ाइलों को कॉपी करने और नाम बदलने के लिए जो भी उपकरण आप परिचित हैं, उनके साथ स्वचालित करें।


4

संपादित करें:

शायद सबसे आसान तरीका होगा। उन सभी को अंदर लाएं और दस्तावेज़ को सही सीआर असाइन करें। वे "असुरक्षित" होंगे लेकिन सही जगह पर बैठे होंगे। फिर बस एक नए स्थान पर निर्यात (एकाधिक) करें।

मैं बैच प्रक्षेपण के लिए एक जीपी उपकरण देखता हूं।

बैच समर्थक

यह आर्कपी में उजागर नहीं हो सकता है। ??

मुझे लगता है कि मैं एक pgdb, (फ़ाइल, व्यक्तिगत या यहां तक ​​कि sde) बनाऊंगा और फिर एक fds (फीचर डेटा सेट) बनाऊंगा।

उस fds के लिए उपयुक्त crs असाइन करें।

आकृति फ़ाइलें (एकाधिक) आयात करें। [सभी fc एक fds में fds के crs को विरासत में मिला है]।

तब आप फ़ाइल (एकाधिक) को आकार देने के लिए निर्यात कर सकते हैं।

यह बैच प्रक्षेपण के बदले में होगा, और मुझे यकीन है कि इसे स्क्रिप्ट किया जा सकता है।


हालांकि यह तरीका काम करता है, लेकिन रयान डाल्टन ने जो सुझाव दिया है, उससे कहीं अधिक समय लगता है। एक सुविधा वर्ग में 100 से अधिक आकार की फाइलों का आयात बहुत धीमा है।
विल्बेव


1

यहाँ मैं क्या उपयोग करता हूँ ... यह केवल रास्टर फ़ाइलों के लिए प्रक्षेपण को परिभाषित करेगा जिनके पास प्रक्षेपण नहीं है। आशा करता हूँ की ये काम करेगा। यह गुणवत्ता आश्वासन उद्देश्यों के लिए प्रक्षेपण के बिना फ़ाइलों की एक सूची भी बनाता है।

आपके वैक्टर के लिए इसे बस एक मामूली मॉड की जरूरत है - FileList = arcpy.ListFeatureClasses ()

# 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)
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.