한국 주소 지오코딩을 위한 Python 라이브러리 - Korean address geocoding library
Project description
Gimi9 Geocoder
한국 주소 지오코딩을 위한 Python 라이브러리입니다. 주소를 좌표로 변환하거나, 좌표를 주소로 변환하는 기능을 제공하며, pandas와 geopandas를 활용한 데이터 분석과 GIS 작업에 최적화되어 있습니다.
API 토큰 발급
서비스를 이용하려면 API 토큰이 필요합니다. geocode.gimi9.com에서 API 토큰을 발급받으세요.
주요 기능
- 다양한 입력 형식 지원: 단일 주소(str), 주소 리스트(List[str]), pandas DataFrame 지원
- 지오코딩: 한국 주소를 위도/경도 좌표로 변환
- 역지오코딩: 좌표를 도로명주소와 지번주소로 변환
- Pandas/GeoPandas 통합: DataFrame을 활용한 대량 주소 처리
- 행정구역 정보: 한국 행정구역(시도/시군구/행정동) 형상 조회
- 이력 조회: 행정구역 변화 이력 조회
- 토큰 관리: API 토큰 사용량 통계 확인
설치
pip를 사용하여 라이브러리를 설치할 수 있습니다:
pip install gimi9-geocoder
시작하기
기본 사용법
from gimi9_geocoder.client import GeocoderClient
# 클라이언트 초기화
geocoder = GeocoderClient(token="YOUR_API_TOKEN")
# 단일 주소 지오코딩
result = geocoder.geocode("서울특별시 강남구 테헤란로 123")
print(result)
# 여러 주소 일괄 지오코딩
addresses = [
"서울특별시 강남구 테헤란로 123",
"부산광역시 해운대구 해운대해변로 456",
"대구광역시 중구 동성로 789"
]
result = geocoder.geocode(addresses)
print(result)
DataFrame 활용
import pandas as pd
from gimi9_geocoder.client import GeocoderClient
# 주소가 포함된 DataFrame 생성
data = {
"name": ["서울시청", "부산시청", "대구시청", "인천시청"],
"address": [
"서울특별시 중구 세종대로 110 서울특별시청",
"부산광역시 연제구 중앙대로 1001(연산동) 부산광역시청",
"대구광역시 중구 공평로 88 (동인동1가) 대구광역시청",
"인천광역시 남동구 정각로29 (구월동 1138) 인천광역시청"
]
}
df = pd.DataFrame(data)
# DataFrame을 사용한 지오코딩
geocoder = GeocoderClient(token="YOUR_API_TOKEN")
result = geocoder.geocode(df, address_col='address')
print(result)
# 결과는 GeoPandas DataFrame으로 반환되며, 원본 데이터와 지오코딩 결과가 합쳐집니다
역지오코딩
# 단일 좌표 역지오코딩
result = geocoder.reverse_geocode(127.1146829, 37.5138498)
print(result)
# 결과: 도로명주소와 지번주소 정보가 포함된 GeoDataFrame
# DataFrame을 활용한 대량 역지오코딩
df_coords = pd.DataFrame({
'x': [127.1146829, 129.0440854],
'y': [37.5138498, 35.1021227]
})
result = geocoder.reverse_geocode(x_col="x", y_col="y", coordinates=df_coords)
print(result)
# GeoDataFrame을 활용한 역지오코딩
# geocode 결과를 바로 사용 가능
result = geocoder.reverse_geocode(coordinates=geocoded_gdf)
print(result)
행정구역 형상 조회
# 행정동 형상 조회
regions = geocoder.region(
type="hd", # 행정동
code="1114055000,4111760000", # 행정동 코드
yyyymm="202506" # 기준년월
)
print(regions)
# 시군구 형상 조회
regions = geocoder.region(
type="h23", # 시군구
code="11140,41117", # 시군구 코드
yyyymm="202506"
)
# 시도 형상 조회
regions = geocoder.region(
type="h1", # 시도
code="11,41", # 시도 코드
yyyymm="202506"
)
행정구역 이력 조회
# 특정 좌표의 행정구역 이력 조회
hd_history = geocoder.hd_history(
x=127.075074,
y=37.143834,
yyyymm="202506"
)
print(hd_history)
# 전체 이력 조회 (yyyymm 생략)
hd_history = geocoder.hd_history(x=127.075074, y=37.143834)
print(hd_history)
토큰 사용량 확인
# API 토큰 사용 통계 조회
token_stats = geocoder.token_stats()
print(token_stats)
API 메서드
geocode(locations, address_col=None)
주소를 좌표로 변환합니다.
매개변수:
locations: 단일 주소(str), 주소 리스트(List[str]), 또는 DataFrameaddress_col: DataFrame 사용 시 주소가 있는 컬럼명 (DataFrame 사용 시 필수)
반환값: GeoPandas DataFrame (geometry 컬럼에 Point 객체)
reverse_geocode(x_col, y_col, coordinates=None)
좌표를 주소로 변환합니다.
매개변수:
x_col: X좌표 값 또는 DataFrame의 X좌표 컬럼명y_col: Y좌표 값 또는 DataFrame의 Y좌표 컬럼명coordinates: 좌표가 포함된 DataFrame 또는 GeoDataFrame
반환값: GeoPandas DataFrame (도로명주소, 지번주소 정보 포함)
region(type, code, yyyymm)
행정구역 형상을 조회합니다.
매개변수:
type: 행정구역 유형 ("h1": 시도, "h23": 시군구, "hd": 행정동)code: 행정구역 코드 (쉼표로 구분하여 여러 개 가능)yyyymm: 기준년월 (예: "202506")
반환값: GeoPandas DataFrame (행정구역 형상 정보)
hd_history(x, y, yyyymm=None)
특정 좌표의 행정구역 이력을 조회합니다.
매개변수:
x: X좌표 (경도)y: Y좌표 (위도)yyyymm: 기준년월 (생략 시 전체 이력)
반환값: 행정구역 이력 정보 (dict)
token_stats()
API 토큰 사용량 통계를 조회합니다.
반환값: 토큰 사용량 통계 (dict)
예제
더 자세한 사용 예제는 다음 파일들을 참고하세요:
sample/simple.py: 기본 사용법sample/with_pandas.py: pandas DataFrame 활용sample/notebook.ipynb: Jupyter Notebook 예제 (시각화 포함)
Jupyter Notebook에서 사용하기
# 패키지 설치
%pip install gimi9-geocoder
import pandas as pd
import geopandas as gpd
import folium
from gimi9_geocoder.client import GeocoderClient
# 지오코딩 후 지도 시각화
geocoder = GeocoderClient(token="YOUR_API_TOKEN")
gdf = geocoder.geocode("서울특별시 강남구 테헤란로 123")
# Folium을 사용한 지도 시각화
m = folium.Map(location=[37.5665, 126.9780], zoom_start=10)
for idx, row in gdf.iterrows():
folium.Marker(
location=[row.geometry.y, row.geometry.x],
popup=row['address']
).add_to(m)
m
의존성
이 패키지는 다음 라이브러리들을 사용합니다:
httpx: HTTP 클라이언트pandas: 데이터 조작 및 분석geopandas: 공간 데이터 처리shapely: 기하학적 객체 조작
라이선스
이 프로젝트는 MIT 라이선스 하에 배포됩니다. 자세한 내용은 LICENSE 파일을 참고하세요.
기여하기
기여를 환영합니다! 개선사항이나 버그 수정을 위해 Pull Request를 제출하거나 Issue를 열어주세요.
문의
- 작성자: gisman
- 이메일: gisman@gmail.com
- GitHub: https://github.com/gisman/gimi9_geocoder
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file gimi9_geocoder-0.1.0.tar.gz.
File metadata
- Download URL: gimi9_geocoder-0.1.0.tar.gz
- Upload date:
- Size: 34.2 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.12.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
d1ab1b19aa8ffd0a54499828a27b22fc5d1207af821a7bde158c9e7601e507f7
|
|
| MD5 |
c2894831328fae9843952830715f4067
|
|
| BLAKE2b-256 |
2be5d623785eee15296a6927892762e61ea06e767cc5e56bfc724c7b35f21e9b
|
File details
Details for the file gimi9_geocoder-0.1.0-py3-none-any.whl.
File metadata
- Download URL: gimi9_geocoder-0.1.0-py3-none-any.whl
- Upload date:
- Size: 10.3 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.12.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
310c6a5c8047dbbcfb69d67ccca8b43b408cf0fe60175f20695d0adf12789cbb
|
|
| MD5 |
f4f1ab06e3c9d95d53cc85fbd0b04710
|
|
| BLAKE2b-256 |
247282613d4f40610752ffc433469738e7c75ec660c19bbddafb023ee4115d15
|