Как отобразить координаты на PNG-файле статической карты, когда они получены от GPS в R?

Итак, в настоящее время я успешно скомпилировал программу (с RInside) для построения координат на статических картах Google (на Qt).

Теперь я должен нанести координаты на карту, как они получены от GPS.

Можно ли как-то отобразить вновь нанесенные точки на png "на лету"?
Я имею в виду, я не хочу читать png с жесткого диска каждый раз, когда я получаю новую точку.


Отсюда: http://cran.r-project.org/web/packages/png/png.pdf

Этот пакет предоставляет простой и удобный способ чтения, записи и отображения растровых изображений, хранящихся в формате PNG. Он может читать и записывать как файлы, так и необработанные векторы в памяти.

Может ли это помочь?


#include <RInside.h>
#include <Rcpp.h>
#include <iostream>

int main (int argc, char *argv[])
{
    std :: cout << "\nThank-SO :-)\n";

    RInside R (argc, argv);

    std :: string txtA = "library(RgoogleMaps)";
    std :: string txtB = "png(filename='Rg.png', width=480, height=480)";

    std :: string txtC = "lat = c(40.702147,40.718217,40.711614)";
    std :: string txtD = "lon = c(-74.012318,-74.015794,-73.998284)";
    std :: string txtE = "center = c(mean(lat), mean(lon))";
    std :: string txtF = "zoom <- min(MaxZoom(range(lat), range(lon)))";

    std :: string txtG = "MyMap <- GetMap(center=center, zoom=zoom, markers='&40.702147,-74.015794,blues%7C40.711614,-74.012318,greeng%7C40.718217,-73.998284,redc', destfile='My.png')";

    std :: string txtH = "tmp <- PlotOnStaticMap(MyMap,lat=c(40.702147,40.711614,40.718217),lon=c(-74.015794,-74.012318,-73.998284),cex=1.5,pch=20,col=c('red', 'blue', 'green'),add=F)";

    std :: string txtI = "dev.off()";

    R.parseEvalQ (txtA);
    R.parseEvalQ (txtB);
    R.parseEvalQ (txtC);
    R.parseEvalQ (txtD);
    R.parseEvalQ (txtE);
    R.parseEvalQ (txtF);
    R.parseEvalQ (txtG);
    R.parseEvalQ (txtH);
    R.parseEvalQ (txtI);

    return 0;
}

Это C++ код, написанный с RInside,

1 ответ

Решение

Вы можете построить карту самостоятельно, используя png пакет, который вы упоминаете (или другие инструменты), то вам нужен какой-то способ отображения между координатами графика и координатами GPS.

Если область карты достаточно мала, чтобы вы были довольны декартовым приближением, тогда простым способом является использование updateusr функция в TeachingDemos пакет, чтобы изменить координаты графика в соответствии с вашей широтой / долготой, вам нужно знать широту и долготу для 2 точек на карте, и вы можете найти их исходные координаты, используя locator функция (или если они углы, то вам может не понадобиться locator). Тогда вы можете просто использовать points функция для добавления точек в верхней части карты без необходимости перечитывать или перерисовывать ее. Это, вероятно, хорошо, если карта относится к городу или небольшому региону, но может начать страдать от приближения, если вы пытаетесь показать целую страну.

Для разных проекций вы можете найти способ конвертировать из широты / долготы в текущие координаты графиков, а затем использовать points с преобразованными координатами. sp пакет и другие могут быть полезны здесь.

Несколько других пакетов для рассмотрения (если текущих функций в пакете недостаточно, вы все равно можете посмотреть на код, чтобы получить идеи и / или изменить код для использования ваших файлов png): RgoogleMaps а также ggmap,

Другие вопросы по тегам