BigQueryGIS에서 OpenStreetMap 데이터를 터치해보세요

소개



⚠️ 다음 내용을 손쉽게 사용하면 BigQuery에서 수백 엔 ~의 과금이 발생합니다 ⚠️

OpenStreetMap이란?



유지로 만들어진 오픈 맵 같아요. wiki처럼 누구나 편집 추가할 수 있는 것 같습니다.
지도 정보는 크게 세 개의 객체로 구성되어 있습니다.


개체
대표하는 것
역할
샘플


node
점  
건물, 라벨, 교차로 등
도쿄역

way
선(면)
건물, 도로, 노선, 경계, 강 등의 일부
도쿄 스카이 트리

relation
관계성
하나의 노드나 way로 표현할 수 없는 것
황궁


이러한 객체에 태그를 붙이는 것으로 역할을 명확하게 하고 있습니다.

이 데이터는 BigQuery의 공개 데이터 세트에서 공개됩니다 1.

BigQueryGIS



BigQuery에서는 지리 데이터(GEOGRAPHY 유형)를 처리할 수 있습니다.
이것에 의해, 「어느 점과 어느 점이 얼마나 멀리 있는 것인가?」나 「어느 점으로부터 300m 이내의 특정의 조건을 만족시키는 지점은 몇 있는 것인가」등 SQL로 기술할 수 있습니다.

htps : // c ぉ d. 오, ぇ. 코 m/비g 쿠에 ry/도 cs/레후오렌세/s 단지 rdsql/게오 g라 phy_훈 c치온 s? hl = 그럼
여기에 있는 다양한 함수를 SQL에서 사용할 수 있습니다.

신주쿠구만의 데이터로 좁히기



BigQuery에 저장된 데이터는 전세계 데이터로 되어 있으며, 매번 전체 액세스하면 BQ 요금이 높아집니다.
그러므로 신주쿠구에만 짜 봅시다.

OSM에서 검색한 결과 relation ID1758858이 신주쿠 구의 경계를 나타내는 것으로 나타났습니다.
그렇다면 이것 안쪽의 node, way, relation만을 원합니다.
BigQuery의 공개 데이터 세트는 여기입니다.
planet_nodes, planet_waysplanet_relations은 node, way, relation에 해당합니다 2.

우선, 놀이용의 데이터 세트를 만들어 둡니다. osm_test
일단 node만으로 짜 봅시다.
CREATE TABLE osm_test.nodes AS
WITH area AS (
  SELECT geometry AS shinjuku
  FROM `bigquery-public-data.geo_openstreetmap.planet_relations`
  WHERE id = 1758858
)
SELECT id, all_tags, latitude, longitude
FROM `bigquery-public-data.geo_openstreetmap.planet_nodes`
CROSS JOIN area
WHERE ST_WITHIN(geometry, shinjuku)

297GB=약 $1.5

그러면 osm_test 데이터 세트에 신주쿠 구에만 좁혀진 nodes 테이블이 작성됩니다.
planet_nodes 테이블의 geometry 열은 왜인지 null이 많기 때문에 latitude, longitude를 select하고 있습니다.
기본적으로 GIS의 필터링은 CROSS JOIN으로 결합하고 WHERE 절로 필터링하는 느낌으로 씁니다.
이번에는 신주쿠 지역의 노드 만 필요하기 때문에 ST_WITHIN 함수를 사용했습니다.

편의점 추출



편의점을 나타내는 태그의 key와 value의 조합이 무엇인지 OSM의 wiki로 조사하면,
htps : // 우우키. 오 스테레 t 마 p. 오 rg / うぃき / 그럼 : 타g : 쇼 p % 3D 안녕하세요.
페이지를 찾을 수 있습니다.
분명히 key가 shop이고 value가 convenience의 것을 발견하면 좋을 것 같습니다.
all_tags에서 특정 태그를 추출하기 위해 도우미 함수를 만드는 것이 유용합니다.
CREATE FUNCTION osm_test.get(
  key STRING, tags ARRAY<STRUCT<k STRING, v STRING>>
) AS ((
  SELECT v
  FROM UNNEST(tags)
  WHERE key = k
));

key가 shop이고 value가 convenience를 추출할 뿐!
SELECT
  id,
  osm_test.get('name', all_tags) AS name,
  ST_GEOGPOINT(longitude, latitude) AS point,
FROM osm_test.nodes
WHERE osm_test.get('shop', all_tags) = "convenience"

이대로 잘 모르기 때문에,

BigQuery Geo Viz을 사용하여 표시해 봅시다.

확실히 신주쿠구내의 편의점이 취득되고 있다고 생각합니다.



수수께끼의 갱신 빈도를 먼지하고 있다 

그 밖에도 여러가지 테이블이 있는 것 같습니다만 잘 모르겠습니다. 아는 사람 가르쳐. 

좋은 웹페이지 즐겨찾기