Отображение информации GPS с помощью Ruby - PullRequest
5 голосов
/ 15 июля 2010

Я ищу способы программного преобразования моих журналов GPS в изображения и хотел бы сделать это в Ruby ... если это приемлемый инструмент. У меня нет никаких знаний по ГИС, но, как программист, я думаю, что это интересная проблема.

Вот то, что я придумал до сих пор. Сначала вам понадобится какая-то графическая библиотека. Я выбрал gnuplot , поскольку нашел для него Ruby-связку , но R в наши дни кажется горячим. Я создал небольшой скрипт, который преобразует файл GPX и передает данные в gnuplot, в результате чего получается что-то вроде этого: alt text http://dl.dropbox.com/u/45672/gpslog.png

Это выглядит хорошо, но gnuplot кажется действительно инструментом для создания графиков, а не пространственных данных. Это способ сделать это или есть гораздо лучшие решения?

Вот еще один пример , есть идеи, как создавать такие вещи?

Ответы [ 6 ]

4 голосов
/ 10 сентября 2010

Ответ на первый вопрос

Поскольку вы заявили, что «хотели бы сделать это в Ruby ... , если это приемлемый инструмент », я выхожу на конечность и предполагаю, что вы можете быть открыты для -Рубийное решение, если оно отвечает всем другим вашим требованиям.

Я бы порекомендовал Python в первую очередь потому, что в первой главе Начало визуализации Python Шай Вайнгаст - автор - рассматривает пример чтения в GPS данные из приемника GPS, а затем составляет результаты. Если вы открыты для решения на основе Python, эта книга будет отличным ресурсом.

Вот пакеты Python, которые используются для чтения и отображения данных GPS:

  • pySerial для считывания данных GPS с последовательного порта
  • matplotlib для построения графика данных. « matplotlib - это библиотека для создания двумерных графиков массивов в Python. Хотя она берет свое начало в эмуляции графических команд MATLAB®, она не зависит от MATLAB и может использоваться в Pythonic, объектно-ориентированном виде . "

Вот пример фигуры, созданной Shai Vaingast, демонстрирующей несколько различных возможностей matplotlib для построения данных GPS.

alt text

Если вы не открыты для решения Python и предпочитаете Ruby - по любой причине - я понимаю. Я пытался найти эквивалент matplotlib в Ruby, но я не нашел эквивалентного пакета.

Ответ на последний вопрос

Вот еще один пример , есть идеи, как создавать такие вещи?

Глядя в нижний правый угол, кажется, что DISLIN использовался для создания этого изображения. Хотя DISLIN доступен для нескольких языков программирования, на странице требований к программному обеспечению *1050* DISLIN не видно, что Ruby поддерживается.

alt text

По данным сайта DISLIN ,

DISLIN - это библиотека графиков высокого уровня для отображения данных в виде кривых, полярных диаграмм, гистограмм, круговых диаграмм, трехмерных цветных диаграмм, поверхностей, контуров и карт.

Программное обеспечение доступно для нескольких компиляторов C, Fortran 77 и Fortran 90/95 в операционных системах UNIX, Linux, FreeBSD, OpenVMS, Windows, Mac OSX и MS-DOS. Программы DISLIN очень независимы от системы, их можно переносить из одной операционной системы в другую без каких-либо изменений.

В некоторых операционных системах DISLIN также поддерживает языки программирования Perl, Python, Java и интерпретатор C / C ++ Ch. Интерпретатор DISLIN DISGCL доступен для всех поддерживаемых операционных систем. См. Полный список поддерживаемых операционных систем и компиляторов.

1 голос
/ 10 сентября 2010

GDAL - очень популярный ГИС-комплект с открытым исходным кодом, есть GDAL Рубиновые привязки .Если вам нужны данные карты, открыть карту улиц очень полезно.Совместное построение OSM и GPS даст довольно хорошие результаты.GDAL / OGR Api учебник здесь.

1 голос
/ 09 сентября 2010

Я думаю, что использование 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 для точечных маркеров.

Третий вариант кажется самым забавным.

1 голос
/ 15 июля 2010

Вы действительно хотите изображения или просто способ визуализации данных?Как насчет использования API Google Maps?

Проверьте эту ссылку:

http://google -dox.net / O.Reilly-Google.Maps.Hacks / 0596101619 / googlemapshks-ТЭЦ-4-СЕКТ-10.html

0 голосов
/ 10 сентября 2010

Возможно, вы уже слышали о Обработка , но слышали ли вы о Руби-обработка ?

Из РубинОбработка readme:

Ruby-Processing - это оболочка Ruby для фреймворка кода обработки.

Если ваше время работы с Ruby - это вашеИдея приятного дня, или вы
питаете амбиции войти в быстро развивающийся и не совсем беспощадный мир Code Art, тогда Ruby-Processing - это, вероятно, то, что вы должны примерить для размера.

Обработка - это разработанная в MIT структура для создания небольших артефактов кода, анимации, визуализации и т. П., Разработанная первоначально Беном Фрием и Кейси Реасом при поддержке небольшой армии разработчиков открытого исходного кода.
Обработкастал своего рода стандартом для визуально-ориентированного программирования, оказав сильное влияние на проекты Nodebox, Shoes, Arduino и других родственных проектов

0 голосов
/ 05 сентября 2010

Если вы хотите больше взглянуть на R, для этого тоже есть привязки Ruby, но в течение года не было никаких действий над проектом:

http://github.com/alexgutteridge/rsruby

...