0

所以,目前我已经成功编译了程序(使用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.

4

1 回答 1

2

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

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

对于不同的投影,您可以找到一种从纬度/经度转换为当前绘图坐标的方法,然后points与转换后的坐标一起使用。sp包和其他可能在这里有所帮助。

需要考虑的其他几个包(如果包中的当前功能还不够,您仍然可以查看代码以获取想法和/或修改代码以使用您的 png 文件)是RgoogleMapsggmap.

于 2012-07-18T16:17:46.657 回答