到目前为止,我想到了以下解决方案。首先,您需要某种类型的绘图库。我选择了gnuplot,因为我找到了一个Ruby binding,但R最近很流行。我创建了一个小脚本,将GPX文件转换并将数据提供给gnuplot,得出了像这样的结果:alt text http://dl.dropbox.com/u/45672/gpslog.png 这看起来不错,但gnuplot似乎只是一个用于创建图形而不是空间数据的工具。这是正确的方法还是有更好的解决方案可用?
这里有另一个示例,你有想法如何构建类似的东西吗?
这里有另一个示例,你有想法如何构建类似的东西吗?
由于你说过“如果可以的话,我想用Ruby来完成这个任务...”,因此我假设你可能会接受非Ruby解决方案,只要它符合你的其他要求。
我建议使用Python,主要是因为在Beginning Python Visualization的第一章中,作者Shai Vaingast通过读取GPS接收器的GPS数据并绘制结果的示例进行了说明。如果你愿意尝试基于Python的解决方案,这本书将是一个很好的资源。
以下是用于读取和绘制GPS数据的Python软件包:
以下是Shai Vaingast创建的一个示例图,展示了matplotlib绘制GPS数据的不同能力。
如果你不想使用Python,而更喜欢Ruby——无论出于何种原因——我理解。我试图寻找与matplotlib相当的Ruby库,但我没有找到相应的软件包。
这里有另一个例子,你知道如何创建这样的东西吗?
从右下角看,似乎使用了DISLIN来创建该图像。虽然DISLIN可用于许多编程语言,但DISLIN软件要求页面并未显示支持Ruby。
根据DISLIN网站上的信息,
DISLIN是一个高级绘图库,可将数据显示为曲线、极坐标图、条形图、饼图、3D彩色图、曲面、等高线和地图。该软件可在UNIX、Linux、FreeBSD、OpenVMS、Windows、Mac OSX和MS-DOS等多个操作系统上使用,并支持多种C、Fortran 77和Fortran 90/95编译器。DISLIN程序非常独立于系统,可以在不进行任何更改的情况下从一个操作系统移植到另一个操作系统。对于某些操作系统,DISLIN还支持Perl、Python、Java和C/C++解释器Ch等编程语言。所有支持的操作系统都可以使用DISLIN解释器DISGCL。请参阅支持的操作系统和编译器的完整列表。你是真的想要图片,还是只是想要一种可视化数据的方式?使用谷歌地图 API 如何?
看看这个链接:
http://google-dox.net/O.Reilly-Google.Maps.Hacks/0596101619/googlemapshks-CHP-4-SECT-10.html
我认为从任何编程语言使用gnuplot是一个很好的起点。
然而,我强烈建议在您的代码中添加set size ratio -1
gnuplot命令,因为这将使绘图中的x和y轴比例尺相等,这非常重要。
您还可以通过在时间上等间隔地增加非常小的点标记(假设您的数据中有时间信息,或者至少知道行是以规则的时间间隔采样的),以便感受到运动的速度,否则就会丢失(即,线上间距较大的点标记表示移动更快)。显然,您应该选择一个使它们适当间隔的时间间隔,或者自动计算这样的时间间隔:即通过计算曲线的长度,将其转换为像素单位,并除以10到100之间的任何值,以获得您想要放置的总点数。然后,时间间隔由轨迹的总时间除以该点数给出。对于相当规则的运动,这应该能够稳健地工作。
另一个选择是使用不同于gnuplot的图表系统,它功能强大但有点过时。我所知道的选项包括:
lxy
图表类型感兴趣,可能与scatter图表结合使用以进行点标记。第三个选项似乎最有趣。
也许你已经听说过Processing,但你听说过Ruby-Processing吗?
来自Ruby-Processing的自述:
Ruby-Processing是一个用于Processing代码艺术框架的Ruby封装。
…
如果你认为与Ruby共度美好的下午是一件愉快的事情,或者你有进入代码艺术这个快节奏而又不完全残酷的世界的雄心壮志,那么Ruby-Processing可能是你应该尝试的东西。
…
Processing是由MIT开发的一个框架,用于制作小型代码艺术品、动画、可视化等,最初由Ben Fry和Casey Reas开发,得到了一支小型开源贡献者团队的支持。
Processing已成为视觉导向编程的一种标准,强烈影响了Nodebox、Shoes、Arduino和其他类似项目的设计。