所以,目前我已经成功编制了程序(使用 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
代码。
答案 0 :(得分:2)
您可以使用您提到的png
包(或其他工具)自己绘制地图,然后您需要在绘图坐标和gps坐标之间进行某种映射。
如果地图的区域足够小,您对笛卡尔近似值感到满意,那么一种简单的方法是使用updateusr
包中的TeachingDemos
函数来更改绘图坐标以匹配你的纬度/经度信息,你需要知道地图上2点的纬度和长度,你可以使用locator
函数找到它们的原始坐标(或者如果它们是角点,那么你可能不需要{{1 }})。然后你可以使用locator
函数在地图上添加点,而无需重新读取或重新绘制它。如果地图是城市或更小的地区,这可能很好,但如果你试图展示整个国家,可能会开始受到近似的影响。
对于不同的投影,您可以找到从lat / long转换为当前绘图坐标的方法,然后使用points
和转换后的坐标。 points
包和其他包可能会有所帮助。
要考虑的其他几个包(如果包中的当前函数不够,您仍然可以查看代码以获取想法和/或修改代码以使用您的png文件){{ 1}}和sp
。