BigQueryGIS에서 OpenStreetMap 데이터를 터치해보세요
7425 단어 BigQueryGISBigQueryOpenStreetMap
소개
⚠️ 다음 내용을 손쉽게 사용하면 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_ways 및 planet_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을 사용하여 표시해 봅시다.
확실히 신주쿠구내의 편의점이 취득되고 있다고 생각합니다.
수수께끼의 갱신 빈도를 먼지하고 있다 ↩
그 밖에도 여러가지 테이블이 있는 것 같습니다만 잘 모르겠습니다. 아는 사람 가르쳐. ↩
Reference
이 문제에 관하여(BigQueryGIS에서 OpenStreetMap 데이터를 터치해보세요), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/taniyam/items/fd62e917ed1f326d7f71
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
CREATE FUNCTION osm_test.get(
key STRING, tags ARRAY<STRUCT<k STRING, v STRING>>
) AS ((
SELECT v
FROM UNNEST(tags)
WHERE key = k
));
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"
Reference
이 문제에 관하여(BigQueryGIS에서 OpenStreetMap 데이터를 터치해보세요), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/taniyam/items/fd62e917ed1f326d7f71텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)