구글 스프레드 시트를 사용하여, 쉽게 위도 경도 정보를 알아 낼 수 있으나,
구글 스프레드 시트의 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
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의 변수 값으로 지정한다.
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 |