[공간정보오픈플렛폼]위경도 변환, 주소 변환
공간정보 오픈 플랫폼에서 제공하는 위도, 경도를 주소로 변환하는 방법과 주소를 위도, 경도로 바꾸는 방법을 알아보고자 한다.
회원가입을 한 뒤 위와 같이 접속
api key
key=''
#address
add=c('대구대','경주시 성건동')
post=paste0('http://api.vworld.kr/req/address?service=address&request=getCoord&key=',key,
'&address=',add,'&type=road')
CRS 등 &CRS=EPSG:4326 처럼 추가로 입력하면 된다.
iconv는 인코딩을 변경하는 코드이며, URLencode는 URL에 맞게 변환하는 코드이다.
url=sapply((iconv(post, from = "cp949", to = "UTF-8")),URLencode)
library(XML)
library(rjson)
url_query=sapply(url,function(x){readLines(x,encoding='UTF-8')})
data.frame(dplyr::rbind_list(lapply(
sapply(url_query,function(x){paste0(x,collapse = '')}),
function(x)data.frame(fromJSON(x)))))[,20:21]
URL이 여러개 입력될 것을 고려하여 sapply를 사용하였다.
readLines는 URL을 불러오는 코드이며, fromJSON을 통해 api를 리스트형식으로 받아올 수 있다.
위경도를 주소로 변환
lonlat을 '128.3,38.3'처럼 만들어 post에 입력
입력된 URL을 앞에서와 같이 json형식으로 받아옴.
lonlat=data.frame(dplyr::rbind_list(lapply(sapply(url_query,
function(x){paste0(x,collapse = '')}),
function(x)data.frame(fromJSON(x)))))[,20:21]
lonlat=paste0(lonlat[,1],',',lonlat[,2])
post=paste0('http://api.vworld.kr/req/address?service=address&request=getAddress&key=',key,
'&point=',lonlat,'&type=road')
url=sapply(iconv(post, from = "cp949", to = "UTF-8"),URLencode)
library(XML)
library(rjson)
url_query=sapply(url,function(x){readLines(x,encoding='UTF-8')})
# url_query <- readLines(url,encoding='UTF-8')
data.frame(dplyr::rbind_list(lapply(sapply(url_query,function(x){paste0(x,collapse = '')}),
function(x)data.frame(fromJSON(x)))))
공간정보 오픈플랫폼 오픈API
Geocoder API 2.0 레퍼런스 Geocoder API 2.0 레퍼런스입니다. API 버전 : Geocoder API 2.0 레퍼런스 Geocoder API 1.0 레퍼런스 소개 좌표를 주소로 변환하는 서비스를 제공합니다. 요청URL을 전송하면 지오코딩 서비스를 사용하실 수 있으며 일일 지오코딩 요청건수는 최대 30,000건 입니다. 단, API 요청은 실시간으로 사용하셔야 하며 별도의 저장장치나 데이터베이스에 저장할 수 없습니다. 좌표를 주소정보
www.vworld.kr
'R' 카테고리의 다른 글
[ggplot2] 시각화 정리 (0) | 2019.12.08 |
---|---|
[R][SQL] RMariaDB 외부 접속 설정하기 (0) | 2019.11.29 |
[ggmap] pie chart 그리기 예제 (0) | 2019.11.26 |
ddply와 setDT 비교 (0) | 2019.11.11 |
[공공데이터 포털] 버스 정류소 API 가져오기 (0) | 2019.11.02 |
[ggmap] pie chart 그리기 예제
library(ggplot2)
library(scatterpie)
library(maps)
set.seed(123)
long <- rnorm(50, sd=100)
lat <- rnorm(50, sd=50)
d <- data.frame(long=long, lat=lat)
d <- with(d, d[abs(long) < 150 & abs(lat) < 70,])
n <- nrow(d)
d$region <- factor(1:n)
d$A <- abs(rnorm(n, sd=1))
d$B <- abs(rnorm(n, sd=2))
d$C <- abs(rnorm(n, sd=3))
d$D <- abs(rnorm(n, sd=4))
d$radius <- 6 * abs(rnorm(n))
head(d)
world <- map_data('world')
p <- ggplot(world, aes(long, lat)) +
geom_map(map=world, aes(map_id=region), fill=NA, color="black") +
coord_quickmap()
p + geom_scatterpie(aes(x=long, y=lat, group=region, r=radius),
data=d, cols=LETTERS[1:4], color=NA, alpha=.8) +
geom_scatterpie_legend(d$radius, x=-160, y=-55)
'R' 카테고리의 다른 글
[R][SQL] RMariaDB 외부 접속 설정하기 (0) | 2019.11.29 |
---|---|
[공간정보오픈플렛폼]위경도 변환, 주소 변환 (0) | 2019.11.27 |
ddply와 setDT 비교 (0) | 2019.11.11 |
[공공데이터 포털] 버스 정류소 API 가져오기 (0) | 2019.11.02 |
숫자가 너무커서 제대로 안불러와질 때 (0) | 2019.09.16 |
ddply와 setDT 비교
속도로 보았을 때 ddply 보다 setDT의 속도가 월등히 빠르다. 이에 따라 예제 코드를 아래와 같이 제시한다.
library(plyr)
data(iris)
temp=ddply(iris,.(Species),summarise,mean=mean(Sepal.Length))
temp=data.table::setDT(iris)[,.(mean=mean(Sepal.Length)),'Species']library(plyr)
data(iris)
temp=ddply(iris,.(Species),summarise,mean=mean(Sepal.Length))
temp=data.table::setDT(iris)[,.(mean=mean(Sepal.Length)),'Species']
temp2=reshape2::melt(temp,id='Species')
library(ggplot2)
ggplot(temp2, aes(Species, value, fill=factor(Species)))+
geom_bar(stat='identity', position = 'dodge')+coord_flip()
'R' 카테고리의 다른 글
[공간정보오픈플렛폼]위경도 변환, 주소 변환 (0) | 2019.11.27 |
---|---|
[ggmap] pie chart 그리기 예제 (0) | 2019.11.26 |
[공공데이터 포털] 버스 정류소 API 가져오기 (0) | 2019.11.02 |
숫자가 너무커서 제대로 안불러와질 때 (0) | 2019.09.16 |
apply 와 sapply의 차이 (0) | 2019.07.15 |
[공공데이터 포털] 버스 정류소 API 가져오기
버스 정류소 API를 받으시려면 공공데이터 포털에서 버스 정류소를 검색!
먼저 버스 정류소 API를 받습니다.
API를 받은 뒤 아래와 같이 코딩합니다.
url='http://openapi.tago.go.kr/openapi/service/BusSttnInfoInqireService/getSttnNoList?serviceKey='
library(xml2);library(rvest);library(RCurl);library(XML)
# 도시 코드를 조회합니다.
url='http://openapi.tago.go.kr/openapi/service/BusSttnInfoInqireService/getCtyCodeList?serviceKey='
(raw.data <- xmlTreeParse(paste0(url,api), useInternalNodes = TRUE, encoding = "utf-8"))
#조회한 도시코드를 활용
url='http://openapi.tago.go.kr/openapi/service/BusSttnInfoInqireService/getSttnNoList?serviceKey='
raw.data <- xmlTreeParse(paste0(url,api,'&cityCode=도시코드&numOfRows=1'), useInternalNodes = TRUE, encoding = "utf-8")
rootNode <- xmlRoot(raw.data)
n=as.character(xmlSApply(rootNode[[2]][['totalCount']],xmlValue))
(raw.data <- xmlTreeParse(paste0(url,api,'&cityCode=37060&numOfRows=',n), useInternalNodes = TRUE, encoding = "utf-8"))
rootNode <- xmlRoot(raw.data)
items <- rootNode[[2]][['items']]
data=NULL
for(i in 1:xmlSize(rootNode[[2]][['items']])){
items_temp=xmlSApply(items[[i]],xmlValue)
lat=as.numeric(items_temp[[1]])
lon=as.numeric(items_temp[[2]])
id=items_temp[[3]]
nm=items_temp[[4]]
no=as.numeric(items_temp[[5]])
data=rbind(data,data.frame(lat,lon,id,nm,no))
}
data
#버스 노선정보 또한 같은방법으로
url='http://openapi.tago.go.kr/openapi/service/BusRouteInfoInqireService/getRouteNoList?serviceKey='
(raw.data <- xmlTreeParse(paste0(url,api,'&cityCode=37060&numOfRows=1'), useInternalNodes = TRUE, encoding = "utf-8"))
rootNode <- xmlRoot(raw.data)
(raw.data <- xmlTreeParse(paste0(url,api,'&cityCode=37060&numOfRows=',xmlSApply(rootNode[[2]][['totalCount']],xmlValue)), useInternalNodes = TRUE, encoding = "utf-8"))
rootNode <- xmlRoot(raw.data)
items <- rootNode[[2]][['items']]
xmlSize(rootNode[[2]][['items']])
data2=NULL
for(i in 1:xmlSize(rootNode[[2]][['items']])){
items_temp=xmlSApply(items[[i]],xmlValue)
df=data.frame(t(items_temp),stringsAsFactors = F)
df$endvehicletime=as.numeric(df$endvehicletime)
df$startvehicletime=as.numeric(df$startvehicletime)
data2=rbind(data2,df)
}
data2
#버스 경유지
url='http://openapi.tago.go.kr/openapi/service/BusRouteInfoInqireService/getRouteAcctoThrghSttnList?serviceKey='
data_list=list()
for(id in unique(data2$routeid)){
(raw.data <- xmlTreeParse(paste0(url,api,'&numOfRows=1&cityCode=37060&routeId=',id), useInternalNodes = TRUE, encoding = "utf-8"))
rootNode <- xmlRoot(raw.data)
n=xmlSApply(rootNode[[2]][['totalCount']],xmlValue)
(raw.data <- xmlTreeParse(paste0(url,api,'&numOfRows=',n,'&cityCode=37060&routeId=',id), useInternalNodes = TRUE, encoding = "utf-8"))
rootNode <- xmlRoot(raw.data)
items <- rootNode[[2]][['items']]
data3=NULL
for(i in 1:xmlSize(rootNode[[2]][['items']])){
items_temp=xmlSApply(items[[i]],xmlValue)
df=data.frame(t(items_temp),stringsAsFactors = F)
df$gpslati=as.numeric(df$gpslati)
df$gpslong=as.numeric(df$gpslong)
data3=rbind(data3,df)
}
data_list[[id]]=data3
}
library(data.table)
data3=rbindlist(data_list)
data3
'R' 카테고리의 다른 글
[ggmap] pie chart 그리기 예제 (0) | 2019.11.26 |
---|---|
ddply와 setDT 비교 (0) | 2019.11.11 |
숫자가 너무커서 제대로 안불러와질 때 (0) | 2019.09.16 |
apply 와 sapply의 차이 (0) | 2019.07.15 |
문자열 다루기와 텍스트 마이닝 (0) | 2019.07.07 |
숫자가 너무커서 제대로 안불러와질 때
read.csv('cjcjcjcj.csv',sep='|',header=T,colClasses = c('integer','character','numeric','numeric'))
'R' 카테고리의 다른 글
ddply와 setDT 비교 (0) | 2019.11.11 |
---|---|
[공공데이터 포털] 버스 정류소 API 가져오기 (0) | 2019.11.02 |
apply 와 sapply의 차이 (0) | 2019.07.15 |
문자열 다루기와 텍스트 마이닝 (0) | 2019.07.07 |
자신에게 맞게 R 최적화를 해보자. (0) | 2019.06.21 |
보호되어 있는 글입니다.
내용을 보시려면 비밀번호를 입력하세요.