【问题标题】:Plotting GPS info with Ruby用 Ruby 绘制 GPS 信息
【发布时间】:2011-03-16 03:06:33
【问题描述】:

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

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

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

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

【问题讨论】:

  • GPS 日志是什么样的?你有纬度/经度信息吗?
  • 我正在使用 GPX 文件,所以是的,它们有纬度/经度信息。我想您可以在绘图之前将文件转换为一种或另一种格式。

标签: ruby gps plot spatial gpx


【解决方案1】:

第一个问题的答案

既然你说你“想在 Ruby 中做这个......如果这是一个可以接受的工具”,我会冒险并假设你可能会接受一个非 Ruby 解决方案,如果它满足您的所有其他要求。

我推荐Python 主要是因为在Beginning Python Visualization 的第一章中,作者Shai Vaingast 经历了一个从GPS 接收器读取GPS 数据的示例,然后绘制了结果。如果您愿意接受基于 Python 的解决方案,这本书将是一个很好的资源。

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

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

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

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

最后一个问题的答案

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

查看右下角,DISLIN 似乎用于创建该图像。虽然 DISLIN 可用于很多编程语言,但 DISLIN software requirements 页面并未显示支持 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 可用于所有支持的操作系统。查看支持的操作系统和编译器的完整列表。

【讨论】:

    【解决方案2】:

    您真的想要图像,还是只是一种可视化数据的方式?用google maps api怎么样?

    查看此链接:

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

    【讨论】:

    • 谢谢 daryn,但是是的,我确实想要图片。我不喜欢使用 Google 地图,因为我不喜欢这些限制(例如,您不能删除徽标或版权信息)并且我想学习自己绘制这些东西,这就是目标。
    【解决方案3】:

    我认为从任何编程语言中使用 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 图表类型感兴趣,可能与点标记的 scatter 图表复合。

    第三个选项似乎最好玩。

    【讨论】:

    • 谢谢,这是迄今为止最完整的答案。第一个和第二个选项对我来说是不行的(因为你列出的原因),所以离开了谷歌图表。可悲的是,谷歌图表仍然没有给我我正在寻找的灵活性。这些事情不能通过谷歌图表完成,例如:lvzc.be/charronline/igc/2010/1095ljd71.png
    • 你是对的,我认为使用谷歌图表制作包含地图和 xyline 的复合图表是可能的,但显然不是。真可惜!但是,我很确定它可以使用某种位图背景来完成,或者使用不同的线来表示地图本身。我看到另一个评论中提到的 DISLIN 是一个我不知道的有趣选项。我还会添加 Matlab 映射工具箱,它可能是执行此任务的最强大和最灵活的选项之一,但它是商业化的并且可能非常昂贵。
    【解决方案4】:

    GDAL是非常流行的开源GIS套件,有GDALRuby bindings。如果你想要地图数据,open street map 非常有用。 OSM 和 GPS 的组合绘图将产生非常好的结果。 GDAL/OGR Api tutorial 在这里。

    【讨论】:

      【解决方案5】:

      如果您想更深入地研究 R,也有 Ruby 绑定,但该项目已经一年多没有活动了:

      http://github.com/alexgutteridge/rsruby

      【讨论】:

      • 谢谢迈克尔,我会看看 R。任何地方的 GIS n00b 教程?
      【解决方案6】:

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

      来自 Ruby-Processing 自述文件:

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

      如果您与 Ruby 共度美好时光 一个愉快的下午的想法,或者你
      怀揣进军的野心 快节奏而不是完全 Code Art 的残酷世界,然后 Ruby-Processing 可能是一些东西 你应该试穿尺寸。

      Processing 是 MIT 开发的 编写小代码的框架 人工制品、动画、 可视化等, 最初由 Ben Fry 和 Casey Reas,由一支小部队支持 开源贡献者。
      处理已成为一种 视觉导向标准 编程,强烈影响 Nodebox,鞋子的设计, Arduino 和其他类似的项目

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-09-10
        相关资源
        最近更新 更多