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

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

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

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

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

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

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

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

architecture diagram

⭐ Примечание. API наборов данных Карт — это продукт, предшествующий общедоступной версии . Подробности смотрите в Условиях обслуживания .

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

Чтобы создать эффективную визуализацию данных с помощью 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 JS API.
    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».

Примечание. Обязательно используйте канал v=beta для реализации Maps JS API.

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.

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

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

Авторы

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