3

RGoogleMaps の軸ラベルで発生している次の問題に関するドキュメントが見つかりません。

library(RgoogleMaps)
datas <- structure(list(LAT = c(37.875, 37.925, 37.775, 37.875, 37.875), 
                   LON = c(-122.225, -122.225, -122.075, -122.075, -122.025)), 
                   .Names = c("LAT", "LON"), class = "data.frame", 
                   row.names = c(1L, 2L, 3L, 4L, 5L))
# Get bounding box.
boxt <- qbbox(lat = datas$LAT, lon = datas$LON)
MyMap <- GetMap.bbox(boxt$lonR, boxt$latR, destfile = "Arvin12Map.png", 
maptype = "mobile")
PlotOnStaticMap(MyMap, lat = datas$LAT, lon = datas$LON, 
                axes = TRUE, mar = rep(4, 4))

これを自分のコンピューターで実行すると、横軸の範囲は 300W から 60E になりますが、その間の目盛りは直線的に配置されません (300W、200W、100W、0、100E、160W、60W)。また、縦軸は300Sから300Nまで直線的に移動します。データにどのデータを提供しても、軸は常にこのようにラベル付けされているようです。

私の質問は:
1. この問題は、このコードを使用している他のマシンでも発生しますか?
2. 誰かに説明がありますか?
および
3.正しい軸ラベルを取得する方法を誰かが提案できますか(これらが「間違っている」と仮定しますが、プロットを誤解している可能性があります!)?

お時間をいただきありがとうございます。

4

1 に答える 1

1
  1. はい

  2. @Andrieが示唆したように、これはバグのようです。の場合axes = TRUEdegAxis()によって呼び出される関数は、 によってPlotOnStaticMap()検出されたきれいな目盛りの x および y プロット座標を抽出しaxTicks()ます。degAxis()はこれらの座標が地図の座標系にあると想定していますが、rGoogleMaps はそれらを中心の原点から計算されたピクセル座標として返します。プロット サイズが 640 x 640 の場合、きれいな目盛は EW と NS の両方の方向で -300、-200、-100、0,100、200、300 に割り当てられます。degreeLabelsEW()関数が呼び出されるため、300W、200W、100W、0、100E、160W、60W になります。degAxis()は、経度が [-180, 180] の範囲内にある必要がある場合、180 より高い経度は実際には西半球にあると仮定します (たとえば、200E は西半球に向かって東に 20 度、つまり 160W です)。無意味な N、S、W 座標で同様に機能しない理由がわかりません。

  3. MyMapオブジェクトを続行する簡単な回避策:

    PlotOnStaticMap(MyMap, lat = datas$LAT, lon = datas$LON, 
                    axes = FALSE, mar = rep(4.5, 4))
    
    # x-axis
    xrange <- MyMap$BBOX$ur[2] - MyMap$BBOX$ll[2]
    xticklength <- xrange / (length(axTicks(1)) - 1)
    xticklabs <- seq(MyMap$BBOX$ll[2], MyMap$BBOX$ur[2], xticklength)
    xticklabs <- parse(text = paste(sprintf('%.2f', abs(xticklabs)), 
        ifelse(xticklabs < 0, '*degree*W', '*degree*E'), sep=''))
    axis(1, at=axTicks(1), xticklabs, cex.axis=0.8)
    
    # y-axis
    yrange <- MyMap$BBOX$ur[1] - MyMap$BBOX$ll[1]
    yticklength <- yrange / (length(axTicks(2)) - 1)
    yticklabs <- seq(MyMap$BBOX$ll[1], MyMap$BBOX$ur[1], yticklength)
    yticklabs <- parse(text = paste(sprintf('%.2f', abs(yticklabs)), 
        ifelse(yticklabs < 0, '*degree*S', '*degree*N'), sep=''))
    axis(2, at=axTicks(2), yticklabs, cex.axis=0.8, las=1)
    
于 2012-02-04T08:40:01.963 に答える