Reordenar permanentemente os campos nos dados (shp, gdb)

24

Se eu tiver uma classe de característica de arquivo de forma ou arquivo de banco de dados geográfico que possua campos que eu quero reordenar permanentemente, existe uma ferramenta, script ou utilitário que me ajudará a realizar rapidamente essa tarefa?

Geralmente eu sei que você precisa criar um novo campo, preenchê-lo com os valores antigos e excluir o campo antigo. Espero que exista algo já criado por aí que ajude com isso. Supondo que você não tenha o FME ou outra ferramenta ETL disponível, qual é a próxima melhor sugestão?

Essa NÃO é uma alteração no nível de exibição (por exemplo, arraste / solte os campos em ordem), mas grave para um novo arquivo de forma ou classe de recurso. Obrigado.

RyanDalton
fonte
Acho difícil de acreditar, mas não consigo encontrar uma maneira de fazer isso. Qual é o seu caso de uso para precisar reordenar os campos? Reordenar os campos na guia campos das propriedades da camada no ArcMap não é uma solução?
Derek Swingley
2
A reordenação dos campos ocorre porque os dados não serão usados ​​no ArcMap, mas com um software de mapeamento menos sofisticado que 1) usa shapefiles e 2) não permite reordenar no lado do cliente e 3) o cliente precisa ver o os principais atributos são exibidos na parte superior da árvore "identificar".
21811 RyanDalton
Acabei de editar minha resposta excluída anteriormente. Espero que você não tenha medo da linha de comando;).
Derek Swingley
mesma questão? gis.stackexchange.com/questions/5839/…
SaultDon
2
@ SaultDon- esta não é a mesma pergunta. Você fez referência a uma pergunta que deseja classificar RECORDS (linhas), mas quero classificar FIELDS (colunas).
21811 RyanDalton

Respostas:

13

Tenho certeza de que você pode fazer isso com a Classe de recurso para Classe de recurso reordenando os campos na seção de mapa de campos da ferramenta.

Edit: FC2FC não faz isso, mas ... ogr para o resgate.

Acabei de confirmar que ogr2ogr pode fazer isso. Especifique a ordem do nome do campo na opção -select. Por exemplo, se eu tiver um shapefile com dois campos, "Nome" e "FolderPath" (nessa ordem), mas desejar um novo shapefile com "FolderPath" primeiro, faria o seguinte:

C:\Temp>ogr2ogr -f "ESRI Shapefile" re_order_ogr.shp re_order1.shp -select "FolderPath,Name"
Derek Swingley
fonte
2
Embora não fosse uma opção tão amigável quanto eu esperava, definitivamente faz o truque. Eu criei um script python do ArcGIS que ajuda a criar as entradas para ele, e o usuário só precisa incluir a opção -select "field1, field2, etc". Você pode baixá-lo em resources.arcgis.com/Resources2010/gallery/file/geoprocessing/…
RyanDalton
Eu tenho uma classe de recurso no SDE com domínios. Isso manterá os domínios associados?
precisa saber é o seguinte
@joebob no. AFAIK, o ogr não suporta conjuntos de dados de SDE GDBs e também não suporta domínios.
Derek Swingley
Obrigado, usei o XRay e ele pode reordenar ou substituir campos enquanto mantém seus domínios no SDE.
precisa saber é o seguinte
7

A ferramenta ET GeoWizards fará isso, e parece que a versão gratuita fará isso sem nenhuma limitação no número de recursos.

Don Meltz
fonte
Infelizmente, mas infelizmente não mantém apelidos.
Howeitzer
7

O plug-in QGIS "Table Manager" agora também tem a capacidade de executar esta tarefa facilmente, sem a necessidade de linha de comando.

Darren Cope
fonte
6

Agora, no QGIS, você pode usar a caixa de ferramentas de processamento (Ctl + Alt + T) e ir para geoalgoritmos do QGIS> Ferramentas de tabela de vetores> Campos de refatoração.

A partir daí, você terá todas as ferramentas para editar sua estrutura de tabelas.

insira a descrição da imagem aqui

Chmeul
fonte
4

O add-in do Arcmap X-Ray possui uma ferramenta para reordenar campos no formato Geodadosferramenta de campos de reabastecimento de raio-x aqui

Geog
fonte
Isso funciona muito bem. Ele manterá seus domínios em campos se você estiver reordenando uma SDE. Ótima sugestão !!
precisa saber é o seguinte
3

Para referência: MapInfo também pode fazê-lo imediatamente. Basta abrir o DBF e reordenar os campos permanentemente. http://www.dbf-editor.com também (US $ 40). Outros editores de DBF provavelmente também podem fazê-lo.

Uffe Kousgaard
fonte
nessa linha, o infolib provavelmente também deve funcionar (converter para ascii (csv), reorganizar para adequar, reconverter para info ou dbf), desde que você queira conviver com as limitações do formato de arquivo .dbf.
Matt Wilkie
Você quer dizer viver com as limitações do formato CSV? DBF é o ponto de partida para esta pergunta ...
Uffe Kousgaard
Eu quis dizer limites dbf, pensando especificamente que o csv não tem limites no comprimento do nome do campo ou do valor do registro e que o ponto de partida foi o arquivo gdb, mas relendo o QI, consulte "shp" é mencionado no título. Assim, limita todo ;-)
wilkie mate
3

Eu tive um problema semelhante e a maneira mais rápida de reordenar permanentemente os campos de dados, se você já possui o QGIS, é usar o plug-in 'Table Manager', conforme sugerido anteriormente.

É simples de instalar plug-ins e é fácil de usar, conforme descrito na página abaixo:

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

Permite mover os atributos em uma ordem específica, renomear os campos, inserir novos campos e replicá-los. Também permite salvar o arquivo original ou renomeá-lo e salvá-lo de forma diferente do original.

insira a descrição da imagem aqui

Essa foi uma solução rápida e conveniente para o meu problema de gerenciamento da tabela de atributos e é altamente recomendada, especialmente para arquivos com um grande número de atributos associados.

Beliche
fonte
3

A melhor maneira de fazer isso é usar mapeamentos de campo. Há anos que luto com esse recurso do software ESRI, mas finalmente estou contente com esta solução. Basicamente, você pode simplesmente fazer uma cópia da sua classe de recurso com os campos reordenados permanentemente usando arcpy.FieldMappings . Todos os dados também são transferidos. Após a conclusão do script, renomeie sua antiga Feature Class para myFeatureClass_old e a nova para myFeatureClass!

Aqui está o script, é super direto:

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)
Jason Matney
fonte
3

Agora, a classe de recursos para a classe de recursos pode executar isso na versão 10.5 usando a seção Mapeamento de campos da ferramenta GP.

insira a descrição da imagem aqui

Brendan a partir de Esri
fonte
2

MakeQueryTable permite definir a ordem dos seus campos para uma tabela ou FC (somente Geodatabase). A ordem que você especifica os campos é a ordem da saída. Acho esta ferramenta difícil de usar. YMMV

Arctoolbox, ferramentas de gerenciamento de dados, camadas e visualizações de tabela, faz consulta à tabela

klewis
fonte
2

Exporte as classes de recurso para um geodatabase pessoal vazio (arraste e solte é o mais rápido), abra o .mdb no Access, reordene os campos no Design View , salve e, em seguida, com a cópia do ArcMap / Catalog novamente para modelar ou arquivar o geodatabase.

O mesmo método funciona para renomear campos.

Tenha cuidado , porém , apenas trabalhe em cópias, é fácil estragar tudo. (Como Karey Jack observa em outra resposta, Esri desencoraja o acesso direto a .mdb ). Por segurança, ignore todas as tabelas que começam com GDB_e também aquelas que terminam com _Shape_Index.

Matt Wilson
fonte
1

Tente OGR2OGR. Você pode passar uma consulta SQL e colocar os campos na ordem que desejar.

ogr2ogr outdataset indataset -sql "SELECT src_field1 AS dst_field1, src_field2 AS dst_field2 FROM sourcelayer"

Acabei de testar isso e funciona bem!

Para sua informação, a maneira mais fácil de instalar o OGR é via FWTools .

Darren Cope
fonte
1

Abra o arquivo .mdb no MS Access e reordene os campos usando o recurso de arrastar e soltar no 'Design View'

Embora a ESRI desencoraje a edição de um banco de dados no link Access ESRI

Karey Jack
fonte
2
Bem-vindo ao nosso site, Karey! Não é a mesma resposta que Matt Wilkie deu nesta discussão há 18 meses ( gis.stackexchange.com/a/5879 )?
whuber
0

Estou um pouco atrasado para a festa, mas estou surpreso que ninguém tenha mencionado o ESRI Geodatabase Diagrammer .

Um recurso fornecido pela ESRI para editar a estrutura XML do seu geodatabase e arquivos. Para mim, é essencial que você esteja trabalhando em algo em que o design precisa ser perfeito (projeto de longo prazo). Isso impedirá que você tenha que recriar arquivos continuamente após cometer um erro simples.

Roy
fonte
11
Você viu o comentário (para a própria pergunta) afirmando que não se tratava de uma reorganização do banco de dados, mas que é necessária para exportar os dados?
whuber