Оси RGoogleMaps

Я не могу найти документацию по следующей проблеме, с которой я столкнулся с метками осей в 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 Вт). Также вертикальная ось движется линейно от 300С до 300Н. Кажется, что независимо от того, какие данные я предоставляю для данных, оси всегда помечаются таким образом.

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

Спасибо за ваше время.

1 ответ

Решение
  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)
    
Другие вопросы по тегам