จัดลำดับฟิลด์ใหม่อย่างถาวรในข้อมูล (shp, gdb)


24

ถ้าฉันมี shapefile หรือ geodatabase featureclass ที่มีฟิลด์ที่ฉันต้องการจัดลำดับใหม่อย่างถาวรมีเครื่องมือสคริปต์หรือยูทิลิตี้ที่จะช่วยให้ฉันทำงานนี้สำเร็จได้อย่างรวดเร็วหรือไม่?

โดยทั่วไปฉันรู้ว่าคุณต้องสร้างเขตข้อมูลใหม่จากนั้นเติมด้วยค่าเก่าแล้วลบเขตข้อมูลเก่า ฉันหวังว่าจะมีบางสิ่งที่สร้างขึ้นมาแล้วซึ่งจะช่วยได้ สมมติว่าคุณไม่มี FME หรือเครื่องมือ ETL อื่น ๆ คำแนะนำที่ดีที่สุดถัดไปคืออะไร

นี่ไม่ใช่การเปลี่ยนแปลงระดับมุมมอง (เช่น - ลาก / วางเขตข้อมูลตามลำดับ) แต่ควรเขียนลงในรูปร่างหรือคุณลักษณะชั้นใหม่ ขอบคุณ


ฉันคิดว่ามันยากที่จะเชื่อ แต่ฉันไม่สามารถหาวิธีที่จะทำเช่นนี้ได้ กรณีการใช้งานของคุณสำหรับการสั่งซื้อฟิลด์ใหม่เป็นอย่างไร การเรียงลำดับฟิลด์ในแท็บฟิลด์ของคุณสมบัติเลเยอร์ใน ArcMap ไม่ใช่วิธีแก้ปัญหาหรือไม่
Derek Swingley

2
การเรียงลำดับใหม่ของฟิลด์เป็นเพราะข้อมูลจะไม่ถูกใช้ใน ArcMap แต่ด้วยซอฟต์แวร์การทำแผนที่ที่ซับซ้อนน้อยกว่าที่ 1) ใช้ Shapefiles และ 2) ไม่อนุญาตให้ทำการเรียงลำดับใหม่ในฝั่งไคลเอ็นต์และ 3) ไคลเอ็นต์ต้องการดู แอตทริบิวต์ที่สำคัญปรากฏขึ้นที่ด้านบนของต้นไม้ "ระบุ"
RyanDalton

เพิ่งแก้ไขคำตอบที่ฉันลบไปก่อนหน้านี้ หวังว่าคุณจะไม่กลัวบรรทัดคำสั่ง;)
Derek Swingley

คำถามเดียวกัน gis.stackexchange.com/questions/5839/…
SaultDon

2
@ SaultDon- นี่ไม่ใช่คำถามเดียวกัน คุณอ้างอิงคำถามที่ต้องการเรียงลำดับ RECORDS (แถว) แต่ฉันต้องการเรียงลำดับ FIELDS (คอลัมน์)
RyanDalton

คำตอบ:


13

ฉันค่อนข้างมั่นใจว่าคุณสามารถทำสิ่งนี้ได้ด้วยFeature Class to Feature Classโดยการเรียงลำดับฟิลด์ในส่วนแมปฟิลด์ของเครื่องมือ

แก้ไข: FC2FC ไม่ได้ทำเช่นนี้ แต่ ... ogr เพื่อช่วยเหลือ

ฉันเพิ่งยืนยันว่า ogr2ogr สามารถทำได้ ระบุลำดับชื่อเขตข้อมูลของคุณบนสวิตช์เลือก ตัวอย่างเช่นถ้าฉันมี Shapefile ที่มีสองฟิลด์ "ชื่อ" และ "FolderPath" (ตามลำดับ) แต่ฉันต้องการ Shapefile ใหม่ที่มี "FolderPath" ก่อนฉันจะทำสิ่งนี้:

C:\Temp>ogr2ogr -f "ESRI Shapefile" re_order_ogr.shp re_order1.shp -select "FolderPath,Name"

2
ในขณะที่มันไม่ได้เป็นตัวเลือกที่เป็นมิตรกับผู้ใช้อย่างที่ฉันหวังไว้ ฉันได้สร้างสคริปต์ ArcGIS python ที่ช่วยสร้างอินพุตสำหรับมันและผู้ใช้จะต้องรวมตัวเลือก - เลือก "field1, field2 และอื่น ๆ " คุณสามารถดาวน์โหลดได้ที่resources.arcgis.com/Resources2010/gallery/file/geoprocessing/ …
RyanDalton

ฉันมีคลาสคุณลักษณะบน SDE พร้อมโดเมน สิ่งนี้จะถือโดเมนที่เกี่ยวข้องหรือไม่
MjonesGEO

@joebob ไม่ AFAIK, ogr ไม่รองรับชุดข้อมูลจาก SDE GDB และไม่รองรับโดเมนเช่นกัน
Derek Swingley

ขอบคุณฉันใช้ XRay และสามารถเรียงลำดับใหม่หรือแทนที่ฟิลด์ในขณะที่ถือโดเมนใน SDE
MjonesGEO

7

ET GeoWizardsเครื่องมือที่จะทำเช่นนี้และดูเหมือนว่ารุ่นฟรีจะทำมันได้โดยไม่มีข้อ จำกัด ใด ๆ กับจำนวนของคุณสมบัติ


มันทำได้ แต่น่าเศร้าที่ไม่ได้รักษานามแฝง
Howeitzer

7

ปลั๊กอิน "ตัวจัดการตาราง" ของ QGIS ในขณะนี้ยังมีความสามารถในการทำงานนี้ได้อย่างง่ายดายโดยไม่จำเป็นต้องใช้บรรทัดคำสั่ง


6

ใน QGIS ตอนนี้คุณสามารถใช้กล่องเครื่องมือการประมวลผล (Ctl + Alt + T) แล้วไปที่ QGIS geoalgorithms> เครื่องมือตารางเวกเตอร์> เขตข้อมูล Refactor

จากตรงนั้นคุณจะมีเครื่องมือทั้งหมดเพื่อแก้ไขโครงสร้างตารางของคุณ

ป้อนคำอธิบายรูปภาพที่นี่


4

การเพิ่ม X-Ray arcmap มีเครื่องมือสำหรับจัดลำดับฟิลด์ใหม่ในรูปแบบ Geodatabesเครื่องมือเรียงลำดับเอกซ์เรย์ใหม่ที่นี่


มันใช้งานได้ดีมาก มันจะถือโดเมนของคุณในฟิลด์ถ้าคุณกำลังสั่งซื้อ SDE อีกครั้ง คำแนะนำยอดเยี่ยม !!
MjonesGEO

3

สำหรับการอ้างอิง: MapInfo ยังสามารถทำได้นอกกรอบ เพียงแค่เปิด DBF และจัดลำดับฟิลด์ใหม่อย่างถาวร http://www.dbf-editor.comก็ทำเช่นนั้น ($ 40) บรรณาธิการ DBF อื่น ๆ ก็สามารถทำได้เช่นกัน


ในบรรทัดนี้อินโฟลิบควรทำงานด้วย (แปลงเป็น ascii (csv) จัดเรียงใหม่ให้เหมาะสมแปลงกลับเป็นข้อมูลหรือ dbf) ตราบใดที่คุณยินดีอยู่กับข้อ จำกัด ของรูปแบบไฟล์. dbf
matt wilkie

คุณหมายถึงอยู่กับข้อ จำกัด ของรูปแบบ CSV หรือไม่ DBF เป็นจุดเริ่มต้นสำหรับคำถามนี้ ...
Uffe Kousgaard

ฉันหมายถึงขีด จำกัด ของ dbf โดยเฉพาะอย่างยิ่งการคิดว่า csv ไม่มีข้อ จำกัด เกี่ยวกับความยาวชื่อฟิลด์หรือความยาวของค่าบันทึกและจุดเริ่มต้นนั้นคือไฟล์ gdb แต่การอ่าน QI อีกครั้งเห็น "shp" ถูกกล่าวถึงในชื่อเรื่อง ดังนั้น จำกัด รอบ ;-)
แมตต์ wilkie

3

ฉันมีปัญหาที่คล้ายกันและวิธีที่เร็วที่สุดในการจัดลำดับเขตข้อมูลใหม่อย่างถาวรหากคุณมี QGIS อยู่แล้วให้ใช้ปลั๊กอิน 'ตัวจัดการตาราง' ตามที่แนะนำไว้ก่อนหน้านี้

มันง่ายในการติดตั้งปลั๊กอินและใช้งานง่ายดังที่อธิบายไว้ในหน้าด้านล่าง:

http://www.qgistutorials.com/en/docs/using_plugins.html

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

ป้อนคำอธิบายรูปภาพที่นี่

นี่เป็นวิธีแก้ปัญหาการจัดการตารางแอตทริบิวต์ของฉันที่สะดวกและรวดเร็วและขอแนะนำอย่างยิ่งโดยเฉพาะอย่างยิ่งสำหรับไฟล์ที่มีแอตทริบิวต์จำนวนมากที่เกี่ยวข้อง


3

Yo วิธีที่ดีที่สุดที่จะทำคือใช้การแมปฟิลด์ ฉันดิ้นรนกับคุณสมบัติของซอฟต์แวร์ ESRI มาหลายปีแล้ว แต่ในที่สุดฉันก็พอใจกับโซลูชันนี้ โดยทั่วไปคุณก็สามารถทำสำเนาของคุณสมบัติของ Class ที่ทุ่งนาตับแลบอย่างถาวรโดยใช้arcpy.FieldMappings ข้อมูลทั้งหมดจะถูกนำไปใช้เช่นกัน เมื่อสคริปต์เสร็จสมบูรณ์แล้วให้เปลี่ยนชื่อ Feature คลาสเก่าของคุณเป็น myFeatureClass_old และเปลี่ยนใหม่เป็น myFeatureClass!

นี่คือสคริปต์มันตรงไปตรงมาสุด ๆ :

import arcpy
'''
This is possible in python using FeatureClasstoFeatureClass with Fieldmappings. You can also rename fields at the same time.
So if you have a Feature Class with FIELD3, FIELD2, FIELD1 and you want the result to be FIELD1, FIELD2, FIELD3 then the following code should accomplish this.
'''
arcpy.env.workspace = r"C:\Users\myself\ArcData\my_geodatabase.gdb"
arcpy.env.overwriteOutput = True

input_fpath = "Lakes"

output_dpath = arcpy.env.workspace
output_fname = "Lakes_new"

fms = arcpy.FieldMappings()

fm = arcpy.FieldMap()
fm.addInputField(input_fpath,"FIELD1")
fms.addFieldMap(fm)

fm = arcpy.FieldMap()
fm.addInputField(input_fpath,"FIELD2")
fms.addFieldMap(fm)

fm = arcpy.FieldMap()
fm.addInputField(input_fpath,"FIELD3")
fms.addFieldMap(fm)

arcpy.conversion.FeatureClassToFeatureClass(input_fpath,output_dpath,output_fname,"",fms)


2

MakeQueryTable จะให้คุณกำหนดลำดับของฟิลด์สำหรับตารางหรือ FC (Geodatabase เท่านั้น) ลำดับที่คุณระบุเขตข้อมูลคือลำดับของผลลัพธ์ ฉันพบว่าเครื่องมือนี้ใช้งานยาก YMMV

Arctoolbox เครื่องมือจัดการข้อมูลเลเยอร์และมุมมองตารางสร้างตารางคิวรี


2

ส่งออกคลาสของคุณลักษณะไปยังฐานข้อมูลส่วนบุคคลทางภูมิศาสตร์ที่ว่างเปล่า(ลากและวางเร็วที่สุด) เปิด. mdb ใน Access เรียงลำดับฟิลด์ในมุมมองออกแบบบันทึกอีกครั้งจากนั้นคัดลอก ArcMap / Catalog กลับเป็นรูปร่างหรือฐานข้อมูลไฟล์

วิธีการเดียวกันนี้ใช้สำหรับเปลี่ยนชื่อฟิลด์

ระวังให้ดีแม้ว่าจะใช้งานได้กับการทำสำเนาเท่านั้น (ดังที่ Karey Jack บันทึกไว้ในคำตอบอื่น Esri ไม่สนับสนุนการเข้าถึง. mdb โดยตรง ) เพื่อความปลอดภัยละเว้นตารางทั้งหมดเริ่มต้นด้วยและยังมีผู้ที่ลงท้ายด้วยGDB__Shape_Index


1

ลอง OGR2OGR คุณสามารถส่งแบบสอบถาม SQL และใส่เขตข้อมูลตามลำดับที่คุณต้องการ

ogr2ogr outdataset indataset -sql "เลือก src_field1 AS dst_field1, src_field2 AS dst_field2 จาก sourcelayer"

เพิ่งทดสอบสิ่งนี้และใช้งานได้ดี!

FYI, วิธีที่ง่ายที่สุดในการติดตั้ง OGR ผ่านFWTools


1

เปิดไฟล์. mdb ในMS Accessและเรียงลำดับฟิลด์ใหม่โดยใช้การลากและวางใน'มุมมองออกแบบ'

แม้ว่า ESRI จะไม่สนับสนุนการแก้ไขฐานข้อมูลใน ลิงก์Access ESRI


2
ยินดีต้อนรับสู่เว็บไซต์ของเรา Karey! นี่ไม่ใช่คำตอบเดียวกับที่ Matt Wilkie ให้ในกระทู้นี้เมื่อ 18 เดือนที่แล้ว ( gis.stackexchange.com/a/5879 )
whuber

0

ฉันบิตปลายไปยังบุคคลที่หนึ่งนี้ แต่ผมแปลกใจที่ไม่มีใครได้กล่าวถึงESRI geodatabase Diagrammer

ทรัพยากรที่ ESRI จัดหาให้เพื่อแก้ไขโครงสร้าง XML ของฐานข้อมูลและไฟล์ของคุณ เท่าที่ฉันกังวลมันเป็นสิ่งสำคัญถ้าคุณกำลังทำงานในสิ่งที่การออกแบบจะต้องสมบูรณ์แบบ (โครงการระยะยาว) มันจะทำให้คุณไม่ต้องสร้างไฟล์ใหม่อย่างต่อเนื่องหลังจากทำผิดพลาดง่าย ๆ


1
คุณเห็นความคิดเห็น (สำหรับคำถามตัวเอง) ที่ระบุว่านี่ไม่ใช่การปรับโครงสร้างฐานข้อมูล แต่จำเป็นต้องส่งออกข้อมูลแทนหรือไม่
whuber
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.