Преобразование векторных данных ГИС в KML

Мано Маркс, команда Google Geo API
сентябрь 2009 г.

Задача

В этом учебном пособии вы познакомитесь с основами преобразования векторных данных ГИС в KML с использованием библиотеки с открытым исходным кодом OGR. Хотя эти библиотеки можно использовать с большинством файлов ГИС, в этом руководстве основное внимание будет уделено работе с шейп-файлами ESRI.

Вступление

Географические данные доступны во многих формах в Интернете. KML является одним из наиболее распространенных форматов файлов, но также используются многие другие типы файлов. Крупные компании, правительства и общественные организации используют географические информационные системы для создания своих карт, а также специальные форматы файлов. Эти приложения часто требуют специальной подготовки или, по крайней мере, значительного количества времени для обучения. Проприетарные могут быть довольно дорогими. С другой стороны, они очень мощные и предоставляют богатый набор картографических инструментов для профессионального картографа.

Многие государственные учреждения публикуют часть своих ГИС-данных для общего пользования. Такие порталы, как Data.gov , Massachusetts Geographic Information System и DataSF , упрощают поиск данных для своих сообществ. В этой статье описывается, как преобразовать векторные данные, то есть данные, состоящие из простых геометрических элементов, таких как точки, линии и многоугольники, в формат KML. Это даст вам доступ к различным типам данных, в том числе:

  • Данные об участках, представляющие границы участков застройки
  • Данные об инцидентах, такие как отчеты о преступлениях
  • Граничные данные для границ муниципалитетов, штатов, округов, провинций и т. д.
  • Данные о дорогах, включая планируемые дороги и существующие
  • Разрешения на строительство с указанием мест выдачи разрешений
  • Данные о здоровье, такие как описание случаев вспышки гриппа.

Существует множество отличных приложений для преобразования данных, таких как Google Earth Pro , shp2kml , KML2KML , Arc2Earth и многие другие. В этой статье основное внимание будет уделено преобразованию векторных данных в KML для использования в Google Планета Земля или Google Maps с использованием утилит библиотеки абстрагирования геопространственных данных (GDAL) с открытым исходным кодом из командной строки и, возможно, вдохновит вас на включение этих библиотек в ваши собственные приложения.

Примечание о типах файлов

Хотя в этой статье описаны этапы преобразования шейп - файлов ESRI в KML, утилиты GDAL, в частности OGR , можно использовать для преобразования из самых разных типов файлов, включая CSV , базы данных PostGRES/PostGIS и множество других форматов . . Поддерживается большинство основных форматов данных, с которыми вы столкнетесь. Если вы обнаружите, что формат не поддерживается, вы можете написать драйвер для OGR, так как это библиотека с открытым исходным кодом.

Шейп-файлы

Популярный формат шейп-файлов ESRI является одним из наиболее распространенных форматов данных ГИС. Хотя технически шейп-файл представляет собой один файл с расширением .shp, .shp не может быть открыт сам по себе. Для этого требуется как минимум файл .dbf и .shx, а также множество других файлов, необходимых для различных целей. Поэтому, когда вы видите ссылку на шейп-файл, это почти всегда означает набор файлов, обычно в каком-то заархивированном архиве, чтобы хранить их вместе, и именно так мы будем использовать термин шейп -файл до конца этой статьи.

Шейп-файлы содержат большое количество информации о географии, которую они описывают. Они описывают фактическую геометрию, метаданные о геометрии и информацию об используемой системе пространственной привязки, а также многие другие аспекты данных. Для целей этой статьи нас больше всего будут интересовать геометрия, метаданные и система пространственной привязки.

Геометрия и метаданные — простые понятия. Геометрия представляет собой точки, линии и многоугольники и может быть легко выражена в KML. Метаданные — это данные о данных, которые часто используются для целей фильтрации или запросов. Например, линия, описывающая дорогу, может иметь метаданные о типе дороги (муниципальная улица, национальное шоссе, магистраль и т. д.), ограничениях скорости, кто ее финансирует, ее размер и т. д.

Пространственные системы отсчета (SRS) используются для определения систем координат и проекций, используемых для создания векторных данных. В KML широта и долгота используются в системе координат WGS84. Но есть и другие способы определения координат на карте. К популярным из них относятся: Universal Transverse Mercator , British National Grid и State Plane . Чтобы преобразовать данные в KML, вам может потребоваться идентифицировать эту информацию. KML поддерживает только WGS84. Как правило, шейп-файлы несут эту информацию вместе с собой, часто в файле .prj, и OGR может обнаружить ее оттуда. Однако иногда необходимо идентифицировать SRS. Иногда это предоставляется в той или иной форме источником данных, либо на странице, с которой вы его загружаете, либо в документе readme с загрузкой, либо в каком-либо другом формате. Обычно этого достаточно. Пространственная привязка сайта содержит дополнительную информацию о SRS и справочную информацию, позволяющую искать отдельные системы отсчета.

огр2огр

GDAL предоставляет мощный набор библиотек для работы с векторными данными. В частности, ogr2ogr — мощная утилита для преобразования данных. Многие приложения, в том числе некоторые из упомянутых выше, включают GDAL/OGR.

Для начала скачайте и установите GDAL . Тогда вам понадобится шейп-файл. Для целей этого руководства попробуйте использовать один из DataSF . В приведенном ниже примере используется шейп- realtor_neighborhoods , который можно получить, согласившись с их лицензией, здесь . После того, как вы загрузили файл, разархивируйте его в каталог, который вы запомните. Откройте командную строку и перейдите в каталог, в который вы поместили данные. Теперь самое интересное.

ogr2ogr можно очень легко использовать из командной строки. Вот как можно преобразовать realtor_neighborhoods из шейп-файла в KML:

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

Вот разбивка того, что делает эта команда:

  • ogr2ogr : Это основная команда.
  • -f "KML : устанавливает выходной формат KML.
  • -where "NBRHOOD='Telegraph Hill'" : это необязательное предложение where , как и в SQL. По сути, он позволяет запрашивать данные на основе метаданных. Он работает с шейп-файлами и другими типами файлов, которые поддерживают запросы. В этом случае он запрашивает поле NBRHOOD и выбирает только те объекты, которые имеют NBRHOOD Telegraph Hill. Если вы оставите этот параметр выключенным, ogr2ogr вам каждый полигон соседства.
  • realtor_neighborhoods.kml : это имя выходного файла. Имя выходного файла стоит первым.
  • realtor_neighborhoods.shp : это имя входного файла. Файл .shp представляет собой шейп-файл целиком.

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

<?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>

Вы можете видеть, что метаданные из шейп-файла были сохранены в элементах Schema и SimpleData . Дополнительные сведения об использовании ExtendedData и сохранении пользовательских данных см. в разделе « Добавление пользовательских данных » Руководства разработчика KML.

Что дальше?

GDAL/OGR дает вам огромное количество энергии. В самой простой реализации теперь вы можете преобразовать все свои данные в KML для использования в Google Планета Земля, Картах или любом другом геобраузере, поддерживающем KML. Более того, вы можете включать библиотеки GDAL/OGR в свои приложения, что дает вам возможность автоматизировать преобразование данных ГИС в KML и контролировать результат этого преобразования. Попробуйте объединить его с libkml для еще большего программного контроля над созданием KML.