用Ruby绘制GPS信息

时间:2010-07-14 22:29:25

标签: ruby gps plot spatial gpx

我正在寻找以编程方式将我的GPS日志转换为图像的方法,并希望在Ruby中执行此操作...如果这是可接受的工具。我没有任何GIS背景,但作为程序员,我认为这是一个有趣的问题。

到目前为止,我已经提出了这个问题。首先,您需要某种图形库。我去了gnuplot,因为我找到了Ruby binding,但R这些天似乎很热。我创建了一个小脚本,用于转换GPX文件并将数据提供给gnuplot,结果如下:alt text http://dl.dropbox.com/u/45672/gpslog.png

这看起来很好但是gnuplot似乎真的是一个创建图形的工具,而不是空间数据。这是做到这一点的方式还是有更好的解决方案?

这是另一个example,你知道如何构建这样的东西吗?

6 个答案:

答案 0 :(得分:4)

回答第一个问题

既然你说过“你想在Ruby中做这件事...... 如果那是一个可以接受的工具”,那么我会苟延残喘地假设你可能会对非Ruby解决方案,如果它满足您的所有其他要求。

我建议Python主要是因为在Beginning Python Visualization的第一章中,作者Shai Vaingast通过一个从GPS接收器读取GPS数据然后绘制结果的例子。如果您对基于Python的解决方案持开放态度,那么本书将是一个很好的资源。

以下是用于读取和绘制GPS数据的Python包:

  • pySerial从串口读取GPS数据
  • matplotlib绘制数据。 “matplotlib是一个用Python制作数组2D图的库。虽然它起源于模拟MATLAB®图形命令,但它独立于MATLAB,可以以Pythonic,面向对象的方式使用。”

以下是Shai Vaingast创建的示例图,展示了matplotlib用于绘制GPS数据的一些不同功能。

alt text

如果您不熟悉Python解决方案,并且不喜欢Ruby,无论出于何种原因 - 我理解。我试图在Ruby中搜索等效的matplotlib,但我找不到相应的包。

回答最后一个问题

  

这是另一个example,你知道如何构建这样的东西吗?

查看右下角,似乎DISLIN用于创建该图像。虽然DISLIN可用于很多编程语言,但DISLIN software requirements页面并未显示支持Ruby。

alt text

根据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适用于所有支持的操作系统。查看支持的操作系统和编译器的完整列表。

答案 1 :(得分:1)

您真的想要图像,还是只想一种可视化数据的方法?如何使用谷歌地图api?

点击此链接:

http://google-dox.net/O.Reilly-Google.Maps.Hacks/0596101619/googlemapshks-CHP-4-SECT-10.html

答案 2 :(得分:1)

我认为使用任何编程语言的gnuplot是一个很好的开始方法。

但是,我强烈建议在代码中的某处添加set size ratio -1 gnuplot命令,因为这会使得x和y轴在图中的比例相等,这非常重要。

您还可以使用非常小的点标记来增加线条(假设您的数据中包含时间信息,或者至少您知道按常规时间间隔对行进行采样),因此您可以感受到运动的速度,否则会丢失(即,线上的大间距点标记意味着更快的运动)。显然你应该在点标记之间选择一个时间间隔使它们适当间隔,或者自动计算这样的时间间隔:即通过计算曲线的长度,以像素为单位转换它,然后除以10到100之间的任何值,得到要放置的总点数。然后通过轨道的总时间除以这​​样的点数来给出时间间隔。对于合理规则的动作,这应该有效。

另一个选择是使用与gnuplot不同的图表系统,这个功能强大但有点旧。我知道的选项包括:

  • gruff,这是红宝石,但似乎错过了2D绘图能力(这是一个明显的要求)。
  • XML/SWF Charts,功能强大且灵活,但商业化。在这种情况下,您将使用ruby或任何其他编程语言生成XML文件,然后将其解释为交互式图形。
  • Google Chart API,可以通过网络返回图表图像,在您的代码中伪造适当的GET或POST请求。在这种情况下,您会看到lxy图表类型,可能与点标记的scatter图表相混淆。

第三种选择似乎最有趣。

答案 3 :(得分:1)

GDAL是非常受欢迎的开源GIS工具包,有GDAL Ruby bindings。如果您想要地图数据,open street map非常有用。 OSM和GPS的组合绘图将给出相当不错的结果。 GDAL / OGR Api tutorial就在这里。

答案 4 :(得分:0)

如果你想进一步研究R,那里也有Ruby绑定,但是该项目一年没有活动了:

http://github.com/alexgutteridge/rsruby

答案 5 :(得分:0)

也许您已经听说过Processing,但您听说过Ruby-Processing吗?

  

来自 Ruby-Processing 自述文件:

     

Ruby-Processing是Processing代码艺术框架的Ruby包装器。

     

...

     

如果使用Ruby的一些高质量时间是你的   一个愉快的下午的想法,或者你   港口野心的进入   快节奏,而不是完全   那么代码艺术的残酷世界   Ruby-Processing可能就是其中之一   你应该尝试尺寸。

     

...

     

处理是麻省理工学院开发的   制作小代码的框架   文物,动画,   可视化等等   由Ben Fry和   Casey Reas,由一支小军队支援   开源贡献者。
  加工已成为一种   视觉导向的标准   编程,强烈影响   Nodebox,Shoes的设计,   Arduino和其他同类项目