如何在R中从GPS接收静态地图PNG文件时显示坐标?

时间:2012-07-18 14:25:45

标签: linux r qt rinside rgooglemaps

所以,目前我已经成功编制了程序(使用 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 个答案:

答案 0 :(得分:2)

您可以使用您提到的png包(或其他工具)自己绘制地图,然后您需要在绘图坐标和gps坐标之间进行某种映射。

如果地图的区域足够小,您对笛卡尔近似值感到满意,那么一种简单的方法是使用updateusr包中的TeachingDemos函数来更改绘图坐标以匹配你的纬度/经度信息,你需要知道地图上2点的纬度和长度,你可以使用locator函数找到它们的原始坐标(或者如果它们是角点,那么你可能不需要{{1 }})。然后你可以使用locator函数在地图上添加点,而无需重新读取或重新绘制它。如果地图是城市或更小的地区,这可能很好,但如果你试图展示整个国家,可能会开始受到近似的影响。

对于不同的投影,您可以找到从lat / long转换为当前绘图坐标的方法,然后使用points和转换后的坐标。 points包和其他包可能会有所帮助。

要考虑的其他几个包(如果包中的当前函数不够,您仍然可以查看代码以获取想法和/或修改代码以使用您的png文件){{ 1}}和sp