[Python] 우버의 H3 파이썬 코드
우버가 개발한 H3은 배민에서 배차 시 사용하는 라이브러리임
(주)우아한형제들 - 기술과혁신 웹진
들어가며 디지털 경제의 확장과 팬데믹으로 인한 라이프스타일의 급격한 변화는 우리의 일상을 근본적으로 변모시켰다. 이런 변화의 최전선에는 배달 서비스 산업이 있었으며, 그 결과는 ...
webzine.koita.or.kr
https://techblog.woowahan.com/2608/
배달아~ 배달 가는길 알려줘!(단호함) | 우아한형제들 기술블로그
서론 배민라이더스에서는 배달거리를 업소와 고객의 주소 정보를 이용해서 지구는 적당히(?) 둥글다는 계산으로 거리계산을 하고 있습니다. ~대충대충코드~ double theta = from.getLongitude() - to.getLongi
techblog.woowahan.com
이전 글에서 H3에 대해 살펴보았음
[GIS] 우버의 H3 grid와 파이썬 패키지
https://youtu.be/ay2uwtRO3QE 1. H3란 무엇인가정의:Uber가 개발한 Hexagonal Hierarchical Spatial Index 시스템.지구 표면을 6각형 그리드(hexagon grid) 로 나누어 계층적으로 관리하는 오픈소스 공간 인덱스 라이브러
kimhongsi.tistory.com
[GIS] Uber의 H3이란? : 지구를 육각형으로 나눈 체계
Uber의 H3는 고해상도 계층적 헥사곤 그리드(Hierarchical Hexagon Grid) 시스템으로, 지리 공간 데이터를 효율적으로 인덱싱하고 분석하기 위해 개발된 오픈 소스 라이브러리입니다. H3는 지리적 영역을
kimhongsi.tistory.com
https://kimhongsi.tistory.com/entry/GIS-S2-H3-%EA%B3%B5%EA%B0%84-%EC%9D%B8%EB%8D%B1%EC%8B%B1
[GIS] 구글의 S2, 우버의 H3 공간 인덱싱
S2와 H3는 둘 다 지리공간 데이터를 효율적으로 관리하고 분석하기 위해 고안된 공간 인덱싱 시스템입니다. 이 두 시스템은 지리적 데이터를 다양한 크기의 셀로 나누어 계층적으로 구조화함으
kimhongsi.tistory.com
https://uber.github.io/h3-py/api_quick.html
API Quick Reference — h3-py
API Quick Reference We list the functions that are shared between the provided APIs. The APIs differ only in their input/output types (e.g., int vs. str or list vs numpy.array). These functions correspond to those explained in the H3 C library documentatio
uber.github.io
위 링크는 우버 h3 공식문서
각 해상도별 육각형 그리드 한 면의 길이
해상도 | edge 길이 (Km) |
0 | 1107.7126 |
1 | 418.6760 |
2 | 158.2447 |
3 | 59.8109 |
4 | 22.6064 |
5 | 8.5444 |
6 | 3.2295 |
7 | 1.2206 |
8 | 0.4614 |
9 | 0.1744 |
10 | 0.0659 |
11 | 0.0249 |
12 | 0.0094 |
13 | 0.0036 |
14 | 0.0013 |
15 | 0.0005 |
1. 위경도 → H3 인덱스 변환 (geo_to_h3
)
- 위도(lat), 경도(lng), 해상도(resolution)를 입력해서 H3 인덱스를 생성
- 실습 예시:
from h3 import h3 h3_index = h3.geo_to_h3(37.5665, 126.9780, 9) # 서울시청 print(h3_index)
2. H3 인덱스 → 위경도 변환 (h3_to_geo
)
- H3 인덱스를 입력해서 중심 위경도 반환
- 실습 예시:
lat, lng = h3.h3_to_geo(h3_index) print(lat, lng)
3. H3 인덱스 → 경계 좌표 얻기 (h3_to_geo_boundary
)
- H3 셀의 경계(폴리곤) 좌표 리스트 반환
- 실습 예시:
boundary = h3.h3_to_geo_boundary(h3_index) print(boundary)
4. 주변 셀 찾기 (k_ring
)
- 특정 H3 인덱스를 중심으로 반경 k만큼의 셀 집합 반환
- 실습 예시:
ring = h3.k_ring(h3_index, 1) # 반경 1 print(ring)
5. 두 셀 사이 거리 계산 (h3_distance
)
- 두 개의 H3 인덱스 간 거리(셀 수) 계산
- 실습 예시:
h3_index_1 = h3.geo_to_h3(37.5665, 126.9780, 9) # 서울시청 h3_index_2 = h3.geo_to_h3(37.5651, 126.9895, 9) # 을지로입구역 근처 distance = h3.h3_distance(h3_index_1, h3_index_2) print(distance)
6. 해상도 변경 (h3_to_parent
, h3_to_children
)
- h3_to_parent: 해상도를 낮춰 부모 셀 찾기
- h3_to_children: 해상도를 높여 자식 셀 리스트 생성
- 실습 예시:
parent = h3.h3_to_parent(h3_index, 8) children = h3.h3_to_children(h3_index, 10) print(parent) print(children)
7. 셀 집합을 폴리곤으로 변환 (h3_set_to_multi_polygon
)
- 여러 H3 인덱스를 하나의 멀티폴리곤(geojson 형식)으로 변환
- 실습 예시:
polygons = h3.h3_set_to_multi_polygon([h3_index], geo_json=True) print(polygons)
8. 기타 확인용
h3_get_resolution(h3_index)
: 해당 인덱스의 해상도 알아내기h3_is_valid(h3_index)
: 유효한 H3 인덱스인지 검사- 실습 예시:
print(h3.h3_get_resolution(h3_index)) print(h3.h3_is_valid(h3_index))