Визуализируйте свои данные с помощью BigQuery и Datasets API

В этом документе представлена ​​эталонная архитектура и пример создания визуализаций картографических данных с данными о местоположении в Google Cloud Platform BigQuery и API наборов данных платформы Google Maps , таких как анализ открытых муниципальных данных, создание карты покрытия телекоммуникаций или визуализация следов движения парка мобильных транспортных средств.

Визуализация картографических данных — мощный инструмент для привлечения пользователей и раскрытия пространственной информации о данных о местоположении. Данные о местоположении — это данные, которые имеют точечные, линейные или полигональные объекты. Например, карты погоды помогают потребителям понимать и планировать поездки, а также готовиться к штормам; Карты бизнес-аналитики помогают пользователям извлечь ценную информацию из анализа данных, а карты телекоммуникаций помогают пользователям понять зону покрытия и качество своих провайдеров в определенной зоне обслуживания.

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

Эталонная архитектура

Разработка приложений с визуализацией больших данных требует двух основных компонентов.

  1. Серверная часть клиента — все данные и услуги серверных приложений, такие как обработка и хранение.
  2. Клиентский клиент — пользовательский интерфейс вашего приложения с компонентом визуализации карты.

Ниже представлена ​​системная диаграмма того, как эти два компонента взаимодействуют с пользователем приложения, Google Cloud и платформой Google Maps для создания большого приложения для визуализации данных.

architecture diagram

Рекомендации по проектированию

Чтобы создать эффективную визуализацию данных с помощью Google Cloud и платформы Google Maps, необходимо учитывать ряд рекомендаций по проектированию.

  1. Размер исходных данных и частота обновления .
    1. Если исходные данные в формате geojson имеют размер <5 МБ или обновляются очень часто, например, прогноз погоды в режиме реального времени, рассмотрите возможность использования данных в качестве клиентской стороны объекта geojson в вашем приложении и их рендеринга с помощью слоя Deck.gl.
    2. Если размер ваших данных превышает 5 МБ и они обновляются не чаще одного раза в час, рассмотрите архитектуру API наборов данных, описанную в этом документе.
      1. Наборы данных поддерживают файлы размером до 350 МБ .
      2. Если размер ваших данных превышает 350 МБ, рассмотрите возможность сокращения или упрощения геометрических данных в исходном файле перед передачей в наборы данных (см. «Сокращение данных» ниже).
  2. Схема и формат
    1. Убедитесь, что ваши данные имеют глобально уникальный идентификатор свойства для каждого объекта. Уникальный идентификатор позволяет вам выбрать и стилизовать определенную функцию или объединить данные с функцией для визуализации, например, стилизовать выбранную функцию при пользовательском событии «щелчок».
    2. Отформатируйте свои данные в формате CSV или GeoJSON в соответствии со спецификацией API наборов данных, используя допустимые имена столбцов, типы данных и типы объектов GeoJSON.
    3. Чтобы упростить создание наборов данных из BigQuery, создайте столбец с именем wkt в экспортированном SQL CSV. Наборы данных поддерживают импорт геометрии из CSV в формате Well-Known Text (WKT) из столбца с именем wkt .
    4. Убедитесь, что ваши данные имеют допустимую геометрию и типы данных. Например, GeoJSON должен быть в системе координат WGS84, порядке намотки геометрии и т. д.
    5. Используйте такой инструмент, как geojson-validate, чтобы убедиться, что все геометрии в исходном файле действительны, или ogr2ogr , чтобы преобразовать исходный файл между форматами или системами координат.
  3. Сокращение данных
    1. Минимизируйте количество свойств объектов. Вы можете присоединить дополнительные свойства к объекту во время выполнения с помощью ключа уникального идентификатора ( пример ).
    2. По возможности используйте целочисленные типы данных для объектов свойств, чтобы минимизировать пространство для хранения плиток, сохраняя производительность плиток при загрузке через HTTPS в клиентском приложении.
    3. Упрощение и/или агрегирование очень сложной геометрии объектов; рассмотрите возможность использования функций BigQuery, таких как ST_Simplify, для сложных полигонов, чтобы уменьшить размер исходного файла и повысить производительность карты.
  4. Укладка плитки
    1. API наборов данных Google Maps создает фрагменты карты из исходного файла данных для использования с веб- или мобильным Maps SDK.
    2. Плитки карты — это система индексации на основе масштабирования, которая обеспечивает более эффективные способы загрузки данных в визуальное приложение.
    3. На фрагментах карты могут отсутствовать плотные или сложные объекты при более низких уровнях масштабирования. Когда пользователь уменьшает масштаб штата или страны (например, z5-z12), это может выглядеть иначе, чем при увеличении масштаба до города или района (например, z13-z18).

Пример — железные дороги в Лондоне.

В этом примере мы применим эталонную архитектуру для создания веб-приложения с GCP и Google Maps, которое визуализирует все железные дороги Лондона на основе данных Open Street Map (OSM).

Предварительные условия

  1. Доступ к тестовой среде BigQuery и облачной консоли
  2. Убедитесь, что у вас есть проект GCP и настроен платежный аккаунт.

Шаг 1. Запрос данных в BigQuery

Перейдите к общедоступным наборам данных BigQuery . Набор данных bigquery-public-data и таблица geo_openstreetmap.planet_features содержат все данные Open Street Map (OSM) со всего земного шара, включая все возможные объекты. Откройте для себя все доступные функции для запроса в OSM Wiki, включая amenity , road и landuse .

Используйте Cloud Shell или BigQuery Cloud Console ( https://console.cloud.google.com ), чтобы запросить таблицу с помощью SQL. В приведенном ниже фрагменте кода используется команда запроса bq для запроса всех железных дорог, отфильтрованных только до Лондона, с использованием ограничивающего прямоугольника и функции ST_Intersects() .

Чтобы выполнить этот запрос из Cloud Shell, запустите следующий фрагмент кода, обновив идентификатор проекта, набор данных и имя таблицы для вашей среды.

bq query --use_legacy_sql=false \
--destination_table PROJECTID:DATASET.TABLENAME \
--replace \
'SELECT
osm_id, 
feature_type,
(SELECT value
         FROM   unnest(all_tags)
         WHERE  KEY = "name") AS name,
(SELECT value
         FROM   unnest(all_tags)
         WHERE  KEY = "railway") AS railway,
geometry as wkt
FROM   bigquery-public-data.geo_openstreetmap.planet_features
WHERE ("railway") IN (SELECT key FROM unnest(all_tags)) 
    AND ST_Intersects(
    geometry,
ST_MakePolygon(ST_MakeLine(
      [ST_GeogPoint(-0.549370, 51.725346),
      ST_GeogPoint(-0.549370, 51.2529407),
      ST_GeogPoint(0.3110581, 51.25294),
      ST_GeogPoint(0.3110581, 51.725346),
      ST_GeogPoint(-0.549370, 51.725346)]
    ))
   )' 

Запрос возвращает:

  1. уникальный идентификатор для каждой функции osm_id
  2. feature_type например, точки, линии и т. д.
  3. name объекта, например, Paddington Station
  4. Тип railway , например, главная, туристическая, военная и т. д.
  5. wkt объекта — геометрия точки, линии или полигона в формате WKT. WKT – это стандартный формат данных, возвращаемый столбцами BigQuery Geography в запросе.

Примечание. Чтобы визуально проверить результаты запроса перед созданием набора данных, вы можете быстро визуализировать свои данные на информационной панели BigQuery с помощью Looker Studio .

Чтобы экспортировать таблицу в CSV-файл в сегменте Google Cloud Storage, используйте команду bq Extract в Cloud Shell:

bq extract \
--destination_format "CSV" \
--field_delimiter "," \
--print_header=true \
PROJECTID:DATASET.TABLENAME \
gs://BUCKET/FILENAME.csv

Примечание. Вы можете автоматизировать каждый шаг с помощью Cloud Scheduler, чтобы регулярно обновлять данные.

Шаг 2. Создайте набор данных из файла CSV.

Затем создайте набор данных платформы Google Maps на основе результатов запроса в Google Cloud Storage (GCS). Используя API наборов данных , вы можете создать набор данных , а затем загрузить в него данные из файла, размещенного на GCS.

Для начала включите API наборов данных Карт в своем проекте GCP и просмотрите документацию по API . Существуют клиентские библиотеки Python и Node.js для вызова API наборов данных из логики в серверной части вашего приложения. Кроме того, существует графический интерфейс наборов данных для создания наборов данных вручную в Cloud Console.

После завершения загрузки набора данных вы можете просмотреть свой набор данных в графическом интерфейсе наборов данных.

Dataset preview

Шаг 4. Свяжите свой набор данных с идентификатором карты.

После создания набора данных вы можете создать идентификатор карты со связанным стилем карты. В редакторе стилей карты вы можете связать идентификатор карты и стиль с набором данных. Здесь вы также можете применить стили карты на основе облака, чтобы настроить внешний вид вашей карты.

Шаг 5. Создайте визуализацию карты клиентского приложения.

Наконец, вы можете добавить набор данных в клиентское приложение визуализации данных с помощью Maps JS API . Инициализируйте объект карты, используя идентификатор карты, связанный с вашим набором данных из предыдущего шага. Затем установите стиль и интерактивность слоя набора данных. Для получения более подробной информации ознакомьтесь с полным руководством по стилизации на основе данных с помощью наборов данных .

Вы можете настроить стиль, добавить обработчики событий для динамического изменения стиля и многое другое с помощью Maps JS API. См. примеры в документации . Ниже мы определим функцию setStyle для создания стиля точечного и линейного объекта для этого примера на основе атрибута «feature_type».

function setStyle(params) {
  const map.getDatasetFeatureLayer("your-dataset-id");
  const datasetFeature = params.feature;
  const type = datasetFeature.datasetAttributes["feature_type"];
if (type == "lines") {
           return {
             fillColor: "blue",
             strokeColor: "blue",
             fillOpacity: 0.5,
             strokeWeight: 1,
           }
         } else if (type == "points") {
           return {
             fillColor: "black",
             strokeColor: "black",
             strokeOpacity: 0.5,
             pointRadius: 2,
             fillOpacity: 0.5,
             strokeWeight: 1,
           }
     }
}

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

Этот код выше при инициализации в одностраничном веб-приложении дает следующий визуальный элемент данных карты:

london railway map

Отсюда вы можете расширить визуализацию карты с помощью функции setStyle(), добавив логику к функциям фильтрации, добавив стили на основе взаимодействия с пользователем и взаимодействуя с остальной частью вашего приложения.

Заключение

В этой статье мы обсудили эталонную архитектуру и пример реализации приложения для визуализации больших данных с использованием Google Cloud и платформы Google Maps. Используя эту эталонную архитектуру, вы можете создавать приложения для визуализации данных о местоположении на основе любых данных в GCP BigQuery, которые будут работать на любом устройстве с помощью API наборов данных Google Maps.

Следующие действия

Дальнейшее чтение:

Авторы

Основные авторы: