การกำหนดการฉายภาพสำหรับหลายรูปร่างใน ArcMap?


29

ฉันมีไฟล์รูปร่างมากกว่า 100 ไฟล์ที่ไม่มีไฟล์. prj และเมื่อฉันนำมาไว้ใน ArcMap 10 พวกเขาแสดงระบบพิกัดว่าไม่ทราบ ฉันรู้ว่าระบบพิกัดไฟล์รูปร่างทั้งหมดคือ GCS WGS 1984 ฉันยังรู้ว่าฉันสามารถใช้เครื่องมือ Define Projection GP เพื่อกำหนดระบบพิกัดให้กับแต่ละไฟล์ แต่จะใช้เวลาตลอดไป

ฉันหวังว่าจะมีเครื่องมือ GP ในการกำหนดสิ่งเหล่านี้ แต่ฉันไม่เห็น ต่อไปฉันคิดว่าบางทีฉันสามารถใช้ python เพื่อทำสิ่งนี้ดังนั้นฉันจึงดูในเมนูช่วยเหลือและพบสคริปต์ แต่มันทำให้ฉันมีข้อผิดพลาด

นี่คือรหัสหลามที่ฉันลองใช้ (นี่เป็นไฟล์ 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. คลิกขวาในช่อง "Coordinate System" ช่องแรกเพื่อกรอกข้อมูลการฉายที่ถูกต้อง
  5. จากนั้นคลิกขวาที่ภาพฉายที่คุณเพิ่งเลือกและเลือก "เติม" ซึ่งจะกรอกข้อมูลประมาณการที่เหลือทั้งหมดให้คุณ
  6. กด "ตกลง" และคุณทำเสร็จแล้ว

ข้อความแสดงแทน


สิ่งนี้สร้างไฟล์ตัวช่วยสร้าง Shapefile .PRJ จริง ๆ ในโฟลเดอร์ OS หรือเพียงแค่ใส่คำอธิบายประกอบเลเยอร์แอ็ตทริบิวต์หรือไม่ และคุณต้องเปิด ArcGIS ด้วยเช่นกัน สคริปต์ Python ของเจย์จะทำงานนอก ArcGIS อย่างสมบูรณ์พร้อมผลลัพธ์บางอย่าง - ดีสำหรับความต้องการที่ไม่ใช่ ESRI
V Stuart Foote

ใช่เครื่องมือ "กำหนดฉายภาพ" จะเขียนไฟล์ PRJ สำหรับรูปร่างทั้งหมดที่มีการประมวลผล ในขณะที่ฉันเห็นด้วยกับสคริปต์ไพ ธ อนที่ Jay โพสต์อาจทำได้ดี แต่การเขียนสคริปต์มักจะอยู่นอกชุดทักษะของผู้เชี่ยวชาญ GIS โดยเฉลี่ยในขณะที่ยูทิลิตี้กดปุ่ม "กำหนดฉายภาพ" ไม่ใช่
RyanDalton

1
ขอบคุณ Ryan ฉันไม่คิดว่าคุณสามารถคลิกขวาที่เครื่องมือ GP เพื่อรับตัวเลือกเพิ่มเติม นั่นเป็นเคล็ดลับที่ดีและเป็นเพียงสิ่งที่ฉันกำลังมองหา ชื่นชมมาก
wilbev

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

ฉันลองใช้เส้นทางนี้เพราะฉันต้องการเรียนรู้การใช้งาน Python ให้มากขึ้น แต่ฉันก็ไม่ประสบความสำเร็จ มันเกิดข้อผิดพลาดกับชื่อ 'os' ฉันวางในข้อความแสดงข้อผิดพลาดด้านล่าง ความคิดใด ๆ ที่อาจจะผิด
wilbev

ขออภัยที่ได้รับการเพิ่มก่อนที่ฉันจะวางในข้อผิดพลาดนี่คือ: ข้อผิดพลาดรันไทม์ <พิมพ์ 'ข้อยกเว้น. ชื่อข้อผิดพลาด'>: ชื่อ 'os' ไม่ได้ถูกกำหนด
wilbev

โอ๊ะ ... การนำเข้าจะช่วย !: import os, shutil (ดูการปรับปรุงคำตอบ) docs.python.org/tutorial/stdlib.htmlหากคุณอยู่ที่นั่น
Jay Cummins

9

เพียงทำสำเนาของ. prj และเปลี่ยนชื่อ ดังนั้นเช่นหากคุณมี 3 รูปร่างไฟล์:

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

กำหนดการฉายภาพสำหรับ one.shp และคุณจะมี one.prj ในไดเรกทอรี คัดลอก one.prj ไปยังไดเรกทอรีของ two.shp และเปลี่ยนชื่อเป็น two.prj ทำซ้ำสำหรับรูปร่างทุกไฟล์ . prj เป็นเพียงไฟล์ข้อความ ตราบใดที่ยังมี. prj อยู่ในไดเรกทอรีเดียวกันกับ. shp และด้วยชื่อเดียวกันซอฟต์แวร์จะทำการเลือก อัตโนมัติด้วยเครื่องมืออะไรก็ตามที่คุณคุ้นเคยสำหรับการคัดลอกและเปลี่ยนชื่อไฟล์


4

แก้ไข:

อาจเป็นวิธีที่ง่ายที่สุด นำพวกเขาทั้งหมดเข้ามาและกำหนด crs ที่ถูกต้องให้กับเอกสาร พวกเขาจะ "ปราศจากโครงการ" แต่นั่งอยู่ในที่ที่ถูกต้อง จากนั้นเพียงส่งออก (หลายรายการ) ไปยังตำแหน่งใหม่

ฉันเห็นเครื่องมือ GP สำหรับการฉายภาพเป็นกลุ่ม

ชุดผลิตภัณฑ์

มันอาจไม่ถูกเปิดเผยในอาร์คี ??

ฉันคิดว่าฉันจะสร้าง pgdb, (ไฟล์ส่วนบุคคลหรือแม้กระทั่ง sde) แล้วสร้าง fds (ชุดข้อมูลคุณลักษณะ)

กำหนด crs ที่เหมาะสมให้กับ fds นั้น

นำเข้าไฟล์รูปร่าง (หลายรายการ) [fc ทั้งหมดใน fds สืบทอด crs ของ fds]

จากนั้นคุณสามารถส่งออกไปยังไฟล์รูปร่าง (หลายรายการ)

นี่จะเป็นการแทนการฉายแบบแบทช์และฉันแน่ใจว่าสามารถเขียนสคริปต์ได้


แม้ว่าวิธีนี้จะใช้งานได้ แต่ก็ใช้เวลานานกว่าที่ Ryan Dalton แนะนำไว้ การนำเข้าไฟล์รูปร่างมากกว่า 100 รายการไปยังคลาสคุณลักษณะนั้นช้ามาก
wilbev


1

นี่คือสิ่งที่ฉันใช้ ... มันจะกำหนดเฉพาะการฉายภาพสำหรับไฟล์แรสเตอร์ที่ไม่มีการฉายภาพ หวังว่ามันจะช่วย นอกจากนี้ยังสร้างรายการไฟล์ที่ไม่มีการฉายภาพเพื่อจุดประสงค์ในการประกันคุณภาพ

สำหรับเวกเตอร์ของคุณเพียงแค่ต้องการ mod เล็กน้อย - 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)
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.