Как сохранить в качестве изображения ответ Google StreetView API в R? - PullRequest
0 голосов
/ 05 февраля 2019

Мне нужно сохранить как изображение (.jpg, .png) результат из google_streetview API

Я работаю в небольшом проекте для тестирования алгоритма распознавания изображений.Я загружаю некоторые изображения с Google Street, мне нужно сохранить эти изображения в формате .jpg или .png.

 library(googleway)

 p <- google_streetview(location = c(centerlat,centerlng),              
              size = c(500,500),                
              panorama_id = NULL,               
              output = "plot",              
              heading = 0,              
              fov = 15,             
              pitch = 0,                
              response_check = FALSE,               
              key = key)

Я пытался использовать download.file и имиджер библиотеки:

Первое:

 download.file(p, destfile="test.jpg")

Ошибка в if (stringr :: str_count (imagePath,"http")> 0) {: аргумент имеет нулевую длину

Секунда:

 library(imager)
 imager::save.image(p,"test.jpeg")

Ошибка в imager :: save.image (p, "test.jpeg"): ПерваяАргументом должно быть изображение

Как я могу автоматически сохранить эти изображения?

1 Ответ

0 голосов
/ 05 февраля 2019

Это немного догадка, так как у меня нет ключа API.

Это последний бит функции google_streetview:

map_url <- constructURL(map_url, c(location = location, pano = panorama_id, 
    size = size, heading = heading, fov = fov, pitch = pitch, 
    key = key))
if (output == "plot") {
    z <- tempfile()
    utils::download.file(map_url, z, mode = "wb")
    pic <- jpeg::readJPEG(z)
    file.remove(z)
    graphics::plot(0:1, 0:1, type = "n", ann = FALSE, axes = FALSE)
    return(graphics::rasterImage(pic, 0, 0, 1, 1))
}
else {
    return(map_url)
}

Обратите внимание, что если output="plot", то map_url загружается в tempfile, который считывается вJPEG, который затем строится, а временный файл удаляется.Как мы можем добраться до этого JPEG?

Если output="html", то возвращается map_url.Это должен быть URL изображения.Так что позвоните с output="html" и сохраните возвращаемое значение, а затем загрузите:

url = google_streetview(..., output="html")
t = tempfile()
download.file(url, t, model="wb")
message(t, " should be a JPEG...")

Вы пытались сделать это с output="plot", и в этом случае он возвращает return(graphics::rasterImage(pic, 0, 0, 1, 1)), который всегда является значением NULL.

...