จัดลำดับฟิลด์ใหม่อย่างถาวรในข้อมูล (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.