🖥️ IT, 컴퓨터/🐍 Python

[Python] 우버의 H3 파이썬 코드

김 홍시 2025. 4. 26. 20:53
반응형

 

우버가 개발한 H3은 배민에서 배차 시 사용하는 라이브러리임

http://webzine.koita.or.kr/202401-specialissue/%EC%A3%BC%EC%9A%B0%EC%95%84%ED%95%9C%ED%98%95%EC%A0%9C%EB%93%A4

 

(주)우아한형제들 - 기술과혁신 웹진

들어가며 디지털 경제의 확장과 팬데믹으로 인한 라이프스타일의 급격한 변화는 우리의 일상을 근본적으로 변모시켰다. 이런 변화의 최전선에는 배달 서비스 산업이 있었으며, 그 결과는 ...

webzine.koita.or.kr

 

https://techblog.woowahan.com/2608/

 

배달아~ 배달 가는길 알려줘!(단호함) | 우아한형제들 기술블로그

서론 배민라이더스에서는 배달거리를 업소와 고객의 주소 정보를 이용해서 지구는 적당히(?) 둥글다는 계산으로 거리계산을 하고 있습니다. ~대충대충코드~ double theta = from.getLongitude() - to.getLongi

techblog.woowahan.com

 

 

 

이전 글에서 H3에 대해 살펴보았음

https://kimhongsi.tistory.com/entry/%EC%9A%B0%EB%B2%84%EC%9D%98-H3-%ED%8C%8C%EC%9D%B4%EC%8D%AC-%ED%8C%A8%ED%82%A4%EC%A7%80

 

[GIS] 우버의 H3 grid와 파이썬 패키지

https://youtu.be/ay2uwtRO3QE 1. H3란 무엇인가정의:Uber가 개발한 Hexagonal Hierarchical Spatial Index 시스템.지구 표면을 6각형 그리드(hexagon grid) 로 나누어 계층적으로 관리하는 오픈소스 공간 인덱스 라이브러

kimhongsi.tistory.com

 

https://kimhongsi.tistory.com/entry/GIS-Uber%EC%9D%98-H3%EC%9D%B4%EB%9E%80-%EC%A7%80%EA%B5%AC%EB%A5%BC-%EC%9C%A1%EA%B0%81%ED%98%95%EC%9C%BC%EB%A1%9C-%EB%82%98%EB%88%88-%EC%B2%B4%EA%B3%84

 

[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))

 

반응형