네이버 지도 API, 코엑스 교통, 위성 지도 보기

지도 API를 사용하면 웹 애플리케이션, 앱, 게임 등 다양한 분야에서 지리적인 정보를 표시하고, 지도의 위치, 주소 검색, 경로 탐색, 마커 및 폴리곤 표시 등 다양한 기능도 구현할 수 있습니다. 지도 API 의 기본적인 설명과 네이버 지도 API 와 카카오 지도 API 중 네이버 지도 API 를 활용해 보겠습니다. 23년 7월 Maps – NAVER Cloud Platform 네이버 클라우드 플랫폼 기준으로 작성하였습니다.

네이버 지도 API 로 코엑스 교통지도
네이버 지도 API 로 코엑스 교통지도

 

 

지도 API

지도 API 는 지리적 위치 데이터를 활용하여 웹 애플리케이션에 대화형 지도 기능을 추가하는 도구입니다. 지도 API를 사용하면 사용자 위치, 주소 검색, 경로 탐색, 마커 및 폴리곤 표시 등 다양한 기능을 구현할 수 있습니다. 주로 네이버 지도 API, 카카오 지도 API, 구글 지도 API 등이 널리 사용되며, 각각의 지도 API 는 고유한 특성과 기능을 제공합니다.  즉, 지도 API 를 활용하면 웹사이트나 모바일 앱에 인터랙티브한 지도 기능을 쉽게 추가할 수 있고, 위치 관련 서비스를 개발하는 데 유용합니다.

지도 API 키 생성

대부분의 지도 API 키 는 생성, 발급 과정 후에 사용할 수 있습니다.  네이버 지도 API, 카카오 지도 API, 구글 지도 API 모두 절차가 다르고, API 사용법이 다르기 때문에, 지도 API 공식문서를 확인해서 개발을 해야합니다.  이 글에서는 국내에서 많이 사용하는 네이버 지도 API 키 를 생성하도록 하겠습니다.  다만, 네이버 개발자 센터에서 엔클라우드 로 지도 API 가 이관되면서, 신청하는 절차는 매우 복잡해졌습니다.

지도 API 키 생성: 네이버 지도 API 키 생성

네이버 지도 API 를 사용하기 위해서는 현재는 엔클라우드에서 신청해야 합니다. 엔클라우드에서 네이버 지도 API 를 신청하려면 네이버 클라우드 플랫폼에 접속하고 로그인해야 합니다. 상품 카탈로그에서 “네이버 지도”를 검색하고 해당 상품을 선택한 후, “사용 신청” 버튼을 클릭하여 네이버 지도 API 를 신청합니다. 신청 시 애플리케이션 이름, 서비스 URL, 연락처 등의 정보를 입력하고 약관에 동의해야 합니다. API 사용 신청이 승인되면 클라이언트 아이디와 클라이언트 시크릿이 발급되며, 이를 활용하여 API 를 호출할 수 있습니다. 또한, 엔클라우드에서는 API 호출량에 따라 비용이 발생할 수 있으므로 요금제와 결제 정보를 설정해야 합니다. 엔클라우드에서 제공하는 문서와 가이드를 참고하여 API 를 활용할 수 있습니다.

네이버 엔클라우드 (네이버 지도 API 제공) https://www.ncloud.com

네이버 지도 API: Geocoding, Reverse Geocoding, Static Map

네이버 지도 API에서는 Geocoding, Reverse Geocoding, 그리고 Static Map 기능을 제공합니다. Geocoding은 주소를 좌표로 변환하고, Reverse Geocoding은 좌표를 주소로 변환합니다. 이를 통해 주소와 좌표 간의 변환이 가능합니다. Static Map은 지도 이미지를 생성하여 제공하는 기능으로, 주어진 좌표를 중심으로 특정 영역의 지도 이미지를 생성할 수 있습니다. 이를 통해 다양한 지리정보 관련 작업을 수행할 수 있습니다.

네이버 지도 API 명 네이버 지도 API 설명 포맷
Geocoding 주소의 텍스트를 입력 받아 좌표를 포함한 상세정보들을 제공합니다. JSON
Reverse Geocoding 좌표를 통해 (법정동, 행정동, 지번주소, 도로명주소 등) 주소 정보를 반환합니다. XML,JSON
Static Map 요청된 URL 매개변수를 기반으로 웹페이지에 표시할 수 있는 이미지로 지도를 반환합니다. Binary(PNG/JPG)

네이버 지도 API: Geocoding

위의 3가지 네이버 지도 API 중에서 Geocoding 을 사용해보겠습니다. 사용자로부터 주소를 입력받아 해당 주소의 좌표 정보(주소, 위도, 경도)를 출력하는 기능을 제공합니다. 네이버 지도 API를 활용하여 Geocoding 기능을 사용하며, 코드는 API 요청을 보내고 응답을 처리하여 결과를 출력합니다. 사용자는 ‘quit’을 입력하여 종료할 수 있습니다. 이를 통해 주소와 좌표 정보 간의 변환을 손쉽게 수행할 수 있습니다.   아래의 client_id, client_secret 는 여러분의 네이버 API 키로 변경해야 합니다.


import
 requests
client_id = “YOUR_CLIENT_ID”  # 네이버 애플리케이션의 Client ID
client_secret = “YOUR_CLIENT_SECRET”  # 네이버 애플리케이션의 Client Secret
def get_geocode(address):
    headers = {
        “X-NCP-APIGW-API-KEY-ID”client_id,
        “X-NCP-APIGW-API-KEY”client_secret
    }
    response = requests.get(urlheaders=headers)
    data = response.json()
    if ‘addresses’ in data and len(data[‘addresses’]) > 0:
        result = data[‘addresses’][0]
        print()
        print(f“주소: {result[‘roadAddress’]})
        print()
        print(f“위도: {result[‘y’]})
        print(f“경도: {result[‘x’]})
    else:
        print(“주소 검색에 실패했습니다.”)
# 주소 입력 받고 정보 출력
while True:
    address = input(“주소를 입력하세요 (‘quit’를 입력하면 종료): “)
    if address.lower() == ‘quit’:
        break
    get_geocode(address)
    print()

이 코드의 실행은 서울특별시청 주소와 부산광역시청 주소를 입력하고, 각각의 위도와 경도를 출력해보겠습니다.  서울특별시청 주소를 입력하니, 위도와 경도가 출력되는 것을 확인할 수 있습니다.  이어서 부산광역시청 주소를 입력해도 동일한 방식으로 위도와 경도가 출력됩니다.

네이버 지도 API Geocoding 결과
네이버 지도 API Geocoding 결과

 

이 네이버 지도 API 의 응답에는 아래와 같이 도로명 주소, 지번 주소, 영어주소, X 좌표(경도), Y 좌표(위도), 주소를 이루는 요소 등의 정보를 확인할 수 있습니다.  위의 코드에서는 X, Y 좌표만 사용하였습니다. 상세한 것은 네이버 지도 API 에서 확인할 수 있습니다.

네이버 지도 API 의 응답 바디

{‘status’: ‘OK’, ‘meta’: {‘totalCount’: 1, ‘page’: 1, ‘count’: 1}, ‘addresses’: [{‘roadAddress’: ‘서울특별시 중구 세종대로 110 서울특별시청’, ‘jibunAddress’: ‘서울특별시 중구 태평로1가 31 서울특별시청’, ‘englishAddress’: ‘110, Sejong-daero, Jung-gu, Seoul, Republic of Korea’, ‘addressElements’: [{‘types’: [‘SIDO’], ‘longName’: ‘서울특별시’, ‘shortName’: ‘서 울특별시’, ‘code’: ”}, {‘types’: [‘SIGUGUN’], ‘longName’: ‘중구’, ‘shortName’: ‘중구’, ‘code’: ”}, {‘types’: [‘DONGMYUN’], ‘longName’: ‘태평로1가’, ‘shortName’: ‘태평로1가’, ‘code’: ”}, {‘types’: [‘RI’], ‘longName’: ”, ‘shortName’: ”, ‘code’: ”}, {‘types’: [‘ROAD_NAME’], ‘longName’: ‘세종대로’, ‘shortName’: ‘세종대로’, ‘code’: ”}, {‘types’: [‘BUILDING_NUMBER’], ‘longName’: ‘110’, ‘shortName’: ‘110’, ‘code’: ”}, {‘types’: [‘BUILDING_NAME’], ‘longName’: ‘서울특별시청’, ‘shortName’: ‘서울특별시청’, ‘code’: ”}, {‘types’: [‘LAND_NUMBER’], ‘longName’: ’31’, ‘shortName’: ’31’, ‘code’: ”}, {‘types’: [‘POSTAL_CODE’], ‘longName’: ‘04524’, ‘shortName’: ‘04524’, ‘code’: ”}], ‘x’: ‘126.9783882’, ‘y’: ‘37.5666103’, ‘distance’: 0.0}], ‘errorMessage’: ”}

네이버 지도 API: Static Map 정적 지도

네이버 지도 API의 Static Map 은 정적 지도 이미지를 생성하는 기능을 제공합니다. 정적 지도란, 웹 페이지나 애플리케이션에서 실시간으로 상호작용하지 않고, 단순히 이미지 형태로 지도를 표시하는 것을 의미합니다.  네이버 지도 API의 Static Map을 활용하면 사용자가 입력한 위치 정보를 기반으로 지도 이미지를 생성할 수 있습니다. 다양한 매개변수와 옵션을 설정하여 원하는 지도 스타일과 내용을 표현할 수 있습니다.

네이버 지도 API: Static Map 정적 지도: 주요 기능, 매개변수

지도 중심 설정, 지도 확대/축소 설정, 지도 크기 설정, 지도 유형 설정은 maptype 매개변수를 사용하여 지도의 유형을 설정할 수 있습니다. 일반 지도, 위성 지도, 지적도 등 다양한 유형을 선택할 수 있습니다. 마커 추가는 markers 매개변수를 사용하여 특정 위치에 마커를 추가할 수 있습니다. 이를 통해 특정 장소를 강조할 수 있습니다. 지도 언어 설정 등의  기능을 활용하여 네이버 지도 API의 Static Map은 웹 페이지나 애플리케이션에서 지도 이미지를 쉽게 표시하고 활용할 수 있습니다. 정적인 지도 이미지를 필요로 하는 경우에 유용하게 사용할 수 있는 기능입니다.

아래의 코드는 사용자로부터 주소를 입력받아 해당 주소의 좌표를 네이버 지도 API를 통해 확인하고, 해당 좌표를 기반으로 네이버 지도 API를 호출하여 해당 위치의 지도 이미지를 표시하는 기능을 구현한 예제입니다.


port requests
import io
from PIL import Image
import matplotlib.pyplot as plt
def get_coordinates(address):
    # 네이버 지도 API 설정
    client_id = “YOUR_CLIENT_ID”
    client_secret = “YOUR_CLIENT_SECRET”
    # 네이버 지도 API Geocoding을 이용하여 주소로부터 x, y 좌표 확인
    headers = {
        “X-NCP-APIGW-API-KEY-ID”client_id,
        “X-NCP-APIGW-API-KEY”client_secret
    }
    response = requests.get(geocode_urlheaders=headers)
    data = response.json()
    if ‘addresses’ in data and len(data[‘addresses’]) > 0:
        x = data[‘addresses’][0][‘x’]
        y = data[‘addresses’][0][‘y’]
        return xy
    else:
        return NoneNone
def get_map_image(xy):
    # 네이버 지도 API 설정
    client_id = “YOUR_CLIENT_ID”
    client_secret = “YOUR_CLIENT_SECRET”
    # 좌표 및 API 요청 설정
    headers = {
        “X-NCP-APIGW-API-KEY-ID”client_id,
        “X-NCP-APIGW-API-KEY”client_secret,
    }
    params = {
        “center”f{x},{y},
        “level”12,
        “w”500,
        “h”300,
        “maptype”“traffic”,
        “format”“png”,
        “scale”2,
        “markers”f“type:d|size:mid|pos:{x} {y}|color:red”,
        “lang”“ko”,
        “public_transit”True,
        “dataversion”“”,
    }
    # API 요청 보내기
    response = requests.get(endpointheaders=headersparams=params)
    image_data = io.BytesIO(response.content)
    image = Image.open(image_data)
    # 이미지 화면에 표시하기
    plt.imshow(image)
    plt.axis(‘off’)
    plt.show()
# 주소 입력 받고 지도 이미지 표시하기
while True:
    address = input(“주소를 입력하세요 (‘QUIT’를 입력하면 종료): “)
    if address.upper() == ‘QUIT’:
        break
    xy = get_coordinates(address)
    if x is not None and y is not None:
        get_map_image(xy)
    else:
        print(“주소를 확인할 수 없습니다.”)

이 코드의 실행은 코엑스 주소를 입력하면, 아래와 같은 이미지가 표시되는 것을 확인할 수 있습니다.

네이버 지도 API 로 코엑스 교통량 지도 그리기
네이버 지도 API 로 코엑스 교통량 지도 그리기

 

위의 소스에서 maptype 을 수정하면, 아래와 같이 위성 지도를 표시할 수도 있습니다.

네이버 지도 API 로 코엑스 위성 지도 그리기
네이버 지도 API 로 코엑스 위성 지도 그리기

 

네이버 지도 API: Reverse Geocoding 리버스 지오코딩

위의 3가지 네이버 지도 API 중에서 Reverse Geocoding 을 사용해보겠습니다. 네이버 지도 API의 Reverse Geocoding을 활용하여, 입력된 X 좌표와 Y 좌표에 대한 주소를 출력하는 기능을 구현한 예제입니다. 사용자로부터 X 좌표와 Y 좌표를 입력받고, 해당 좌표를 API에 전송하여 주소를 요청합니다. API로부터 받은 응답은 JSON 형식으로 반환되며, 이를 파싱하여 주소 정보를 추출하여 화면에 출력합니다. 이를 통해 사용자는 입력한 좌표에 대한 주소 정보를 확인할 수 있습니다. 코드는 반복문을 통해 여러 개의 좌표를 입력받을 수 있도록 구성되어 있으며, “QUIT”을 입력하여 입력을 종료할 수 있습니다.   아래의 client_id, client_secret 는 여러분의 네이버 API 키로 변경해야 합니다.

 

import requests
client_id = “YOUR_CLIENT_ID”  # 네이버 애플리케이션의 Client ID
client_secret = “YOUR_CLIENT_SECRET”  # 네이버 애플리케이션의 Client Secret
def get_address(xy):
    url = fhttps://naveropenapi.apigw.ntruss.com/map-reversegeocode/v2/gc?request=coordsToaddr&coords={y},{x}&sourcecrs=epsg:4326&output=json”
    headers = {
        “X-NCP-APIGW-API-KEY-ID”client_id,
        “X-NCP-APIGW-API-KEY”client_secret
    }
    response = requests.get(urlheaders=headers)
    data = response.json()
    if ‘results’ in data and len(data[‘results’]) > 0:
        result = data[‘results’][0]
        print()
        print(f“주소: {result[‘region’][‘area1’][‘name’]} {result[‘region’][‘area2’][‘name’]} {result[‘region’][‘area3’][‘name’]})
        print()
    else:
        print(“주소 변환에 실패했습니다.”)
# 주소 입력 받고 정보 출력
while True:
    x = input(“X 좌표를 입력하세요 (‘QUIT’를 입력하면 종료): “)
    if x.upper() == ‘QUIT’:
        break
    y = input(“Y 좌표를 입력하세요 (‘QUIT’를 입력하면 종료): “)
    if y.upper() == ‘QUIT’:
        break
    get_address(xy)
    print()

이 코드의 실행은 서울특별시청과 부산광역시청의 위도와 경도를 입력하여, 주소를 출력해보겠습니다.  이전의 글에서 지오코딩을 통해서 확인한 위도와 경도를 입력하니, 네이버 지도 API 를 이용하여 주소가 출력되는 것을 확인할 수 있습니다.

네이버 지도 API 리버스 지오코딩 결과
네이버 지도 API 리버스 지오코딩 결과

결론

지도 API는 다양한 애플리케이션에서 지리적인 정보를 활용할 수 있는 강력한 도구입니다. 네이버 지도 API, 카카오 지도 API 등 여러가지 지도 API 가 있습니다만, 그 중에서 네이버 지도 API의 Geocoding 기능을 사용하여 주소를 좌표 정보로 변환하는 파이썬 코드를 만들어봤습니다. 네이버 지도 API 에 요청을 보내고 응답을 처리하여 주소와 좌표 정보를 출력했습니다. 이를 통해 지도 API의 활용 가능성과 사용법에 대한 기본적인 이해를 얻을 수 있었습니다.