Нет расчетов LOD. Преобразование набора пространственных данных в табличный формат с помощью JavaScript. Полные фрагменты кода включены.

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

Например, обширное меню выбора данных Tableau включает параметр под названием "Пространственный файл", где указанные типы файлов обычно отображаются на информационных панелях в виде визуализаций карты. Классическим примером этого может быть коллекция признаков GeoJSON, хранящаяся в текстовом файле как объект JSON, содержащий географическую информацию.

(Примечание. Все объекты GeoJSON соответствуют приведенному ниже соглашению.)

{ 
   "type": "FeatureCollection",
   "features": [
      { 
         "type": "Feature",
         "geometry": {...},
         "properties": {...}
      }
   ]
}

Несмотря на то, что Tableau может читать наборы картографических данных, явным ограничением будет его неспособность отображать несколько типов объектов Geometry из одного источника пространственных данных — Polygon MultiPolygon Point MultiPoint LineString MultiLineString GeometryCollection.

Вместо этого пользователи Tableau обычно сталкиваются с приведенным ниже сообщением об ошибке:

Вариант использования: геопространственная визуализация железной дороги в стране, Сингапур

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

Исходные источники данных:

[1]Получено из master-plan-2019-rail-line-layer (Uploaded 2020) и доступно 6 июня 2022 г., которое доступно в соответствии с условиями Singapore Open Data License

[2] Получено из master-plan-2019-rail-station-layer (Uploaded 2020) и доступно 6 июня 2022 г., которое доступно в соответствии с условиями Singapore Open Data License

Детали реализации

По сути, чтобы обойти вышеупомянутую проблему, альтернативным подходом будет ввод геопространственной информации в Tableau в виде отдельных записей (т. е. табличного формата) вместо исходного формата.

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

(Обратите внимание, что в этой статье в качестве формата табличных данных следует выбрать JSON на основе строк. Другие табличные форматы, такие как форматы Excel или CSV, также подойдут.)

Всего в процесс преобразования данных входит 2 шага.

Шаг 1. Извлеките все вложенные объекты Geometry

Как упоминалось ранее, существуют различные типы объектов Geometry — Polygon MultiPolygon Point MultiPoint LineString MultiLineString GeometryCollection

Следовательно, основная цель этого шага — разбить детализацию этих вложенных геометрий так, чтобы в объекте GeoJSON присутствовали только Polygon Point LineString. Фрагмент кода JavaScript для этого выглядит следующим образом (uncombineGeometriesInFeatureCollection(geojsonObj)):

К сведению: исходный файл необработанных данных GeoJSON можно получить из sg-rail-layer-uncombined.geojson.

Шаг 2. Преобразуйте все объекты признаков в массив объектов

После этого фрагмент кода JavaScript ниже transformFeatureCollectionToRowJSONObj(inputGeojsonObj) выполняет итерацию по каждому объекту функции и создает соответствующие записи строк:

Объяснение:

  • Поле F_ID добавляется к каждому объекту, чтобы идентифицировать его «родительский объект» как отдельные записи строк.
  • Следовательно, каждый объект, который не был объединен (например, MultiPolygon в Polygon), помечается полем F_SUBID как его индивидуальный идентификатор при чтении в Tableau.
  • Каждый объект Geometry содержит массив координат с разной степенью глубины (зависит от типа Geometry).
  • Следовательно, каждая пара координат должна быть выведена в виде одной записи строки, чтобы ее можно было правильно интерпретировать в табличном формате (1 пара координат = 1 запись строки).
  • Для каждого объекта функции поля в объекте properties в дополнение к 6 другим полямF_ID F_SUBID Geometry Type PT_ORDER X Y генерируются и выводятся как объект JSON для каждой пары координат.
var obj = {
  "F_ID":0, // Parent feature ID
  "F_SUBID":0, // Nested Geometry ID (before being unmerged)
  "Geometry Type":"", // Point,Polygon or LineString
  "PT_ORDER":0, // Position in array of Geometry Coordinates
  "X": 0, // longitude
  "Y": 0 // latitude
};
var rowObj = {
  ...JSON.parse(JSON.stringify( <properties obj> )), // deep copy
  ...obj
};

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

Доказательство концепции — демонстрация выходных данных Tableau

Чтобы проверить правильность преобразования пространственных данных, в меню выбора данных Tableau импортируйте файл как "JSON-файл":

После размещения каждого измерения, как показано на снимке экрана ниже, все объекты Geometry (т. е. LineString и Point) затем приступят к отображению железнодорожных станций и сети в стране, Сингапуре:

К вашему сведению: Приведенный выше файл Tableau можно загрузить с Tableau Public по ссылке 🔗 Демонстрация смешанных типов геометрии в Tableau (лучше всего просматривать на мониторе рабочего стола/ПК)

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

И вот оно! Большое спасибо за упорство до конца этой статьи! ❤ Надеюсь, вы нашли эту статью полезной, и не стесняйтесь следовать за мной на Medium, если вы хотите больше контента, связанного с географическими информационными системами (ГИС), аналитикой данных и веб-приложениями. Буду очень признателен — 😀

— 🌮 Пожалуйста, купи мне тако ξ(🎀˶❛◡❛)



Дополнительные приемы и обходные пути Tableau можно найти в приведенном ниже списке статей: