libgps C代码示例 [英] libgps C code example

查看:158
本文介绍了libgps C代码示例的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在为支持GPS的Raspberry Pi编写一个数字运算的数据记录C程序。我抓住了 gpsd ,其示例应用程序cgps正确显示gps信息。我想使用 libgps 与守护进程连接,以便我可以获得所有便捷信息在我的应用程序中,但我很快就被API的复杂性所淹没。

I am writing a number-crunching data-logging C program for my GPS enabled Raspberry Pi. I grabbed gpsd, and its sample app cgps displays gps information correctly. I wanted to use libgps to interface with the daemon so that I could have all that handy information in my app, but I was quickly overwhelmed by the complexity of its API.

HOWTO页面指向我看 cgps gpxlogger 作为示例代码,但是存在如此多的耦合,以至于我无法全部参与。在频谱的另一端, libgps 页面上的C代码示例被剥离回到它是无法使用的。

The documentation on its HOWTO page points me to look at cgps and gpxlogger for example code, but there's so much coupling that I can't wade through it all. On the opposite end of the spectrum, the C code example on the libgps page is so stripped back that it's unusable.

任何人都可以指向一个类的样本,可能会揭穿它吗?也许是包含 getCoordinates()函数的东西?

Can anybody point me to a single class sample that might demystify this? Perhaps something that contains a getCoordinates() function?

推荐答案

太快了。在浏览其他SO问题后,我遇到了这个完全无关的题。这里是我稍微修改过的版本:

I spoke too soon. After browsing other SO questions, I ran into this completely unrelated question. Here's my very slightly modified version:

#include <gps.h>
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <math.h>

int main() {
int rc;
struct timeval tv;

struct gps_data_t gps_data;
if ((rc = gps_open("localhost", "2947", &gps_data)) == -1) {
    printf("code: %d, reason: %s\n", rc, gps_errstr(rc));
    return EXIT_FAILURE;
}
gps_stream(&gps_data, WATCH_ENABLE | WATCH_JSON, NULL);

while (1) {
    /* wait for 2 seconds to receive data */
    if (gps_waiting (&gps_data, 2000000)) {
        /* read data */
        if ((rc = gps_read(&gps_data)) == -1) {
            printf("error occured reading gps data. code: %d, reason: %s\n", rc, gps_errstr(rc));
        } else {
            /* Display data from the GPS receiver. */
            if ((gps_data.status == STATUS_FIX) && 
                (gps_data.fix.mode == MODE_2D || gps_data.fix.mode == MODE_3D) &&
                !isnan(gps_data.fix.latitude) && 
                !isnan(gps_data.fix.longitude)) {
                    //gettimeofday(&tv, NULL); EDIT: tv.tv_sec isn't actually the timestamp!
                    printf("latitude: %f, longitude: %f, speed: %f, timestamp: %lf\n", gps_data.fix.latitude, gps_data.fix.longitude, gps_data.fix.speed, gps_data.fix.time); //EDIT: Replaced tv.tv_sec with gps_data.fix.time
            } else {
                printf("no GPS data available\n");
            }
        }
    }

    sleep(3);
}

/* When you are done... */
gps_stream(&gps_data, WATCH_DISABLE, NULL);
gps_close (&gps_data);

return EXIT_SUCCESS;
}

我通过运行 gcc -o gps filename .c -lm -lgps

这篇关于libgps C代码示例的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆