5

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

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

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

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

4

6 回答 6

4

回答第一个问题

既然您说您“希望在 Ruby 中执行此操作......如果这是一个可以接受的工具”,我会冒昧地假设您可能会接受非 Ruby 解决方案,如果它满足您的所有其他需求。

我之所以推荐Python ,主要是因为在《 Python 可视化入门》的第一章中,作者 Shai Vaingast 介绍了一个从 GPS 接收器读取 GPS 数据然后绘制结果的示例。如果您愿意接受基于 Python 的解决方案,那么这本书将是一个很好的资源。

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

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

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

替代文字

如果您不接受 Python 解决方案,并且更喜欢 Ruby(无论出于何种原因),我理解。我试图在 Ruby 中搜索matplotlib的等效项,但没有找到等效的包。

回答最后一个问题

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

查看右下角,似乎是使用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 适用于所有受支持的操作系统。查看支持的操作系统和编译器的完整列表。

于 2010-09-10T01:12:15.847 回答
1

GDAL是非常流行的开源 GIS 工具包,有 GDAL Ruby bindings。如果你想要地图数据,打开街道地图非常有用。OSM 和 GPS 的组合绘图将产生非常好的结果。GDAL/OGR Api教程在这里。

于 2010-09-10T12:13:22.483 回答
1

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

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

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

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

  • gruff,它适用于 ruby​​,但似乎缺少 2D 绘图能力(这是一个明显的要求)。
  • XML/SWF Charts,功能强大且灵活,但商业化。在这种情况下,您将使用 ruby​​ 或任何其他编程语言来生成 XML 文件,然后将其解释为交互式图形。
  • Google Chart API,它可以通过网络返回图表图像,在您的代码中伪造适当的 GET 或 POST 请求。在这种情况下,您对图表类型感兴趣,可能与点标记的散点图lxy复合。

第三个选项似乎最有趣。

于 2010-09-09T09:24:38.050 回答
1

您真的想要图像,还是只是一种可视化数据的方式?使用谷歌地图API怎么样?

看看这个链接:

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

于 2010-07-14T23:05:55.783 回答
0

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

来自Ruby-Processing自述文件:

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

…</p>

如果在 Ruby 上度过一段美好的时光是您度过一个愉快下午的想法,或者您
怀有进入快节奏而不是完全残酷的 Code Art 世界的雄心,那么 Ruby-Processing 可能是您应该尝试的规模。

…</p>

Processing 是一个由 MIT 开发的框架,用于制作少量代码工件、动画、可视化等,最初由 Ben Fry 和 Casey Reas 开发,并得到一小群开源贡献者的支持。
处理已经成为一种面向视觉的编程标准,强烈影响着 Nodebox、Shoes、Arduino 和其他类似项目的设计

于 2010-09-09T23:19:17.577 回答
0

如果你想更多地研究 R,也有 Ruby 绑定,但是一年多来这个项目没有任何活动:

http://github.com/alexgutteridge/rsruby

于 2010-09-05T16:07:27.407 回答