▣ Map in r

  • ggmap
  • Google Maps API
### Packages
library(dplyr)
library(ggmap)

API key

### Google Maps API Key
register_google(key='')
# 경도와 위도로 표시할 중심 좌표
center_lon_lat <- c(127.385, 36.375)

# 지도 다운로드
krMap <- get_googlemap(center_lon_lat, zoom = 12)
ℹ <]8;;https://maps.googleapis.com/maps/api/staticmap?center=36.375,127.385&zoom=12&size=640x640&scale=2&maptype=terrain&key=xxxhttps://maps.googleapis.com/maps/api/staticmap?center=36.375,127.385&zoom=12&size=640x640&scale=2&maptype=terrain&key=xxx]8;;>
# 지도 표시
ggmap(krMap)

# 지도 다운로드
krMap <- get_googlemap(center_lon_lat, zoom = 12, maptype = "roadmap")
ℹ <]8;;https://maps.googleapis.com/maps/api/staticmap?center=36.375,127.385&zoom=12&size=640x640&scale=2&maptype=roadmap&key=xxxhttps://maps.googleapis.com/maps/api/staticmap?center=36.375,127.385&zoom=12&size=640x640&scale=2&maptype=roadmap&key=xxx]8;;>
# 지도 표시
ggmap(krMap)

공공데이터포털

  • 소상공인시장진흥공단_상가(상권)정보_대전_202403.csv
### Data
store.file <- "./data/소상공인시장진흥공단_상가(상권)정보_대전_202403.csv"
data.store <- read.csv(store.file, header=T, fileEncoding = "UTF-8")
data.store %>% head()


### 자료 추출 - 커피전문점
data.cafe <- data.store %>% subset(상권업종소분류명=="카페")

### 산점도 – ggplot()
ggplot() + geom_point(data=data.cafe, aes(x=경도, y=위도, colour=시군구명))


# 지도 다운로드
krMap <- get_googlemap(center_lon_lat, zoom = 12, maptype = "roadmap")
ℹ <]8;;https://maps.googleapis.com/maps/api/staticmap?center=36.375,127.385&zoom=12&size=640x640&scale=2&maptype=roadmap&key=xxxhttps://maps.googleapis.com/maps/api/staticmap?center=36.375,127.385&zoom=12&size=640x640&scale=2&maptype=roadmap&key=xxx]8;;>
### 지도 표시
ggmap(krMap) + geom_point(data=data.cafe, aes(x=경도, y=위도, colour=시군구명))
경고: Removed 48 rows containing missing values or values outside the scale range (`geom_point()`).

### 등고선
ggmap(krMap) + stat_density2d(data=data.cafe, aes(x=경도, y=위도))
경고: Removed 48 rows containing non-finite outside the scale range (`stat_density2d()`).

### 밀도
ggmap(krMap) + 
  stat_density2d(data=data.cafe, aes(x=경도, y=위도), geom="polygon", alpha=0.2)
경고: Removed 48 rows containing non-finite outside the scale range (`stat_density2d()`).

### 밀도 + 색상
ggmap(krMap) + 
  stat_density2d(data=data.cafe, 
                 aes(x=경도, y=위도, fill=after_stat(level)), 
                 geom="polygon", alpha=0.2) + 
  scale_fill_gradient(low="yellow", high="red")
경고: Removed 48 rows containing non-finite outside the scale range (`stat_density2d()`).

LS0tDQp0aXRsZTogIk1hcCBpbiByIC0gZ2dtYXAiDQpzdWJ0aXRsZTogIuuNsOydtO2EsOyLnOqwge2ZlCINCmF1dGhvcjogIuuwleyYge2YuCh5aHBhcmtAaG51LmtyKSINCm91dHB1dDoNCiAgaHRtbF9ub3RlYm9vazoNCiAgICB0b2M6IHRydWUgICAgICAgICAgICAgICAgICMjIOuqqeywqCDtkZzsi5wNCiAgICB0b2NfZmxvYXQ6ICAgICAgICAgICAgICAgICMjIOuqqeyekCDqs6DsoJUNCiAgICAgIGNvbGxhcHNlZDogZmFsc2UgICAgICAgICMjIOyekOuPmSDsoJHquLANCi0tLQ0KDQojIyDilqMgTWFwIGluIHINCi0gZ2dtYXANCi0gR29vZ2xlIE1hcHMgQVBJDQoNCmBgYHtyIG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0V9DQojIyMgUGFja2FnZXMNCmxpYnJhcnkoZHBseXIpDQpsaWJyYXJ5KGdnbWFwKQ0KYGBgDQoNCiMjIyBBUEkga2V5DQpgYGB7cn0NCiMjIyBHb29nbGUgTWFwcyBBUEkgS2V5DQpyZWdpc3Rlcl9nb29nbGUoa2V5PScnKQ0KYGBgDQoNCg0KYGBge3J9DQojIOqyveuPhOyZgCDsnITrj4TroZwg7ZGc7Iuc7ZWgIOykkeyLrCDsooztkZwNCmNlbnRlcl9sb25fbGF0IDwtIGMoMTI3LjM4NSwgMzYuMzc1KQ0KDQojIOyngOuPhCDri6TsmrTroZzrk5wNCmtyTWFwIDwtIGdldF9nb29nbGVtYXAoY2VudGVyX2xvbl9sYXQsIHpvb20gPSAxMikNCg0KIyDsp4Drj4Qg7ZGc7IucDQpnZ21hcChrck1hcCkNCmBgYA0KDQoNCmBgYHtyfQ0KIyDsp4Drj4Qg64uk7Jq066Gc65OcDQprck1hcCA8LSBnZXRfZ29vZ2xlbWFwKGNlbnRlcl9sb25fbGF0LCB6b29tID0gMTIsIG1hcHR5cGUgPSAicm9hZG1hcCIpDQoNCiMg7KeA64+EIO2RnOyLnA0KZ2dtYXAoa3JNYXApDQoNCmBgYA0KDQoNCiMjIyDqs7Xqs7XrjbDsnbTthLDtj6zthLgNCi0g7IaM7IOB6rO17J247Iuc7J6l7KeE7Z2l6rO164uoX+yDgeqwgCjsg4Hqtowp7KCV67O0X+uMgOyghF8yMDI0MDMuY3N2DQpgYGB7cn0NCiMjIyBEYXRhDQpzdG9yZS5maWxlIDwtICIuL2RhdGEv7IaM7IOB6rO17J247Iuc7J6l7KeE7Z2l6rO164uoX+yDgeqwgCjsg4Hqtowp7KCV67O0X+uMgOyghF8yMDI0MDMuY3N2Ig0KZGF0YS5zdG9yZSA8LSByZWFkLmNzdihzdG9yZS5maWxlLCBoZWFkZXI9VCwgZmlsZUVuY29kaW5nID0gIlVURi04IikNCmRhdGEuc3RvcmUgJT4lIGhlYWQoKQ0KDQoNCiMjIyDsnpDro4wg7LaU7LacIC0g7Luk7ZS87KCE66y47KCQDQpkYXRhLmNhZmUgPC0gZGF0YS5zdG9yZSAlPiUgc3Vic2V0KOyDgeq2jOyXheyiheyGjOu2hOulmOuqhT09Iuy5tO2OmCIpDQoNCiMjIyDsgrDsoJDrj4Qg4oCTIGdncGxvdCgpDQpnZ3Bsb3QoKSArIGdlb21fcG9pbnQoZGF0YT1kYXRhLmNhZmUsIGFlcyh4PeqyveuPhCwgeT3snITrj4QsIGNvbG91cj3si5zqtbDqtazrqoUpKQ0KDQojIOyngOuPhCDri6TsmrTroZzrk5wNCmtyTWFwIDwtIGdldF9nb29nbGVtYXAoY2VudGVyX2xvbl9sYXQsIHpvb20gPSAxMiwgbWFwdHlwZSA9ICJyb2FkbWFwIikNCg0KIyMjIOyngOuPhCDtkZzsi5wNCmdnbWFwKGtyTWFwKSArIGdlb21fcG9pbnQoZGF0YT1kYXRhLmNhZmUsIGFlcyh4PeqyveuPhCwgeT3snITrj4QsIGNvbG91cj3si5zqtbDqtazrqoUpKQ0KDQoNCiMjIyDrk7Hqs6DshKANCmdnbWFwKGtyTWFwKSArIHN0YXRfZGVuc2l0eTJkKGRhdGE9ZGF0YS5jYWZlLCBhZXMoeD3qsr3rj4QsIHk97JyE64+EKSkNCg0KIyMjIOuwgOuPhA0KZ2dtYXAoa3JNYXApICsgDQogIHN0YXRfZGVuc2l0eTJkKGRhdGE9ZGF0YS5jYWZlLCBhZXMoeD3qsr3rj4QsIHk97JyE64+EKSwgZ2VvbT0icG9seWdvbiIsIGFscGhhPTAuMikNCg0KIyMjIOuwgOuPhCArIOyDieyDgQ0KZ2dtYXAoa3JNYXApICsgDQogIHN0YXRfZGVuc2l0eTJkKGRhdGE9ZGF0YS5jYWZlLCANCiAgICAgICAgICAgICAgICAgYWVzKHg96rK964+ELCB5PeychOuPhCwgZmlsbD1hZnRlcl9zdGF0KGxldmVsKSksIA0KICAgICAgICAgICAgICAgICBnZW9tPSJwb2x5Z29uIiwgYWxwaGE9MC4yKSArIA0KICBzY2FsZV9maWxsX2dyYWRpZW50KGxvdz0ieWVsbG93IiwgaGlnaD0icmVkIikNCg0KYGBgDQoNCg==