Bigquery GIS, как сгруппировать координаты по стране, используя набор данных Openstreetmap - PullRequest
0 голосов
/ 10 апреля 2020

Я работаю с набором данных openstreetmap в Bigquery, я сделал запрос, который возвращает список, подобный этому

вот запрос, который я использую

SELECT
  ar.key,
  ar.value,
  osm_id,
  osm_way_id,
  ST_CENTROID(geometry) AS center_location
FROM
  `bigquery-public-data.geo_openstreetmap.planet_features`,
  UNNEST(all_tags) AS ar
WHERE
 ('amenity') in (
  SELECT
    (key)
  FROM
    UNNEST(all_tags))
    or
     (('suburb') in (
  SELECT
    (value)
  FROM
    UNNEST(all_tags)) or
    ('city') in (
  SELECT
    (value)
  FROM
    UNNEST(all_tags))
    or ('town') in (
  SELECT
    (value)
  FROM
    UNNEST(all_tags))
or ('village') in (
  SELECT
    (value)
  FROM
    UNNEST(all_tags)))

enter image description here

мой вопрос, скажем, у меня есть еще одна таблица со страной, геометрия в виде многоугольника

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

enter image description here

1 Ответ

1 голос
/ 11 апреля 2020

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

Пространственные СОЕДИНЕНИЯ - это объединения двух таблиц с функцией предиката geographi c в предложении WHERE. Например:

-- how many stations within 1 mile range of each zip code?
SELECT
  zip_code AS zip,
  ANY_VALUE(zip_code_geom) AS polygon,
  COUNT(*) AS bike_stations
FROM
  `bigquery-public-data.new_york.citibike_stations` AS bike_stations,
  `bigquery-public-data.geo_us_boundaries.zip_codes` AS zip_codes
WHERE ST_DWithin(
  zip_codes.zip_code_geom,
  ST_GeogPoint(bike_stations.longitude, bike_stations.latitude),
  1609.34)
GROUP BY zip
ORDER BY bike_stations DESC   

вы можете увидеть больше здесь - Использование JOIN с пространственными данными

...