본문 바로가기
  • "You can't manage what you can't measure" Peter Drucker
데이터 분석 (with Rstudio)

건물과 주소 위도 경도 정보 알아내기 2 (with Rstudio API)

by Vitaminymc 2023. 12. 6.
반응형

구글 스프레드 시트를 사용하여, 쉽게 위도 경도 정보를 알아 낼 수 있으나,
구글 스프레드 시트의 Geocode를 일 사용횟수의 제약이 있다.
 

건물과 주소 위도 경도 정보 알아내기 1 (with 구글 스프레드시트) (tistory.com)

 

건물과 주소 위도 경도 정보 알아내기 1 (with 구글 스프레드시트)

구글 지도 (Google map)에서 위도, 경도 확인 구글 지도에서 지명, 주소 검색 예) 국립중앙박물관 마우스 오른쪽 버튼으로 클릭하고, 주변검색 클릭 위도, 경도 표시 예) 국립중앙박물관 : 37.5241, 126.9

logistician.tistory.com

 

[ 구글맵 & 카카오맵 API로 위도 경도 확인]

API를 통해서 요청한 주소에 대한 위도, 경도를 검색하여 제공한다.

[ ggmap (Google map geocode API) ]

library(ggmap)의 geocode 함수 사용

구글맵을 사용하기 위해서는 "https://console.cloud.google.com/"에서 API Key를 부여 받아야 함
API Key를 부여받기 위해서는 '결제'를 연동해야 함

geocode 함수가 위도, 경도를 검색하여 제시한다.

library(ggmap)

library(tidyverse)

### 구글 키
register_google(key = 'Your Google API Key')

### 건물 및 주소 정보
location_name <- c('서울 용산구 서빙고로 137', '국립중앙박물관', '서울 종로구 사직로 161', '광화문',
                   '경북 울릉군 울릉읍 독도이사부길 63', '독도')

lat <- 0

lon <- 0

### data.frame으로 변환
input_loca <- data.frame(location_name, lat, lon)


### 데이터 열 수 확인
no_row <- nrow(input_loca)

### 데이터 열 수 만큼 for문 실행하여, 위도 경도 확인
for(i in 1:no_row) {
  
    latlon <- geocode(input_loca$location_name[i])

    latlon_num <- as.numeric(latlon)
    
    cat(input_loca$location_name[i] , "=", latlon_num , "\n" )
    
    input_loca$lon[i] <- latlon_num[1]
    
    input_loca$lat[i] <- latlon_num[2]
    
}

### 결과 확인
input_loca

 

ℹ <https://maps.googleapis.com/maps/api/geocode/json?address=%EC%84%9C%EC%9A%B8+%EC%9A%A9%EC%82%B0%EA%B5%AC+%EC%84%9C%EB%B9%99%EA%B3%A0%EB%A1%9C+137&key=xxx>
서울 용산구 서빙고로 137 = 126.9822 37.52304 
ℹ <https://maps.googleapis.com/maps/api/geocode/json?address=%EA%B5%AD%EB%A6%BD%EC%A4%91%EC%95%99%EB%B0%95%EB%AC%BC%EA%B4%80&key=xxx>
국립중앙박물관 = 126.9805 37.52385 
ℹ <https://maps.googleapis.com/maps/api/geocode/json?address=%EC%84%9C%EC%9A%B8+%EC%A2%85%EB%A1%9C%EA%B5%AC+%EC%82%AC%EC%A7%81%EB%A1%9C+161&key=xxx>
서울 종로구 사직로 161 = 126.9769 37.58085 
ℹ <https://maps.googleapis.com/maps/api/geocode/json?address=%EA%B4%91%ED%99%94%EB%AC%B8&key=xxx>
광화문 = 126.9768 37.57588 
ℹ <https://maps.googleapis.com/maps/api/geocode/json?address=%EA%B2%BD%EB%B6%81+%EC%9A%B8%EB%A6%89%EA%B5%B0+%EC%9A%B8%EB%A6%89%EC%9D%8D+%EB%8F%85%EB%8F%84%EC%9D%B4%EC%82%AC%EB%B6%80%EA%B8%B8+63&key=xxx>
경북 울릉군 울릉읍 독도이사부길 63 = 131.9515 37.43143 
ℹ <https://maps.googleapis.com/maps/api/geocode/json?address=%EB%8F%85%EB%8F%84&key=xxx>
독도 = 131.8668 37.24294
location_name lat lon
서울 용산구 서빙고로 137 37.52304 126.9822
국립중앙박물관 37.52385 126.9805
서울 종로구 사직로 161 37.58085 126.9769
광화문 37.57588 126.9768
경북 울릉군 울릉읍 독도이사부길 63 37.43143 131.9515
독도 37.24294 131.8668

 

구글맵 국립중앙박물관


[ Kakao map 카카오맵 API ]

먼저, 카카오 디벨로퍼스에서 REST API Key를 발급받아야 한다.
https://developers.kakao.com/

 

Kakao Developers

카카오 API를 활용하여 다양한 어플리케이션을 개발해보세요. 카카오 로그인, 메시지 보내기, 친구 API, 인공지능 API 등을 제공합니다.

developers.kakao.com

Kakao 지도 API는 무료로 제공되나,  1일 300,000회 사용 가능

 
REST API Key를 복사하여, R의 변수 값으로 지정한다.

카카오 디벨로퍼스
카카오 디벨로퍼스&amp;nbsp; REST API Key

library(tidyverse)
library(httr)
library(jsonlite)

api_key <- "Your Kakao REST API Key"

local_url <- "https://dapi.kakao.com/v2/local/search/address.json" 

#주소 Dataframe
location_name <- c('서울 용산구 서빙고로 137', '서울 종로구 사직로 161', 
                   '경북 울릉군 울릉읍 독도이사부길 63')

lat <- 0
lon <- 0

input_loca <- data.frame(location_name, lat, lon)

no_row <- nrow(input_loca)

#주소로 위도 경도 찾기
for(i in 1:no_row)
{ addr = input_loca$location_name[i]

parameters <- list(analyze_type = "similar", page = 1, size = 10, query = addr) 

data_list <-
  GET(local_url,
      query = parameters,
      add_headers(Authorization = paste0("KakaoAK ", api_key))) %>% 
  content(as = 'text') %>% 
  fromJSON()

long_value <- as.numeric(data_list$documents$x) 
lat_value <- as.numeric(data_list$documents$y)

cat(input_loca$location_name[i] , "=", lat_value, " ", long_value  , "\n" )

input_loca$lon[i] <- long_value
input_loca$lat[i] <- lat_value

}​
서울 용산구 서빙고로 137 = 37.5247   126.9777 
서울 종로구 사직로 161 = 37.5759   126.9768 
경북 울릉군 울릉읍 독도이사부길 63 = 37.23933   131.8699 
location_name lat lon
서울 용산구 서빙고로 137 37.5247 126.9777
서울 종로구 사직로 161 37.5759 126.9768
경북 울릉군 울릉읍 독도이사부길 63 37.23933 131.8699

 

[ API 세부 정보 확인 ]

API로 Kakao map에서 가져 온 정보를 보면, 위경도가 아닌 다른 정보를 가져올 수도 있다는 것을 알 수 있다.

일반 주소, 도로명 주소 등 다른 정보도 위의 코드를 응용하면 가져올 수 있다.
 
[주요 정보 예시]

  • address.address_name
  • address.region_1depth_name address.region_2depth_name address.region_3depth_h_name
  • address.region_3depth_name address.sub_address_no 
  • address.x        address.y
  • road_address.address_name
  • road_address.building_name
  • road_address.x   road_address.y
  • road_address.zone_no

Kakao 국립중앙박물관 상세 정보

Kakao 광화문(경복궁) 상세 정보
Kakao 독도 상세 정보
대한민국 인공위성 사진 (서울과 독도 표시)

 

대한민국 영토 독도 인공위성 사진

Image source : Leaflet | Tiles © Esri — Source: Esri, i-cubed, USDA, USGS, AEX, GeoEye, Getmapping, Aerogrid, IGN, IGP, UPR-EGP, and the GIS User Community
 
 

728x90