구글 스프레드 시트를 사용하여, 쉽게 위도 경도 정보를 알아 낼 수 있으나,
구글 스프레드 시트의 Geocode를 일 사용횟수의 제약이 있다.
건물과 주소 위도 경도 정보 알아내기 1 (with 구글 스프레드시트) (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
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 지도 API는 무료로 제공되나, 1일 300,000회 사용 가능
REST API Key를 복사하여, R의 변수 값으로 지정한다.
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
Image source : Leaflet | Tiles © Esri — Source: Esri, i-cubed, USDA, USGS, AEX, GeoEye, Getmapping, Aerogrid, IGN, IGP, UPR-EGP, and the GIS User Community
'데이터 분석 (with Rstudio)' 카테고리의 다른 글
[Rstudio] 리플렛 지도 위치 표시 (Marking with leaflet package) (0) | 2023.12.19 |
---|---|
[Rstudio] ggplot 그래프 분할 생성 (facet_wrap facet_grid) (1) | 2023.12.18 |
건물과 주소 위도 경도 정보 알아내기 1 (with 구글 스프레드시트) (2) | 2023.12.05 |
[Rstudio] 회귀분석 (Regression Analysis) (1) | 2023.11.14 |
[Rstudio] 상관분석 (Correlation Analysis) (2) | 2023.11.09 |