¿Cómo puedo convertir un archivo de Excel con columnas x, y en un archivo de forma?

26

¿Cómo puedo convertir un archivo de Excel con columnas x, y en un archivo de forma de punto?

Hay algunos requisitos algo opcionales además de la creación correcta de un shapefile:

  1. Se deben conservar los tipos de columna (según los especificadores de formato de Excel) (especialmente los tipos de fecha)
  2. Los nombres de columna deben tomarse del encabezado
  3. Me gustaría hacer esto desde la línea de comandos
  4. Si puedo incluir referencias espaciales heterogéneas para los puntos en una tercera columna, estaría muy feliz :)
fmark
fuente
echa un vistazo a este gis.stackexchange.com/questions/86369/…
AndroidNijx

Respuestas:

24

Recomiendo usar OGR / GDAL , que es parte de la biblioteca GDAL . OGR admite un formato virtual que permite la especificación a través de un archivo XML. Si convierte su hoja de cálculo de Excel en un CSV, puede generar un VRT para acceder a los datos.

Asumiendo que tienes algo como esto example.csv:

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

Puede crear un VRT de la example.vrtsiguiente manera:

<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 de GDAL 1.7, también puede especificar los tipos de datos de los campos de atributos utilizando el <Field>elemento dentro de <OGRVRTLayer>, de esta manera:

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

Tenga en cuenta que los archivos de forma almacenan atributos en el formato DBASE IV que tiene menos flexibilidad en los tipos de datos que Excel. Una vez que haya especificado su archivo VRT, puede usar la cadena de herramientas OGR normal para convertir los datos en un Shapefile:

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

Desafortunadamente, # 4 no es posible: la especificación del archivo de forma permite una sola proyección (visible aquí example.prjdespués del último paso).

scw
fuente
El único inconveniente de esto es que tengo que averiguar los tipos de datos de las columnas mediante programación para escribir la <Field>etiqueta. Supongo que lo resolveré por mi cuenta :)
fmark
Correcto. Si desea una solución automatizada y tiene acceso a ArcGIS, puede hacerlo con la herramienta Agregar coordenadas XY tinyurl.com/38jm55k , que debería hacer ese paso por usted.
scw
Una consideración importante es obtener su archivo Excel en un formato adecuado para el archivo de forma ESRI primero: existen limitaciones en los nombres de columna, la longitud de los nombres y si está utilizando la herramienta Agregar XY la forma en que ESRI automatiza el tipo de campo que podría causar cuestiones. webhelp.esri.com/arcgisdesktop/9.2/…
spg
3
Servicio en línea para ayudar a construir un archivo vrt con el formato correcto
matt wilkie
9

Puede usar el complemento de texto delimitado que viene con QGIS (http://qgis.org ) para cargar el archivo de texto y luego guardarlo como un archivo de forma.

gsherman
fuente
A menudo estoy plagado de errores de analizador usando esta herramienta. ¿Algún consejo?
fmark
1
¿Tienes ejemplos específicos?
gsherman
@fmark: también recibo estos errores, y generalmente se debe a que MS Excel maneja el csv
dassouki el
6

Aunque no desde la línea de comandos, puede hacerlo dentro de la aplicación ArcGIS. Desde 9.3.1, solo agregue el XLS directamente en ArcMap. Cree una capa de eventos XY desde XLS (es decir, elija las columnas X, Y y establezca su referencia espacial). Luego exporte esta capa de eventos XY a un nuevo .shp. Esto podría automatizarse fácilmente con un simple script de Python / VBA o un modelo en modelbuilder . Estaremos encantados de ayudar en este flujo de trabajo básico si necesita más información.

Simon
fuente
1
Si usa Python, podría ejecutar una herramienta de geoprocesamiento desde la línea de comandos.
jswise
6

Busqué pero no pude encontrar una página de ayuda en Mostrar datos XY en la ayuda web, pero el proceso es simple.

  1. Use Agregar datos (o arrastre y suelte desde la ventana Catálogo) para buscar su hoja de trabajo (dentro de la hoja de cálculo) y agregarla a su mapa
  2. Haga clic con el botón derecho para elegir y usar Mostrar datos XY para agregar una capa de evento
  3. Haga clic con el botón derecho en la capa de evento que acaba de crear y use Datos | Exportar datos para crear un archivo de forma

Solo necesita el nivel de licencia ArcView (Básico) de ArcGIS (for) Desktop para hacer esto.

PolyGeo
fuente
¿Debo hacer algo con las columnas superiores que no forman parte de los datos?
Zoran
¿Qué dos columnas no son parte de sus datos? El procedimiento que describí debería usar las columnas largas / largas que elija para generar las geometrías de puntos y luego, creo, almacenar el resto como atributos de ellas. Lo mejor es probarlo y, si el resultado no es el esperado, describa lo observado frente a lo esperado.
PolyGeo
Creo que leí mal la parte superior para dos, y supongo que te refieres a la fila superior (de encabezados). Deben convertirse en nombres de campo después de Agregar datos.
PolyGeo
No estoy seguro si este sigue siendo el caso, pero los espacios en los nombres de encabezado en el archivo de Excel solían ser un verdadero dolor de cabeza para Agregar XY.
Chad Cooper
1
Cargar archivos de Excel directamente en ArcGIS funciona maravillosamente bien, ¡excepto cuando no lo hace! Cosas a tener en cuenta: fechas destrozadas, números truncados. El primer paso para la resolución de problemas es siempre exportar a CSV con todas las columnas definidas como texto y cargarlas en su lugar para ver si el problema persiste. Esa advertencia a un lado. Mostrar como X / Y funciona muy bien.
Matt wilkie
4

Siempre existe la opción aventurera. Podrías escribir el archivo de forma tú mismo. ESRI publica la especificación para shapefiles, que puede leer aquí:

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

Probablemente también deba escribir un archivo DBF. Puedes leer sobre el formato aquí:

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

Sin duda, esto es exagerado, pero le daría la ventaja de tener control sobre todo el proceso.

Scott Wisniewski
fuente
De hecho, estoy tendiendo de esa manera: ¡aunque usaré OGR en lugar de escribir el shapefile directamente!
fmark
2
Excel probablemente puede escribir el DBF directamente, aunque he tenido diferentes niveles de éxito al usar esos DBF como el componente DBF de un shapefile.
mwalker
Excel no escribe archivos dbf.
user30184
3

Personalmente prefiero usar FME de Safe Software (http://www.safe.com), que no solo me permite trazar puntos a partir de valores XY, sino que me brinda la flexibilidad de transformar las coordenadas de una proyección a otra antes de trazar, especificar el tipo de delimitador, línea de inicio (en caso de que el archivo de texto tenga información de encabezado), adjunte atributos en caso de que el archivo de texto tenga X, Y, información de atributo para los datos del punto. En caso de que desee visualizar estos datos en Google Earth, puede escribirlos en formato KML mientras especifica también el estilo de punto KML. ~ SRG

SRG
fuente
2

Si desea realizar algún otro procesamiento en los datos x, y, puede cargar los datos en postgres, usar geomfromtext con concatenación para crear un tipo de datos de geometría y luego usar pgsql2shp para exportar a la forma. Este enfoque también le permitirá retener datos heterogéneos del sistema de referencia espacial en otra columna, que luego podría usar para convertir todos sus puntos en un sistema de referencia común dentro de la base de datos antes de exportar a la forma. Me doy cuenta de que esto implica más pasos que ogr / gdal, pero le dará mucha más flexibilidad.

John Powell
fuente
He usado este enfoque en el pasado, y es bueno. Creo que mi obstáculo constante aquí es detectar los tipos de datos de Excel de manera confiable ...
fmark
1
Supongo que podría escribir algo en excel vba para reorganizar sus columnas primero de modo que la fecha, x, y siempre fueran las primeras 3 columnas. Sin embargo, sin algún tipo de convenciones de nombres de columnas, creo que sería difícil automatizar por completo lo que tienes en mente.
John Powell el
1

¿Qué pasa con la carga de sus archivos CSV en Spaceiallite y luego usar OGR o QGIS para exportar a un shapefile?

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

Incluso puede exportar desde spaceialite a un shapefile directamente.

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

TheSteve0
fuente
Spatialite puede importar archivos de Excel directamente si son del formato antiguo .xls (Excel 97-2003). Las coordenadas X e Y deben convertirse en geometrías inte con SQL después de la importación inicial.
user30184
Si no le importa usar Java, puede usar el proyecto POI para separar los archivos de Excel y luego usar GeoTools para escribir el nuevo
archivo de forma
0

Para una transformación más básica, puede usar el transformador de reemplazo de punto 2D en FME 2013. Debe señalar en qué columnas se ubican los valores X e Y y luego FME transformará estos valores en, por ejemplo, un archivo de forma con puntos.
Los nombres y tipos de columna se pueden configurar según sea necesario

Congelar
fuente