Como converter um arquivo do Excel com colunas x, y em um shapefile?

26

Como converter um arquivo do Excel com colunas x, y em um shapefile de ponto?

Existem alguns requisitos opcionais, além da criação correta de um shapefile:

  1. Os tipos de coluna (conforme os especificadores de formato do Excel) devem ser mantidos (especialmente os tipos de data)
  2. Os nomes das colunas devem ser retirados do cabeçalho
  3. Eu gosto de fazer isso a partir da linha de comando
  4. Se eu puder incluir referências espaciais heterogêneas para os pontos em uma terceira coluna, eu ficaria muito feliz :)
fmark
fonte
dê uma olhada neste gis.stackexchange.com/questions/86369/…
AndroidNijx

Respostas:

24

Eu recomendo usar o OGR / GDAL , que faz parte da biblioteca GDAL . OGR suporta um formato virtual que permite a especificação através de um arquivo XML. Se você converter sua planilha do Excel em um CSV, poderá gerar um VRT para acessar os dados.

Supondo que você tenha algo parecido com isto example.csv:

Lat,Long,Year,Name
34.0,-120.0,2010-05-01,Off Santa Rosa Island

Você pode criar um VRT da example.vrtseguinte maneira:

<OGRVRTDataSource>
    <OGRVRTLayer name="example">
        <SrcDataSource>example.csv</SrcDataSource>
        <GeometryType>wkbPoint</GeometryType>
        <LayerSRS>WGS84</LayerSRS>
        <GeometryField encoding="PointFromColumns" x="Long" y="Lat"/>
    </OGRVRTLayer>
</OGRVRTDataSource>

A partir do GDAL 1.7, é possível especificar adicionalmente os tipos de dados dos campos de atributos usando o <Field>elemento dentro de <OGRVRTLayer>, da seguinte forma:

    <Field name="date" src="Year" type="Date" />

Lembre-se de que os shapefiles armazenam atributos no formato DBASE IV , com menos flexibilidade nos tipos de dados que o Excel. Depois de especificar seu arquivo VRT, você pode usar a cadeia de ferramentas OGR normal para converter os dados em um Shapefile:

ogr2ogr -f "ESRI Shapefile" example.shp example.vrt

Infelizmente, o nº 4 não é possível - a especificação do shapefile permite uma única projeção (visível aqui example.prjapós a última etapa).

scw
fonte
A única desvantagem disso é que tenho que descobrir os tipos de dados das colunas programaticamente para escrever a <Field>tag. Eu acho que vou descobrir isso sozinho :)
fmark 26/07/10
Direita. Se você deseja uma solução automatizada e tem acesso ao ArcGIS, pode fazê-lo com a ferramenta Adicionar coordenadas XY tinyurl.com/38jm55k , que deve fazer esse passo para você.
scw 26/07/10
Uma consideração importante é colocar seu arquivo do Excel em um formato adequado para o arquivo de forma ESRI primeiro - existem limitações nos nomes das colunas, no comprimento dos nomes e, se você estiver usando a ferramenta Adicionar XY, a maneira pela qual a ESRI automatiza o tipo de campo que pode causar problemas. webhelp.esri.com/arcgisdesktop/9.2/…
spg
3
Serviço on-line para ajudar a construir um arquivo formatado corretamente vrt: vrtbuilder.appspot.com
wilkie mate
9

Você pode usar o plug-in Delimited Text que acompanha o QGIS (http://qgis.org ) para carregar o arquivo de texto e salvá-lo como um shapefile.

gsherman
fonte
Muitas vezes sou atormentado por erros do analisador usando esta ferramenta. Algum conselho?
fmark
11
Você tem exemplos específicos?
gsherman
@fmark - eu recebo esses erros, bem como, e sua geralmente devido à manipulação MS Excel CSV
dassouki
6

Embora não seja da linha de comando, você pode fazer isso no ArcGIS App. Desde a 9.3.1, basta adicionar o XLS diretamente no ArcMap. Crie uma camada de eventos XY a partir do XLS (ou seja, escolha as colunas X, Y e defina sua referência espacial) Em seguida, exporte essa camada de eventos XY para um novo .shp Isso pode ser facilmente automatizado com um script python / VBA simples ou um modelo no modelbuilder . É um prazer ajudar com esse fluxo de trabalho básico, se você precisar de mais informações.

Simon
fonte
11
Se você usa Python, pode executar uma ferramenta de geoprocessamento na linha de comando.
jswise
6

Procurei, mas não consegui encontrar uma página de ajuda em Exibir dados XY na ajuda da Web, mas o processo é simples.

  1. Use Adicionar dados (ou arraste e solte na janela Catálogo) para procurar sua planilha (dentro da planilha) e adicioná-la ao seu mapa
  2. Clique com o botão direito do mouse para escolher e usar Exibir Dados XY para adicionar uma camada de eventos
  3. Clique com o botão direito do mouse na camada de eventos recém-criada e use Data | Export Data para criar um shapefile

Você só precisa do nível de licença do ArcView (Basic) do ArcGIS (for) Desktop para fazer isso.

PolyGeo
fonte
Preciso fazer algo com as colunas superiores que não fazem parte dos dados?
Zoran
Quais duas colunas não fazem parte dos seus dados? O procedimento que descrevi deve usar as colunas longas / latas que você escolher para gerar as geometrias de pontos e, em seguida, acho que, armazenar o restante como atributos delas. O melhor é experimentá-lo e, se o resultado não for o esperado, descreva o observado versus o esperado.
PolyGeo
Acho que interpretei errado o top para dois - e estou assumindo que você quer dizer a linha superior (dos títulos). Eles devem se tornar nomes de campos após o Adicionar Dados.
PolyGeo
Não tenho certeza se esse ainda é o caso, mas os espaços nos nomes dos cabeçalhos no arquivo do Excel costumavam ser uma verdadeira dor de cabeça para o Add XY.
Chad Cooper
11
Carregar arquivos do Excel diretamente no ArcGIS funciona maravilhosamente bem - exceto quando não funciona! O que observar: datas mutiladas, números truncados. A primeira etapa da solução de problemas é sempre exportar para CSV com todas as colunas definidas como texto e carregá-las para que o problema persista. Essa ressalva de lado. Exibir como X / Y funciona muito bem.
Matt Wilkie
4

Sempre há a opção aventureira. Você mesmo pode escrever o arquivo de formas. A ESRI publica a especificação para shapefiles, que você pode ler aqui:

http://www.esri.com/library/whitepapers/pdfs/shapefile.pdf

Você provavelmente também precisará escrever um arquivo DBF. Você pode ler sobre o formato aqui:

http://www.clicketyclick.dk/databases/xbase/format/dbf.html#DBF_STRUCT

Sem dúvida, isso é um exagero, mas daria a vantagem de ter controle sobre todo o processo.

Scott Wisniewski
fonte
Na verdade, estou cuidando dessa maneira - vou usar o OGR em vez de escrever diretamente o shapefile!
fmark
2
O Excel provavelmente pode escrever o DBF diretamente, embora eu tenha tido vários níveis de sucesso usando esses DBFs como o componente DBF de um shapefile.
mwalker
O Excel não grava arquivos dbf.
user30184
3

Pessoalmente, prefiro usar o FME da Safe Software (http://www.safe.com), que não só me permite plotar pontos a partir dos valores XY, mas também oferece a flexibilidade de transformar as coordenadas de uma projeção para outra antes de plotar, especifique o tipo de delimitador, linha de partida (caso o arquivo de texto contenha informações do cabeçalho), anexe atributos caso o arquivo de texto contenha informações X, Y, Attribute para os dados do ponto. Caso deseje visualizar esses dados no Google Earth, você pode gravá-los no formato KML, especificando também o estilo do ponto KML. ~ SRG

SRG
fonte
2

Se você quiser fazer algum outro processamento nos dados x, y, poderá carregar os dados no postgres, usar geomfromtext com concatenação para criar um tipo de dados de geometria e, em seguida, usar pgsql2shp para exportar para moldar. Essa abordagem também permitirá que você retenha dados heterogêneos do sistema de referência espacial em outra coluna, que você poderá usar para converter todos os seus pontos em um sistema de referência comum no banco de dados antes de exportar para o formato. Sei que isso envolve mais etapas do que ogr / gdal, mas lhe dará muito mais flexibilidade.

John Powell
fonte
Eu usei essa abordagem no passado, e é uma boa. Eu acho que meu bloco consistente tropeço aqui está a detectar os tipos de dados do Excel confiável ....
fmark
11
Suponho que você possa escrever algo no excel vba para reorganizar suas colunas primeiro, para que a data, x, y sempre sejam as três primeiras colunas. Sem algum tipo de convenções de nomenclatura de colunas, acho que seria difícil automatizar completamente o que você tem em mente.
John Powell
1

Que tal carregar seus arquivos CSV no spatiallite e usar o OGR ou QGIS para exportar para um shapefile.

http://www.gaia-gis.it/spatialite-2.2/index.html

Você pode até exportar diretamente do spatialite para um shapefile.

http://www.gaia-gis.it/spatialite-2.2/spatialite-2.2_tutorial.html#t3.1

TheSteve0
fonte
O Spatialite pode importar arquivos do Excel diretamente se eles estiverem no formato .xls antigo (Excel 97-2003). As coordenadas X e Y devem ser convertidas em geometrias com SQL após a importação inicial.
user30184
Se você não se importa com Java você poderia usar o projeto POI para rasgar os arquivos do Excel e, em seguida, usar GeoTools para escrever o novo shapefile
TheSteve0
0

Para uma transformação mais básica, você pode usar o transformador 2Dpointreplacer no FME 2013. Você precisa apontar em quais colunas os valores X e Y estão localizados e o FME transformará esses valores em, por exemplo, um arquivo de forma com pontos.
Os nomes e tipos de colunas podem ser configurados conforme necessário

Congelar
fonte