Использование BigQuery Geo Viz для визуализации многоугольника и его центроида - PullRequest
1 голос
/ 09 марта 2020

Используя BigQuery Geo Viz,

Я пытаюсь визуализировать многоугольник и его точку центроида одновременно на одной карте.

Я попробовал функцию ST_UNION, но не смог по-настоящему объединить два ГЕОГРАФИЯ.

Любая идея, как визуализировать обе ГЕОГРАФИИ.

Polygon:
POLYGON((-95.7082555 29.9212101, -95.665885 29.907145, -95.7742806214083 29.82947355, -95.7303605 29.8538605, -95.659484 29.901497, -95.662932 29.894958, -95.8441482 29.7265376, -95.646749 29.905534, -95.810012 29.719363, -95.664174 29.883618, -95.639718 29.910045, -95.652796 29.89204, -95.649915 29.886317, -95.650089 29.881912, -95.641443 29.897741, -95.632912 29.911674, -95.653458 29.864561, -95.635056 29.864431, -95.636533 29.757219, -95.623339 29.903466, -95.597235 29.75367, -95.3636989932886 29.8063167449664, -95.575123 29.920295, -95.3944858832763 29.94248964622, -95.147033 30.013214, -95.586588 29.947706, -95.456723 31.3287239, -95.69717 29.96911, -95.674433 29.943844, -95.678203 29.935184, -95.7082555 29.9212101))

Centroid point:
POINT(-95.5606651932764 30.2307053050834)

Ответы [ 2 ]

2 голосов
/ 10 марта 2020

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

#standardSQL
WITH objects AS (
  SELECT 'POLYGON((-95.7082555 29.9212101, -95.665885 29.907145, -95.7742806214083 29.82947355, -95.7303605 29.8538605, -95.659484 29.901497, -95.662932 29.894958, -95.8441482 29.7265376, -95.646749 29.905534, -95.810012 29.719363, -95.664174 29.883618, -95.639718 29.910045, -95.652796 29.89204, -95.649915 29.886317, -95.650089 29.881912, -95.641443 29.897741, -95.632912 29.911674, -95.653458 29.864561, -95.635056 29.864431, -95.636533 29.757219, -95.623339 29.903466, -95.597235 29.75367, -95.3636989932886 29.8063167449664, -95.575123 29.920295, -95.3944858832763 29.94248964622, -95.147033 30.013214, -95.586588 29.947706, -95.456723 31.3287239, -95.69717 29.96911, -95.674433 29.943844, -95.678203 29.935184, -95.7082555 29.9212101))' wkt_string UNION ALL
  SELECT 'POINT(-95.5606651932764 30.2307053050834)'
)
SELECT ST_GEOGFROMTEXT(wkt_string) geo
FROM objects    

, и это можно визуализировать с помощью различных инструментов - как в следующем примере

enter image description here

Для более реалистичного сценария c, когда у вас много полигонов и вам нужно визуализировать их вместе с их центроидами - вы можете использовать подход ниже (основанный на пример с нами заявляет)

#standardSQL
SELECT state_geom state, ST_CENTROID(state_geom) centroid
FROM `bigquery-public-data.utility_us.us_states_area`

с результатом, как показано ниже

enter image description here

, который можно визуализировать, как в следующих примерах (просто показывает несколько штатов, чтобы получить представление)

enter image description here

enter image description here

enter image description here

И, наконец, вы можете комбинировать все такие многоугольники (состояния в этом примере) с их центроидами в красивой визуализации, как показано ниже

enter image description here

Еще одна (из множества бесконечных опций) вещь, которую вы можете сделать, это добавить некоторые метрики и дополнительные атрибуты к запрос - например, state_name и area_land_meters и приведите ваши данные визуализации в движение и с помощью динамических c всплывающих подсказок, как в примере ниже

enter image description here

2 голосов
/ 09 марта 2020

Попробуйте выбрать две структуры по отдельности и использовать UNION ALL, чтобы собрать их в одну визуализацию:

SELECT ST_GeogFromText('POLYGON((-95.7082555 29.9212101, -95.665885 29.907145, -95.7742806214083 29.82947355, -95.7303605 29.8538605, -95.659484 29.901497, -95.662932 29.894958, -95.8441482 29.7265376, -95.646749 29.905534, -95.810012 29.719363, -95.664174 29.883618, -95.639718 29.910045, -95.652796 29.89204, -95.649915 29.886317, -95.650089 29.881912, -95.641443 29.897741, -95.632912 29.911674, -95.653458 29.864561, -95.635056 29.864431, -95.636533 29.757219, -95.623339 29.903466, -95.597235 29.75367, -95.3636989932886 29.8063167449664, -95.575123 29.920295, -95.3944858832763 29.94248964622, -95.147033 30.013214, -95.586588 29.947706, -95.456723 31.3287239, -95.69717 29.96911, -95.674433 29.943844, -95.678203 29.935184, -95.7082555 29.9212101))') t UNION ALL SELECT ST_GeogFromText('POINT(-95.5606651932764 30.2307053050834)') t

Если вы хотите показать геометрию и точку в одной визуализации, она будет работать как Вы можете видеть на изображении ниже:

enter image description here

Пожалуйста, дайте мне знать, если это то, что вы ищете

...