Conversión de datos vectoriales de GIS a KML

Mano Marks, equipo de API de Google Geo
Septiembre de 2009

Objetivo

Este tutorial explica los conceptos básicos para convertir datos vectoriales GIS en KML a través de la biblioteca de código abierto OGR. Si bien estas bibliotecas se pueden usar con la mayoría de los archivos GIS, este instructivo se centrará en trabajar con archivos shapefile ESRI.

Introducción

Los datos geográficos están disponibles de muchas formas en la web. KML es uno de los formatos de archivo más comunes, pero también se utilizan muchos otros tipos de archivos. Las grandes empresas, los gobiernos y las ONG usan sistemas de información geográfica para crear sus mapas, junto con formatos de archivo especializados. Estas aplicaciones suelen requerir capacitación especializada o, al menos, una cantidad significativa de tiempo para aprender. Las propias pueden ser bastante costosas. Por otro lado, son muy potentes y proporcionan un amplio conjunto de herramientas de creación de mapas para el creador de mapas profesional.

Muchas entidades gubernamentales liberan parte de sus datos GIS para uso público. Portales como Data.gov, el sistema de información geográfica de Massachusetts y DataSF facilitan la búsqueda de datos para sus comunidades. En este artículo, se describe cómo convertir datos vectoriales, es decir, datos compuestos por formas geométricas simples, como puntos, líneas y polígonos, en KML. De esta manera, tendrá acceso a una variedad de tipos de datos diferentes, entre los que se incluyen:

  • Datos de parcelas que representan los límites de la parcela
  • Datos de incidentes, como informes de delitos
  • Datos de límites, para límites de municipios, estados, condados, provincias, etc.
  • Datos de rutas, incluidas las rutas planificadas y las existentes
  • Permisos de construcción, que indican la emisión de permisos
  • Datos de salud, como describir dónde hay incidentes de brotes de gripe

Hay muchas aplicaciones excelentes para la conversión de datos, como Google Earth Pro, shp2kml, KML2KML, Arc2Earth y muchas más. Este artículo se centra en la conversión de datos vectoriales a KML para usarlos en Google Earth o Google Maps, con las utilidades de código abierto de la Biblioteca de abstracción de datos geoespaciales(GDAL) de la línea de comandos, y tal vez te inspire a incorporar esas bibliotecas en tus propias aplicaciones.

Nota sobre los tipos de archivo

Si bien en este artículo se explican los pasos que debe seguir para convertir ESfiles de ESRI a KML, las utilidades de GDAL, en particular, OGR, se pueden usar para convertir desde una gran variedad de tipos de archivos, incluidos los de CSV, PostGRES/PostGIS y una variedad de otros formatos. Se admiten la mayoría de los principales formatos de datos que encontrará. Si encuentras un formato que no es compatible, puedes escribir un controlador para OGR, ya que es una biblioteca de código abierto.

Archivos de formas

El formato de archivo shapefile popular de ESRI es uno de los formatos de datos GIS más comunes. Si bien técnicamente es un archivo shapefile con una extensión .shp, los archivos .shp no se pueden abrir por sí solos. Requiere al menos un archivo .dbf y .shx, y también se requiere una variedad de otros archivos para una variedad de propósitos. Cuando veas una referencia a un archivo shapefile, casi siempre significa una colección de archivos (generalmente en un archivo comprimido de algún tipo) para mantenerlos juntos, y es por eso que usaremos el término shapefile en el resto de este artículo.

Los archivos shapefile contienen una gran cantidad de información sobre las geografías que describen. Describen las geometrías reales, los metadatos sobre las geometrías y la información sobre el sistema de referencia espacial utilizado, así como muchos otros aspectos de los datos. Para los fines de este artículo, nos enfocaremos principalmente en las geometrías, los metadatos y el sistema de referencia espacial.

Las geometrías y los metadatos son conceptos simples. Las formas geométricas son puntos, líneas y polígonos que pueden expresarse fácilmente en KML. Los metadatos son datos sobre los datos, a menudo usados para filtrar o consultar. Por ejemplo, una línea que describe una ruta puede tener metadatos sobre el tipo de ruta (calle municipal, autopista nacional, carreteras, etc.), los límites de velocidad, quién la financia, su tamaño, etc.

Los sistemas de referencia espacial (SRS) se usan para identificar los sistemas de coordenadas y las proyecciones que se usan para crear los datos vectoriales. En KML se utilizan la latitud y longitud en un sistema de coordenadas WGS84. Sin embargo, existen otras formas de identificar coordenadas en un mapa. Algunos de los más populares son los siguientes: Universal Transverse Mercator, la Red Británica Nacional y los sistemas de plano estatal. Para convertir los datos en KML, tal vez necesites identificar esa información. KML solo admite WGS84. Normalmente, los shapefiles llevarán esa información junto con ellos, a menudo en un archivo .prj, y la OGR puede detectarla desde allí. Sin embargo, a veces es necesario identificar el SRS. A veces, la fuente de datos proporciona esto de alguna forma, ya sea en la página desde la que lo descargas, en un documento Léame con la descarga o algún otro formato. En general, esto es suficiente. El sitio Referencia espacial contiene más información acerca de SRS y tiene una referencia que te permite buscar sistemas de referencia individuales.

ogr2ogr

GDAL proporciona un poderoso conjunto de bibliotecas para trabajar con datos vectoriales. En particular, ogr2ogr es una potente utilidad para la conversión de datos. Muchas aplicaciones, incluidas algunas de las que se mencionaron antes, incorporan GDAL/OGR.

Para comenzar, descarga y, luego, instala GDAL. Luego, necesitará un archivo shapefile. Para los fines de este instructivo, intenta usar una de DataSF. En el siguiente ejemplo, se usa el shapefile realtor_neighborhoods, que se puede obtener, tras aceptar la licencia, aquí. Una vez que hayas descargado el archivo, descomprímelo en un directorio que puedas recordar. Abra una línea de comandos y navegue al directorio en el que ingresó los datos. Ahora viene la parte divertida.

ogr2ogr se puede usar desde la línea de comandos con facilidad. Sigue estos pasos para convertir realtor_neighborhoods de un archivo shapefile a KML:

ogr2ogr -f "KML" -where "NBRHOOD='Telegraph Hill'" realtor_neighborhoods.kml realtor_neighborhoods.shp

Este es un desglose de lo que hace ese comando:

  • ogr2ogr: Este es el comando principal.
  • -f "KML: establece el formato de salida en KML.
  • -where "NBRHOOD='Telegraph Hill'": Esta es una cláusula where opcional, como en SQL. Básicamente, te permite consultar los datos según los metadatos. Funciona con shapefiles y otros tipos de archivos que admiten consultas. En este caso, se consulta el campo NBRHOOD y solo se seleccionan los atributos que tienen un NBRHOOD de Telegraph Hill. Si no configuras ese parámetro, ogr2ogr mostrará todos los polígonos del vecindario.
  • realtor_neighborhoods.kml: Es el nombre del archivo de salida. El nombre del archivo de salida es el primero.
  • realtor_neighborhoods.shp: Es el nombre del archivo de entrada. El archivo .shp representa todo el archivo shapefile.

Eso es todo, es muy simple. Este comando escribe un archivo KML que se ve de la siguiente manera:

<?xml version="1.0" encoding="utf-8" ?>
<kml xmlns="http://www.opengis.net/kml/2.2">
  <Document><Folder><name>realtor_neighborhoods</name>
    <Schema name="realtor_neighborhoods" id="realtor_neighborhoods">
      <SimpleField name="Name" type="string"></SimpleField>
      <SimpleField name="Description" type="string"></SimpleField>
      <SimpleField name="OBJECTID" type="float"></SimpleField>
      <SimpleField name="NBRHOOD" type="string"></SimpleField>
      <SimpleField name="SFAR_DISTR" type="string"></SimpleField>
    </Schema>
    <Placemark>
      <ExtendedData><SchemaData schemaUrl="#realtor_neighborhoods">
        <SimpleData name="OBJECTID">81</SimpleData>
        <SimpleData name="NBRHOOD">Telegraph Hill</SimpleData>
        <SimpleData name="SFAR_DISTR">District 8 - Northeast</SimpleData>
      </SchemaData></ExtendedData>
      <Polygon><outerBoundaryIs><LinearRing><coordinates>-122.41041847319012,37.805924016582715,0 -122.407203813674,37.806324902060979,0 -122.40667792852096,37.803710121958744,0 -122.40348255423899,37.804117462290641,0 -122.40237202127015,37.798540648764529,0 -122.40876046662795,37.797723222540775,0 -122.41041847319012,37.805924016582715,0</coordinates></LinearRing></outerBoundaryIs></Polygon>
      <Style><LineStyle><color>ff0000ff</color></LineStyle>  <PolyStyle><fill>0</fill></PolyStyle></Style>
    </Placemark>
  </Folder></Document></kml>

Puedes ver que los metadatos del shapefile se conservaron en los elementos Schema y SimpleData. Para obtener más información acerca del uso de ExtendedData y la preservación de datos personalizados, consulta la sección "Guía para programadores de KML" sobre cómo agregar datos personalizados.

¿Qué sigue?

GDAL/OGR te da mucho poder. En la implementación más simple, ahora puedes convertir todos tus datos a KML para usarlos en Google Earth, Maps o en cualquier otro navegador geográfico compatible con KML. Mejor aún, puedes incorporar las bibliotecas GDAL/OGR en tus aplicaciones, lo que te permite automatizar la conversión de datos GIS en KML y controlar el resultado de esa conversión. Intenta combinarlo con el elemento libkml para tener más control programático sobre la generación del archivo KML.