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

Rstudio 구글 지도에 마커(Marker) 표시 (대한민국 독도)

by Vitaminymc 2023. 8. 15.
반응형


"독도는 대한민국 땅"

78주년 광복절을 맞아, ggmap 패키지를 사용하여 google map에서 독도를 표시하는 방법을 실행해 보았다.

문제는 google은 여전히, 한국의 영토인 독도를 중립적으로 표기하고 있다.

google map 활용한 지도 보기

ggmap 패키지는 Google Maps API를 활용하여 지도를 생성하고, 여기에 지리적 데이터를 레이어로 추가하고
시각화할 수 있는 기능을 제공

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

API Key를 부여받기 위해서는 '결제'를 연동해야 함

geocode

geocode() 함수는 주소나 장소 이름을 입력으로 받아 해당 위치의 위도와 경도 좌표를 반환하는 기능을 수행

enc2utf8() 함수는 R 언어에서 사용되는 함수 중 하나로, 특정 문자열을 UTF-8 인코딩으로 변환하는 기능을 제공

주어진 문자열 주소 등이 올바른 UTF-8 인코딩으로 처리되지 않을 수 있기 때문에, geocode() 함수와 같은 지리 정보 처리 작업을 수행할 때, 문자열의 올바른 인코딩 처리를 위해서(올바른 인코딩 결과를 얻기 위해서) 사용

install.packages('ggmap')

library(ggmap)

register_google(key = '개인적으로 google  cloud에서 부여 받은 API Key')
> geocode(enc2utf8("독도"))  
ℹ < https://maps.googleapis.com/maps/api/geocode/json?address=%EB%8F%85%EB%8F%84&key=xxx >
# A tibble: 1 × 2
    lon   lat
  <dbl> <dbl>
1  132.  37.2


> geocode(enc2utf8("경상북도 울릉군 울릉읍 독도리"))  
ℹ < https://maps.googleapis.com/maps/api/geocode/json?address=%EA%B2%BD%EC%83%81%EB%B6%81%EB%8F%84+%EC%9A%B8%EB%A6%89%EA%B5%B0+%EC%9A%B8%EB%A6%89%EC%9D%8D+%EB%8F%85%EB%8F%84%EB%A6%AC&key=xxx >
# A tibble: 1 × 2
    lon   lat
  <dbl> <dbl>
1  132.  37.4
  • 노래 '독도는 우리 땅' 가사 : 경상북도 울릉군 울릉읍 독도리 동경 132 북위 37
latlon <- geocode(enc2utf8("독도"))  

latlon_num <- as.numeric(latlon)
> latlon
# A tibble: 1 × 2
    lon   lat
  <dbl> <dbl>
1  132.  37.2
  • center: 구글 지도의 중심 좌표를 지정
  • 이 좌표는 해당 지도의 중심이 되는 위치를 나타내며, center는 위도(latitude)와 경도(longitude)로 구성된 벡터여야 함
  • 따라서 center는 as.numeric() 함수를 사용하여 위도와 경도를 포함하는 벡터로 변환해야 함

지도 Type 1 : roadmap

  • 일반적인 도로와 거리 정보가 포함된 지도 타입으로, 도로 네트워크와 지역 이름을 보여줌
map <- get_googlemap(center = latlon_num,    # center : 지도 중심의 위경도 좌표값
                     maptype = "roadmap",                  # 지도 유형
                     zoom = 15,                                   # 지도의 확대 크기 
                     markers = latlon)                          #마커의 위치

ggmap(map)
ℹ < https://maps.googleapis.com/maps/api/staticmap?center=37.242936,131.866842&zoom=15&size=640x640&scale=2&maptype=roadmap&markers=37.242936,131.866842&key=xxx >

markers: 지도 위에 마커를 추가하고자 할 때 사용

center는 as.numeric() 함수를 사용하여 벡터로 변환한 것과 달리, markers 위치 정보와 관련된 데이터를 포함하는 데이터프레임이나 테이블을 지정 (geocode로 추출한 위경도 값 그대로 사용)

독도 (maptype&nbsp;=&nbsp;"roadmap")

seoul <- geocode(enc2utf8("서울시청"))

seou1_num <- as.numeric(seoul)

seoul_map <- get_googlemap(center = seou1_num,
                     maptype = "roadmap",
                     zoom = 15,
                     markers = seoul)

ggmap(seoul_map)

서울시청 (maptype&nbsp;=&nbsp;"roadmap")

 

지도 Type 2 : satellite

  • 위성 사진을 기반으로 한 지도 타입으로, 실제 위성 사진을 배경으로 표시
map2 <- get_googlemap(center = latlon_num,
                     maptype = "satellite",
                     zoom = 15,
                     markers = latlon)

ggmap(map2)
ℹ < https://maps.googleapis.com/maps/api/staticmap?center=37.242936,131.866842&zoom=15&size=640x640&scale=2&maptype=satellite&markers=37.242936,131.866842&key=xxx >

독도 (maptype = "satellite")

seoul_map2 <- get_googlemap(center = seou1_num,
                            maptype = "satellite",
                            zoom = 15,
                            markers = seoul)

ggmap(seoul_map2)

서울시청 (maptype = "satellite")

 

지도 Type 3 : terrain

  • 지형 지도 타입으로, 지형의 높낮이와 지리적 특징을 강조하는 스타일
map3 <- get_googlemap(center = latlon_num,
                     maptype = "terrain",
                     zoom = 15,
                     markers = latlon)

ggmap(map3)
ℹ < https://maps.googleapis.com/maps/api/staticmap?center=37.242936,131.866842&zoom=15&size=640x640&scale=2&maptype=terrain&markers=37.242936,131.866842&key=xxx >

독도 (maptype = "terrain")

seoul_map3 <- get_googlemap(center = seou1_num,
                           maptype = "terrain",
                           zoom = 15,
                           markers = seoul)

ggmap(seoul_map3)

서울시청 (maptype = "terrain")

 

지도 Type 4 : hybrid

  • 위성 사진과 도로 정보를 조합한 지도 타입으로, 도로 네트워크와 지형을 함께 표시
map4 <- get_googlemap(center = latlon_num,
                      maptype = "hybrid",
                      zoom = 15,
                      markers = latlon)

ggmap(map4)

독도 (maptype = "hybrid")

 seoul_map4 <- get_googlemap(center = seou1_num,
                            maptype = "hybrid",
                            zoom = 15,
                            markers = seoul)

ggmap(seoul_map4)

서울시청 (maptype = "hybrid")

 

울릉도와 독도

latlon2 <- geocode(enc2utf8("울릉도"))  #대한민국 울릉도 위경도

# 중심 좌표 설정
korea_num <- c(lon = (131.86684+130.85715)/2 , lat = (37.24294+37.50637)/2)

# 마커 데이터프레임 설정
korea <- data.frame(lon = c(131.86684, 130.85715), lat = c(37.24294, 37.50637))

# 구글 지도 가져오기
korea_map <- get_googlemap(center = as.numeric(korea_num),
                           maptype = "roadmap",
                           zoom = 9,
                           size = c(720,720),
                           markers = korea)

# 지도 시각화
ggmap(korea_map)

울릉도와 독도

library(tidyverse)

korea_num <- c(lon = (131.86684+130.85715)/2 , lat = (37.24294+37.50637)/2)

# gmap을 사용하여 지도 가져오기
map <- get_googlemap(center = korea_num ,
                     maptype = "roadmap",
                     zoom = 9)

# 데이터프레임 준비
df <- data.frame(latlon.lon = c(131.86684, 130.85715),
                 latlon.lat = c(37.24294, 37.50637),
                 real_name = c("대한민국 독도", "울릉도"))

# 지도 시각화 및 텍스트 추가
ggmap(map) +
  geom_text(data = df, aes(x = latlon.lon, y = latlon.lat, label = real_name), size = 5)

대한민국 독도와 울릉도

대한민국 울릉도부터 대한민국 독도까지 거리

distGeo

geosphere 패키지의 distGeo() 함수는 지구 표면상의 두 지점 간의 실제 거리를 계산하는 함수

이 함수는 위도(latitude)와 경도(longitude) 좌표를 입력으로 받아, 두 지점 간의 지구 표면의 최단 거리를 미터 단위로 반환

지구의 곡률과 타원체 모양을 고려하여 거리를 계산

latlon2 <- geocode(enc2utf8("울릉도"))   #대한민국 울릉도 위경도

liar_jpn <- geocode(enc2utf8("隠岐諸島"))  #일본 시마네현 오키섬 위경도

install.packages('geosphere')

library(geosphere)

# 독도와 울릉도 두 지점 간의 거리 계산 (단위: 미터)
distance <- distGeo(latlon, latlon2)
print(distance)
[1] 94088.34
# 독도와 일본 오키섬 두 지점 간의 거리 계산 (단위: 미터)
distance2 <- distGeo(latlon, liar_jpn)
print(distance2)
[1] 173736.7
  • 94.1 km VS. 173.7 Km
  • 노래 '독도는 우리땅' 가사 : 뱃길따라 87K보다는 멀게 나옴 (옛 가사 : 뱃길따라 200리)
  • 그래도, 일본 시마네현 오키섬보다는 울릉도가 독도에 훨씬 가까움
https://ko.wikipedia.org/wiki/%EC%98%A4%ED%82%A4_%EC%A0%9C%EB%8F%84
오키 제도(일본어: 隠岐諸島) 또는 오키 군도(일본어: 隠岐群島)는 동해에 있는 일본의 군도이다. 행정 구역상 시마네현 오키군에 소속되어 있으며, 역사적으로 오키 제도를 중심으로 오키국이라는 구니가 설치되기도 했다. 군도 전체를 오키섬(일본어: 隠岐島 오키노시마)이라고도 부르기도 한다.

독도에 대한 google 정보 

  • google map에 '독도'는 'Liancourt Rocks'로 표기되어 있음 
  • https://en.wikipedia.org/wiki/Liancourt_Rocks
  • 양심은 있는지, 옆에 독도라는 한글 정보가 나온다지만, 아마도 한국에서 검색을 했기 때문에 나온 것으로 추정됨

Google "liancourt rocks" 검색결과 (2023.8.15)
Google 관련 질문

Is Liancourt Rocks Korean or Japanese?
Liancourt Rocks - Wikipedia
The English name Liancourt Rocks is derived from Le Liancourt, the name of a French whaling ship that came close to being wrecked on the rocks in 1849. 
While South Korea controls the islets, its sovereignty over them is contested by Japan. 
North Korea also claims the territory.

독도는 한국인가 일본인가?
리앙쿠르 록스 - Wikipedia
영어 이름인 Liancourt Rocks는 1849년 바위에 난파될 뻔한 프랑스 포경선의 이름인 Le Liancourt에서 유래되었습니다.
한국이 독도를 지배하는 동안 일본은 이에 대한 주권을 다투고 있습니다.
북한도 영유권을 주장하고 있다.

독도를 지배하는 것은 한국인라고 명시적으로 되어 있어야 하는 것 아닌가?
Is Dokdo Korean or Japanese?

Whose Islands? The Dokdo/Takeshima Dispute | Korean Legal Studies
Lying almost equidistant between the Korean Peninsula and Japan, the tiny islets called Dokdo in South Korea and Takeshima in Japan, are claimed by both countries and are a source of a dispute going back more than 300 years.

한반도와 일본 사이에 거의 등거리에 있는 한국의 독도와 일본의 다케시마라는 작은 섬은 양국이 영유권을 주장하고 있으며 300년 이상 거슬러 올라가는 분쟁의 원인입니다.

300년 이상 분쟁의 원인이라고, 거짓 정보를...

Google "독도" 검색결과 (2023.8.15)
Google "Takeshima" 검색결과 (2023.8.15)
관련 질문

竹島はどちらの国のもの?
竹島は、歴史的事実に照らしても、かつ国際法上も明らかに日本固有の領土です。 韓国による竹島の占拠は、国際法上何ら根拠がないまま行われている不法占拠であり、韓国がこのような不法占拠に基づいて竹島に対して行ういかなる措置も法的な正当性を有するものではありません。

다케시마는 어느 나라의 것인가?
다케시마는 역사적 사실에 비추어도 국제법상도 분명히 일본 고유의 영토입니다. 한국에 의한 다케시마의 점거는, 국제법상 아무런 근거가 없는 채 행해지고 있는 불법 점거이며, 한국이 이러한 불법 점거에 근거해 다케시마에 대하여 행하는 어떠한 조치도 법적인 정당성을 가지는 것 아니다.

이런 사기, 거짓 정보
대나무는 한 그루도 없는 섬을 '죽도(타케시마)'라고 부르는 것부터가 사기

google 검색 : 울릉도에서 독도까지 거리
google 검색 : 일본에서 독도까지 거리

728x90