libgps C代码示例 [英] libgps C code example
问题描述
我正在为支持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屋!