Оси RGoogleMaps - PullRequest
       50

Оси RGoogleMaps

3 голосов
/ 07 июня 2011

Я не могу найти документацию по следующей проблеме, которая у меня возникла с метками осей в 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))

Когда я запускаю это на своем компьютере, горизонтальная ось колеблется от 300 Вт до 60E, но тики между ними не располагаются линейно (300 Вт, 200 Вт, 100 Вт, 0, 100E, 160 Вт, 60 Вт). Также вертикальная ось движется линейно от 300S до 300N. Кажется, что независимо от того, какие данные я предоставляю для данных, оси всегда помечаются таким образом.

Мой вопрос:
1. Эта проблема возникает на других машинах, использующих этот код?
2. У кого-нибудь есть объяснение этому?
и
3. Кто-нибудь может предложить способ получить правильные метки осей (если они «неправильные», но, возможно, я каким-то образом неверно истолковываю сюжет!)?

Спасибо, что уделили время.

1 Ответ

1 голос
/ 04 февраля 2012
  1. Да

  2. Как предположил @Andrie, это похоже на ошибку.Когда axes = TRUE, функция degAxis(), вызываемая PlotOnStaticMap(), извлекает координаты x и y графиков симпатичных отметок, найденных axTicks().degAxis() ожидает, что эти координаты будут в системе координат карты, но rGoogleMaps возвращает их в виде пиксельных координат, рассчитанных из центрального источника.При размере графика 640 x 640 симпатичные отметки назначаются -300, -200, -100, 0,100, 200, 300 в направлениях EW и NS.Вы получите 300 Вт, 200 Вт, 100 Вт, 0, 100E, 160 Вт, 60 Вт, потому что функция degreeLabelsEW(), вызываемая 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)
    
...