R에서 GPS NMEA 형식의 데이터로 놀이 (1)

17139 단어 RGPS
그 2('$GPRMC'편) 물었습니다.

절차


  • NMEA 로그 취득
  • 1. GPS 로거로부터.
  • 2. GPS 줄을, PC에 시리얼 접속, TeraTerm등으로, 텍스트 보존.
  • 3. 'GPS 로거 샘플 데이터 다운로드'등으로 구구루 선생님에게 가보자

  • R을 먹인다. 아래 geo_position_from_nmealog 사용. 마지막에 개행이 없으면 화나거나 한다. 잘 대응한다. 하는 일은 $ GPGGA를 필터링하고 lat과 lng을 잘 변환하고 반환합니다.
  • 예: > rt = geo_position_from_nmealog("C:/gps/gps1234.log")


  • 3. 가볍게 plot 해 본다
    * 실행 예 1 : > plot(rt$Latitude, rt$Longitude)*실행예 2: > plot(rt$Longitude-rt$Longitude[1], rt$Latitude-rt$Latitude[1])//최초의 위치로부터의 상대 좌표

    4. library(rgl) 라는 패키지로 plot3d 해보자. (마우스로 이동할 수 있음)
    * 실행 예 3 : > plot3d(rt$Longitude-rt$Longitude[1], rt$Latitude-rt$Latitude[1], rt$Altitude)


    geo_position_from_nmealog
    geo_position_from_nmealog <- function(log_filename, is0000 = TRUE) {
         # ファイルを読む
         lines = readLines(log_filename)
         # フィルタ: $GPGGAのラインを取得
         rexp_str = ifelse(is0000 == TRUE, "^\\$GPGGA,.*0000\\*[0-9A-F][0-9A-F]$", "^\\$GPGGA,.*\\*[0-9A-F][0-9A-F]$")
         lines_GPGGA = lines[grep(rexp_str, lines)]
         # tableへ
         tbl_GPGGA = read.table( text =lines_GPGGA, sep=",", header=FALSE)
         # カラムに名前をつける
         colnames(tbl_GPGGA) <- (c("SentenceId","TimeUTC", "Latitude", "LatitudeHemisphere", "Longitude", "LongitudeHemisphere", "PositionFixQuality", "NumOfSatelites", "HDOP", "Altitude", "AltitudeUnit", "GeoidalHeight","GeoidalHeightUnit", "TimeSeinceLastDGPSUpdate", "_CheckSum"))
         # フィルタ: 取得できたデータのみ
         tbl_GPGGA =tbl_GPGGA [!(tbl_GPGGA $PositionFixQuality == 0), ]
    
         # 緯度Latitudeと経度Longitudeを変換
         rt <- data.frame(
              Latitude  = ifelse(tbl_GPGGA$LatitudeHemisphere  == "N",  1, -1) * (as.integer(tbl_GPGGA$Latitude /100) +  (tbl_GPGGA$Latitude /100 - as.integer(tbl_GPGGA$Latitude /100)) * 100/60),
              Longitude = ifelse(tbl_GPGGA$LongitudeHemisphere == "E",  1, -1) * (as.integer(tbl_GPGGA$Longitude/100) +  (tbl_GPGGA$Longitude/100 - as.integer(tbl_GPGGA$Longitude/100)) * 100/60), 
              Altitude = tbl_GPGGA$Altitude
         )
         return(rt)
    }
    

    Google 지도에 투영 ( RgoogleMaps 사용)



    test.R
    install.packages("RgoogleMaps") # 入れてなければインストール
    library(RgoogleMaps)
    
    setwd("C:/gps/") #作業フォルダ指定
    rt = geo_position_from_nmealog("gps1234.log")
    
    lat <- as.vector(rt[,1])
    lon <- as.vector(rt[,2])
    
    # センター位置。 maxとminの間
    center = c ((max(lat)+min(lat))/2, (max(lon)+min(lon))/2)
    # zoom値計算: サンプルコードから... 自分で、zoom <- 13とかでも、おk
    zoom <- min(MaxZoom(range(lat), range(lon)))
    
    # グーぐる先生から地図画像を頂戴する。 日本語でおk
    MyMap <- GetMap(center=center, zoom=zoom, size=c(640, 640), destfile = "./dest.png")
    
    #色指定。
    col <- rep(3, length(lat))
    
    # プロット
    tmp <- PlotOnStaticMap(
        MyMap,
        lat = lat,
        lon = lon,
        destfile = "./dest.png",
        cex=1.0,
        pch=20,
        col=col,
        add=FALSE,
        NEWMAP = FALSE
    );
    
    # PNG 保存
    dev.print(bmp, width = 640,height=640, file = "./output.png")
    
    



    여기 을 무단으로 빌렸습니다.> rt = geo_position_from_nmealog("http://www.oiccam.com/reno/gps/tahoe/nmea/2005-09-25-north-tahoe_nmea.txt", is0000=FALSE)

    좋은 웹페이지 즐겨찾기