Постоянное изменение порядка полей в данных (shp, gdb)

24

Если у меня есть класс объектов шейп-файла или базы геоданных, в котором есть поля, которые я хочу переупорядочить, есть ли инструмент, сценарий или утилита, которые помогут мне быстро выполнить эту задачу?

Обычно я знаю, что вам нужно создать новое поле, затем заполнить его старыми значениями, а затем удалить старое поле. Я надеюсь, что что-то уже создано, что поможет с этим. Предполагая, что у вас нет FME или другого доступного инструмента ETL, каково следующее лучшее предложение?

Это НЕ изменение уровня представления (т.е. перетаскивание полей по порядку), а скорее запись в новый шейп-файл или класс объектов. Спасибо.

RyanDalton
источник
Мне трудно в это поверить, но я не могу найти способ сделать это. Какой у вас сценарий использования для переупорядочения полей? Переупорядочение полей на вкладке полей свойств слоя в ArcMap не является решением?
Дерек Суингли
2
Изменение порядка полей происходит потому, что данные не будут использоваться в ArcMap, но с менее сложным программным обеспечением для картографии, которое 1) использует шейп-файлы и 2) не позволяет переупорядочивать на стороне клиента и 3) клиент должен видеть ключевые атрибуты отображаются вверху «идентифицировать» дерево.
RyanDalton
Только что отредактировал мой ранее удаленный ответ. Надеюсь, вы не боитесь командной строки;).
Дерек Суингли
тот же вопрос? gis.stackexchange.com/questions/5839/…
SaultDon
2
@ SaultDon - это не тот же вопрос. Вы ссылались на вопрос, который хочет отсортировать ЗАПИСИ (строки), но я хочу отсортировать ПОЛЯ (столбцы).
RyanDalton

Ответы:

13

Я почти уверен, что вы можете сделать это с класса объектов в класс объектов, переупорядочив поля в разделе карты полей инструмента.

Редактировать: FC2FC не делает этого, но ... огр на помощь.

Я только что подтвердил, что ogr2ogr может сделать это. Укажите порядок имен полей на ключе -select. Например, если у меня есть шейп-файл с двумя полями, «Name» и «FolderPath» (в этом порядке), но я сначала хочу новый шейп-файл с «FolderPath», я бы сделал это:

C:\Temp>ogr2ogr -f "ESRI Shapefile" re_order_ogr.shp re_order1.shp -select "FolderPath,Name"
Дерек Суингли
источник
2
Хотя это был не такой удобный для пользователя вариант, как я надеялся, он определенно делает свое дело. Я создал скрипт Python ArcGIS, который помогает создавать входные данные для него, и пользователь просто должен включить опцию -select "field1, field2 и т. Д.". Вы можете скачать его по адресу resources.arcgis.com/Resources2010/gallery/file/geoprocessing/…
RyanDalton
У меня есть класс объектов на SDE с доменами. Будет ли это содержать связанные домены?
MjonesGEO
@ Джобоб нет. AFAIK, ogr не поддерживает наборы данных из SDE GDB и не поддерживает домены.
Дерек Суингли
Спасибо, я только что использовал XRay, и он может переупорядочивать или заменять поля, удерживая их домены в SDE.
MjonesGEO
7

Инструмент ET GeoWizards сделает это, и, похоже, бесплатная версия сделает это без каких-либо ограничений по количеству функций.

Дон мельц
источник
Это делает, но, к сожалению, не сохраняет псевдонимы.
Howeitzer
7

Плагин QGIS «Диспетчер таблиц» теперь также имеет возможность легко выполнять эту задачу без необходимости в командной строке.

Даррен Коуп
источник
6

В QGIS теперь вы можете использовать набор инструментов обработки (Ctl + Alt + T) и перейти к геоалгоритмам QGIS> Инструменты векторных таблиц> Поля рефакторинга.

Оттуда у вас будут все инструменты для редактирования структуры таблицы.

введите описание изображения здесь

Chmeul
источник
4

X-Ray arcmap add in имеет инструмент для изменения порядка полей в формате Geodatabesинструмент для переупорядочения рентгеновских полей здесь

GEOG
источник
Это работает очень хорошо. Он даже будет содержать ваши домены в полях, если вы будете переупорядочивать SDE. Отличное предложение!
MjonesGEO
3

Для справки: MapInfo также может сделать это из коробки. Просто откройте DBF и измените порядок полей. http://www.dbf-editor.com тоже делает это (40 долларов). Другие редакторы DBF, вероятно, тоже могут это сделать.

Уффе Кусгаард
источник
в этой строке, вероятно, тоже должен работать infolib (конвертировать в ascii (csv), переставлять в соответствии, переконвертировать обратно в info или dbf), если вы готовы жить с ограничениями формата файла .dbf.
Мэтт Уилки
Вы имеете в виду жить с ограничениями формата CSV? DBF является отправной точкой для этого вопроса ...
Uffe Kousgaard
Я имел в виду ограничения dbf, особенно думая, что csv не имеет ограничений на длину имени поля или длины значения записи, и что отправной точкой был файл gdb, но перечитывание QI смотри «shp» упоминается в заголовке. Таким образом, ограничивает все вокруг ;-)
Мэтт Уилки
3

У меня была похожая проблема, и самый быстрый способ навсегда изменить порядок полей данных, если у вас уже есть QGIS, это использовать плагин «Table Manager», как предлагалось ранее.

Он прост в установке плагинов и удобен для пользователя, как описано на странице ниже:

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

Это позволяет вам перемещать атрибуты в определенном порядке, переименовывать поля, вставлять любые новые поля и копировать их. Это также позволяет сохранить исходный файл или переименовать его и сохранить его не так, как исходный.

введите описание изображения здесь

Это было быстрое и удобное решение для моей проблемы управления таблицей атрибутов, и это настоятельно рекомендуется, особенно для файлов с большим количеством связанных атрибутов.

койка
источник
3

Экспортируйте классы пространственных объектов в пустую персональную базу геоданных (перетаскивание - самое быстрое), откройте .mdb в Access, измените порядок полей в режиме конструктора , сохраните, а затем с ArcMap / Catalog скопируйте обратно в базу геоданных формы или файла.

Тот же метод работает для переименования полей.

Будьте осторожны , работайте только с копиями, все легко испортить. (Как отмечает Карей Джек в другом ответе, Esri препятствует прямому доступу .mdb ). В целях безопасности игнорируйте все таблицы, начинающиеся с, GDB_а также таблицы, заканчивающиеся на _Shape_Index.

Мэтт Уилки
источник
3

Йо лучший способ сделать это - использовать Field Mappings. Я боролся с этой функцией программного обеспечения ESRI в течение многих лет, но я наконец доволен этим решением. По сути, вы можете просто сделать копию вашего Класса пространственных объектов с полями, которые были переупорядочены с помощью arcpy.FieldMappings . Все данные также переносятся. После завершения сценария просто переименуйте старый класс объектов в 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)
Джейсон Мэтни
источник
3

От класса объектов до класса объектов теперь можно выполнить это в 10.5 с помощью раздела «Сопоставление полей инструмента GP».

введите описание изображения здесь

Брендан из Эсри
источник
2

MakeQueryTable позволит вам определить порядок полей для таблицы или FC (только для базы геоданных). Порядок, указанный вами в полях, является порядком вывода. Я считаю этот инструмент сложным в использовании. YMMV

Arctoolbox, инструменты управления данными, слои и табличные представления, составляют запрос Table

klewis
источник
1

Попробуйте OGR2OGR. Вы можете передать запрос SQL и расположить поля в нужном вам порядке.

ogr2ogr outdataset indataset -sql "ВЫБЕРИТЕ src_field1 AS dst_field1, src_field2 AS dst_field2 FROM sourcelayer"

Только что проверил, и все работает отлично!

К вашему сведению, самый простой способ установить OGR - через FWTools .

Даррен Коуп
источник
1

Откройте файл .mdb в MS Access и измените порядок полей с помощью перетаскивания в представлении «Дизайн».

Хотя ESRI не рекомендует редактировать базу данных в ссылке Access ESRI

Карей джек
источник
2
Добро пожаловать на наш сайт, Карей! Разве это не тот же ответ, который Мэтт Уилки дал в этой теме 18 месяцев назад ( gis.stackexchange.com/a/5879 )?
whuber
0

Я немного опоздал на вечеринку по этому поводу, но я удивлен, что никто не упомянул диаграмму базы геоданных ESRI .

Ресурс, предоставленный ESRI для редактирования XML-структуры вашей базы геоданных и файлов. Насколько я понимаю, это важно, если вы работаете над чем-то, где дизайн должен быть идеальным (долгосрочный проект). Это избавит вас от необходимости постоянно создавать файлы после простой ошибки.

Рой
источник
1
Вы видели комментарий (к самому вопросу) о том, что это была не реорганизация базы данных, а, скорее, она необходима для экспорта данных?
whuber