'서울시'에 해당하는 글 2건

드디어 등록 완료되었네요.

거의 일주일 걸렸는데. 힘들었습니다.



일단 웰컴박스를 수령해야겠죠?




지금은 크루 등록기간이라고 합니다. 

곧 정식 서비스를 시작할것이라고 하였습니다.

일단 기대해 보겠습니다.



카페도 있네요. 가입했고, 단톡방도 들어왔습니다.



정식 서비스 출시되고

서울시 양천구/강서구 ~ 성동구까지 같이 카풀하실 분 계시면 

카풀 많이 신청 바랍니다.

(양천/강서구 -> 성동구: 아침 출근시간)

(성동구 -> 양천/강서구: 저녁 퇴근시간)





WRITTEN BY
鬼風
생각이 깨어있지 않다면 살아갈 이유도 없다

트랙백  0 , 댓글  0개가 달렸습니다.
secret

이번 글은 R 프로그래밍을 활용하여 구글 맵(Google Map)을 연동한 위치 표시 기능을 소개해 드립니다.


산재해 있는 위치정보 데이터를 바탕으로 구글맵에 표시한다면 가독성이 쉬워지겠죠?


이번에 나타낼 예제로는 서울시 공공 Wi-fi 설치 위치 정보입니다.






일단 데이터를 먼저 받아야겠죠?

서울시 관련 공공데이터는 서울시 데이터센터에서 누구에게나 무료로 제공을 하고 있습니다.



http://data.seoul.go.kr ← 서울시 데이터센터







거기서 원하는 정보를 찾고 Excel로 다운로드받으면 다음과 같은 정보가 친절하게 다 있습니다.

저는 상기 언급했다시피 서울시 공공 Wi-fi 정보를 나타낸다 하였으므로 검색해서 다운로드받았습니다.


localname type company xaxis yaxis provider
강남구 공공기관 (재)서울산업통상진흥원 127.0717546 37.4955815 LGU+
강남구 공공기관 (재)서울산업통상진흥원서울신기술창업센타 127.0380541 37.4976121 LGU+
강남구 공공기관 U강남도시관제센터 127.040992 37.5084025 강남구
강남구 공공기관 강남구의회 127.0642026 37.4939383 강남구
강남구 공공기관 강남구청 127.047502 37.517305 강남구
강남구 공공기관 강남수도사업소 127.0471233 37.4833851 상수도사업본부
강남구 공공기관 강남운전면허시험장(대치) 127.0672394 37.5084197 KT
강남구 공공기관 강남인터넷방송국 127.0384706 37.4909267 강남구

...



※ 주의점: 여기 숫자는 전부다 텍스트형 숫자입니다. 반드시! 숫자유형으로 변환 후 저장해야 합니다.



이제 이 데이터를 가지고 R에서 활용하면 되겠죠?


1
2
3
4
5
6
7
8
9
10
library(RgoogleMaps)
library(readxl)
seoulwifi <- read_excel("~/rdata/seoulwifi.xlsx")
View(seoulwifi)
map.center.loc <- c(37.5639154,127.0094153)
input.zoom <- 11
map_data <- seoulwifi
win.graph()
mymap <- GetMap(center=map.center.loc, zoom=input.zoom, maptype="road", format="roadmap", destfile="mymap.png")
PlotOnStaticMap(mymap,lat=map_data$yaxis,lon=map_data$xaxis, destfile="mymap_point.png",cex=1,pch=10,col="red")
cs


1. RgoogleMaps: 이 부분이 구글맵 사용을 위한 R 패키지입니다.

2~4. 엑셀파일 적용

5. 지도 가운데 위치 잡는 부분입니다.

6. 지도 Zoom을 나타내는 부분입니다.

8. 그래프 표시 창을 띄워주는 화면입니다. (필수는 아님)

9. 사용할 지도의 값을 mymap 변수에 저장하는 부분

10. 사용할 데이터를 mymap 지도 상에서 표시해서 뿌려주는 부분




여기서 몇 가지 사항.


1) 지도 가운데 위치와 Zoom은 어떻게 잡을까요?



웹 상의 구글 맵으로 가신 다음에, 원하는 부분 드래그 & 휠 돌리다보면 위 표시된 부분과 같이 주소가 나옵니다.


주소 상에서 37.5639154,127.0094153,11z  라고 되어있는 부분이 있는데

37.5639154가 y축이고

127.0094153이 x축이고

11이 Zoom 크기입니다.


※ 주의사항: Zoom 크기에 11.5 등의 소수점 안됩니다. 물론 Google Map에선 되지만, R Programming에서는 안됩니다.




2. GetMap() 함수

이 부분이 구글에 뿌려준 지도를 이미지 값으로 저장하는 함수라고 보시면 됩니다.

파라미터는 아래와 같고요. (출처: https://cran.r-project.org/web/packages/RgoogleMaps)



center optional center (lat first,lon second ) 


size desired size of the map tile image. defaults to maximum size returned by the Gogle server, which is 640x640 pixels 

(전 여기서 이거 지정 안했습니다. Default는 위와 같이 640x640)


destfile File to load the map image from or save to, depending on NEWMAP. 


zoom Google maps zoom level.


maptype defines the type of map to construct. There are several possible maptype values, including satellite, terrain, hybrid, and mobile. 


format (optional) defines the format of the resulting image. By default, the Static Maps API creates GIF images. There are several possible formats including GIF, JPEG and PNG types. Which format you use depends on how you intend to present the image. JPEG typically provides greater compression, while GIF and PNG provide greater detail. This version supports only PNG.

(그냥 PNG 쓰시면 됩니다)



위 예제와 같이 destfile 입력하시면 해당 이름으로 이미지가 생성되니, 먼저 미리보기하셔도 됩니다.





3. PlotOnStaticMap() 함수


이 함수가 먼저 지정된 Map Data를 바탕으로 실제 데이터를 화면상에 뿌려주는 부분입니다.

파라미터 설명은 다음과 같습니다. (출처: https://cran.r-project.org/web/packages/RgoogleMaps)



MyMap optional map object 


lat latitude values to be overlaid


lon longitude values to be overlaid 


destfile File to load the map image from or save to, depending on whether MyMap was passed. 


cex 표시될 표식의 크기입니다.


pch 표시될 표식의 모양 번호입니다.


col 색상입니다.





위의 내용을 참고하여 작성하면 다른 응용 데이터도 나타낼 수 있겠죠?





자, 이제 응용을 해봅시다.


1
2
3
4
5
6
7
sktmap <- subset(map_data, provider=="SKT")
ktmap <- subset(map_data, provider=="KT")
lgumap <- subset(map_data, provider=="LGU+")
win.graph()
PlotOnStaticMap(mymap,lat=sktmap$yaxis,lon=sktmap$xaxis, destfile="skt_point.png",cex=1,pch=20,col="red")
PlotOnStaticMap(mymap,lat=ktmap$yaxis,lon=ktmap$xaxis, destfile="kt_point.png",cex=1,pch=20,col="black")
PlotOnStaticMap(mymap,lat=lgumap$yaxis,lon=lgumap$xaxis, destfile="lgu_point.png",cex=1,pch=20,col="purple")
cs


위 데이터를 바탕으로, 특정 통신사업자의 값만 추려서 뽑을 수도 있겠죠?


subset() 함수를 사용해서 필터링된 데이터셋을 따로 만들고,

따로 만든 데이터를 각각의 지도 위치로 표시를 하면 됩니다.



SKT



KT


LGU+




통계 데이터를 지도와 연동해서 가독성이 좋은 이미지로 표시한다는 것이 역시 매력적이겠죠?

이번 글은 여기서 마치겠습니다.





11/18 추가 내용


사실 이 Google Map 부분은 이미지파일을 Google 지도로부터 생성하고, 이미지 위에 Point를 얹어놓는 수준이군요.

그리 크게 대단한 기술은 아닙니다만, 편리하게 이용할 수는 있을 것입니다.


ggplot2 를 사용해서 뿌려줬을 때의 결과는 아래와 같습니다. 이 부분은 덤으로 색깔도 같이 넣어봤습니다.






WRITTEN BY
鬼風
생각이 깨어있지 않다면 살아갈 이유도 없다

트랙백  0 , 댓글  5개가 달렸습니다.
  1. 비밀댓글입니다
    • 어려운 질문이였네요.지금은 잘 되시는지요? ㅠ
      저도 해당 부분에 대해서 관련된 부분을 찾아보았지만, 뚜렷한 해법을 찾지는 못한 상태이고요.
      다만 해외 R프로그래밍 하시는 분들의 몇몇 의견을 종합했을 때에는 Plot으로 화면을 띄울 때 있어서 Windows 창을 사용하는 방식에 있어서 뭔가 충돌이 났을 가능성이 있다고 보아집니다.

      Windows XP라서 만약 안된다면, R Studio에서의 Windows 모듈이 현 버전과 불일치해서 나타나는 현상일 수도 있고, Ubuntu나 Linux 등등에서도 가능성은 일단 있다고 합니다.

      해외 몇몇 피드백에서는
      > options(device="windows";)
      이거나 혹은
      > options(device="devWindows";)
      등을 사용해서 띄우는 식으로도 사용을 하고 있습니다만, 사실 이것 또한 완전한 해법이라고 보기는 어려운 것 같기도 하고요.

      이 부분에 대해서는 저도 좀 더 알아보도록 하겠습니다.

      본문의 예제는 Google Map 상의 RGoogleMaps 패키지 상의 함수를 이용했다는 점에서 일부 제한적으로 Plot을 띄우는 것이 있었으며, 해당 모듈을 사용하지 않고도 Plot을 표시할 수는 있을 것으로 생각됩니다.

      RGoogleMaps에 대한 의존도를 줄이면서 동일한 결과를 낼 수 있는 코드도 한번 짜 보겠습니다.

      관심 감사드립니다.
  2. 감사합니다! 아직 해결을 하지는 못했습니다만, 열심히 수정중에 있습니다.
    피드백 정말 감사드립니다!
  3. 안녕하세요 지금 한창 R을 공부하고 있는 학생입니다.
    다름이아니라 제가 지금 만들고 있는 데이터를 시각화 하는데 약간의 문제 있어서
    자문을 구하고자 이렇게 글을 남기게 되었내요
    본론으로 들어가자면 저는 지금 저자분께서 하시는 것처럼 데이터를 불러와서 지도에 분포를 하는 식의 데이터를 시각화를 하고있는데
    데이터를 시각화 를 했지만 데이터 분포가 너무 적은 나머지 한눈에 들어 오지 않는 단점이 생겨서
    분포된 데이터의 지도에 표신된 점(?) 포인트를 키워 보려고 하는데 어떤 방식을 사용하면 될까요???
    • 위 소스코드 중 제일 마지막이 지도에 표시하는 부분입니다. cex와 pch속성이 있는데, 크기를 늘리시려면 cex의 값을 올리면 되는것으로 알고있습니다.
      저도 지금 모바일이라 테스트가 어려운점 양해바라며, 좋은결과있길 바라겠습니다.
secret