Qt 빠른 프로그램에서 GPS에서 위치 가져 오기

찰스

꽤 기본적인 구성으로 gpsd를 실행하는 직렬 포트에 연결된 GPS가있는 컴퓨터가 있습니다. 다음은 / etc / default / gpsd의 내용입니다.

START_DAEMON="true"
USBAUTO="false"
DEVICES="/dev/ttyS0"
GPSD_OPTIONS="-n -G"
GPSD_SOCKET="/var/run/gpsd.sock"

이 구성을 사용하면 gpsd가 잘 실행되고 모든 gpsd 클라이언트 유틸리티 (예 : cgps, gpspipe, gpsmon)가 GPS에서 데이터를 가져올 수 있습니다.

PositionSource다음 구문이 있는 요소를 사용하여 Qt QML 프로그램에서 GPS 데이터에 액세스하려고 하지만 위도 및 경도가 NaN으로 표시되므로 작동하지 않습니다.

    PositionSource {
        id: gpsPos
        updateInterval: 500
        active: true
        nmeaSource: "socket://localhost:2947"

        onPositionChanged: {
            myMap.update( gpsPos.position )
        }
     }

나는 GPS에서 다른 포트로 NMEA 데이터를 사용 gpspipe -r | nc -l 6000하고 지정 하여 파이프를 시도했는데 nmeaSource: "socket://localhost:6000모든 것이 잘 작동합니다!

Qt가 gpsd와 직접 대화하게하려면 어떻게해야합니까?

찰스

gps-share, Gypsy, geoclue2, serialnmea 및 직렬 포트에 연결된 GPS에서 데이터에 액세스하는 기타 방법으로 수정 (즉, 소스에서 컴파일, 설치, 구성, 테스트 등) 한 후 (모든 제안에 대해 Pa_에게 감사드립니다) , 그러나 gpsd가 다른 앱에서 완벽하게 작동하는 동안 결과가 없었기 때문에 QDeclarativePositionSource 클래스를 매우 조잡하게 변경하여 nmeaSource 속성에 대한 URL에서 gpsd 체계에 대한 지원을 구현하여 Qt가 gpsd를 지원하도록 결정했습니다. 이 변경으로 이제 gpsd 소스를 nmeaSource: "gpsd://hostname:2947"(2947이 표준 gpsd 포트) 로 정의 할 수 있습니다 .

변경된 코드는 아래와 같습니다. 나는 이것이 어느 시점에서 Qt에 추가되어야한다고 제안하고 싶지만 그동안 새로운 QML 구성 요소에 내 변경 사항을 구현하기 위해이 클래스를 파생해야한다고 생각하지만 QML을 처음 사용하므로 어떻게 수행되는지 모르겠습니다. activePositionSource 항목 속성을 기반으로 gpsd에서 NMEA 스트림을 중지하고 시작하는 것도 좋은 생각이라고 생각합니다 . 언젠가는 그것에 도달 할 것이지만이 작업을 수행하는 방법에 대한 포인터를 더 감사하겠습니다. 우아한 방법.

void QDeclarativePositionSource::setNmeaSource(const QUrl &nmeaSource)
{
    if ((nmeaSource.scheme() == QLatin1String("socket") ) 
           || (nmeaSource.scheme() == QLatin1String("gpsd"))) {
        if (m_nmeaSocket
                && nmeaSource.host() == m_nmeaSocket->peerName()
                && nmeaSource.port() == m_nmeaSocket->peerPort()) {
            return;
        }

        delete m_nmeaSocket;
        m_nmeaSocket = new QTcpSocket();

        connect(m_nmeaSocket, static_cast<void (QTcpSocket::*)(QAbstractSocket::SocketError)> (&QAbstractSocket::error),
                this, &QDeclarativePositionSource::socketError);
        connect(m_nmeaSocket, &QTcpSocket::connected,
                this, &QDeclarativePositionSource::socketConnected);

        // If scheme is gpsd, NMEA stream must be initiated by writing a command
        // on the socket (gpsd WATCH_ENABLE | WATCH_NMEA flags)
        // (ref.: gps_sock_stream function in gpsd source file libgps_sock.c)
        if( nmeaSource.scheme() == QLatin1String("gpsd")) {
            m_nmeaSocket->connectToHost(nmeaSource.host(), 
                nmeaSource.port(), 
                QTcpSocket::ReadWrite);
            char const *gpsdInit = "?WATCH={\"enable\":true,\"nmea\":true}";
            m_nmeaSocket->write( gpsdInit, strlen(gpsdInit);
        } else {
            m_nmeaSocket->connectToHost(nmeaSource.host(), nmeaSource.port(), QTcpSocket::ReadOnly);
        }
    } else {
...

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

MimeType에서 확장 프로그램 가져 오기

분류에서Dev

Python : 다른 위치에서 파일 가져 오기

분류에서Dev

dotnet Core-내 프로젝트에서 streamreader 용 csv 파일의 올바른 위치 가져 오기

분류에서Dev

Javascript에서 다른 위치의 오프셋 가져 오기

분류에서Dev

Google 시트의 특정 기준에서 가장 빠른 날짜 가져 오기

분류에서Dev

프로그램에서 Ruby 처리로 출력 가져 오기

분류에서Dev

JTextArea에서 캐럿 위치의 XY 위치 가져 오기

분류에서Dev

ARM 장치에서 사용하기 위해 Qt 프로그램을 컴파일 할 수 없습니다.

분류에서Dev

Windows Phone 8 GPS 위치에서 도시 이름 가져 오기

분류에서Dev

Android에서 다른 응용 프로그램 위에 그리기

분류에서Dev

Windows에서 프로그램 파일에 파일을 쓰기 위해 vim 가져 오기

분류에서Dev

OnTouchEvent에서 위치 가져 오기

분류에서Dev

다른 클래스 iOS에서 변수 (위치 정보) 가져 오기

분류에서Dev

서버에서 값을 가져 오는 Android 프로그램이 예기치 않게 종료됩니다.

분류에서Dev

Cocoa 프로그램에서 프로그램 메뉴 가져 오기

분류에서Dev

Cocoa 프로그램에서 프로그램 메뉴 가져 오기

분류에서Dev

Android에서 위치 가져 오기

분류에서Dev

Android에서 위치 가져 오기

분류에서Dev

C #에서 WiX 설치 프로그램에서 설정된 이벤트 소스의 이름 가져 오기

분류에서Dev

다른 응용 프로그램의 웹 브라우저 컨트롤에서 문서 데이터 가져 오기

분류에서Dev

Excel 셀에 포함 된 다른 파일 위치에서 값 가져 오기

분류에서Dev

GPS 위치에 sendbroadcast를 사용할 때 NullPointerException 가져 오기

분류에서Dev

C에서 MPI 프로그램으로 노드 가져 오기

분류에서Dev

Android Xamarin C # : GPS 위치에 사용되는 위성 수 가져 오기

분류에서Dev

다른 응용 프로그램에서 문자열 배열 가져 오기

분류에서Dev

Windows에서 특정 응용 프로그램의 설치 날짜 가져 오기

분류에서Dev

빠른. 정수에서 이진 문자열 가져 오기

분류에서Dev

위치에서 JButton 가져 오기

분류에서Dev

중국의 Android Wearable에서 GPS 위치 가져 오기

Related 관련 기사

  1. 1

    MimeType에서 확장 프로그램 가져 오기

  2. 2

    Python : 다른 위치에서 파일 가져 오기

  3. 3

    dotnet Core-내 프로젝트에서 streamreader 용 csv 파일의 올바른 위치 가져 오기

  4. 4

    Javascript에서 다른 위치의 오프셋 가져 오기

  5. 5

    Google 시트의 특정 기준에서 가장 빠른 날짜 가져 오기

  6. 6

    프로그램에서 Ruby 처리로 출력 가져 오기

  7. 7

    JTextArea에서 캐럿 위치의 XY 위치 가져 오기

  8. 8

    ARM 장치에서 사용하기 위해 Qt 프로그램을 컴파일 할 수 없습니다.

  9. 9

    Windows Phone 8 GPS 위치에서 도시 이름 가져 오기

  10. 10

    Android에서 다른 응용 프로그램 위에 그리기

  11. 11

    Windows에서 프로그램 파일에 파일을 쓰기 위해 vim 가져 오기

  12. 12

    OnTouchEvent에서 위치 가져 오기

  13. 13

    다른 클래스 iOS에서 변수 (위치 정보) 가져 오기

  14. 14

    서버에서 값을 가져 오는 Android 프로그램이 예기치 않게 종료됩니다.

  15. 15

    Cocoa 프로그램에서 프로그램 메뉴 가져 오기

  16. 16

    Cocoa 프로그램에서 프로그램 메뉴 가져 오기

  17. 17

    Android에서 위치 가져 오기

  18. 18

    Android에서 위치 가져 오기

  19. 19

    C #에서 WiX 설치 프로그램에서 설정된 이벤트 소스의 이름 가져 오기

  20. 20

    다른 응용 프로그램의 웹 브라우저 컨트롤에서 문서 데이터 가져 오기

  21. 21

    Excel 셀에 포함 된 다른 파일 위치에서 값 가져 오기

  22. 22

    GPS 위치에 sendbroadcast를 사용할 때 NullPointerException 가져 오기

  23. 23

    C에서 MPI 프로그램으로 노드 가져 오기

  24. 24

    Android Xamarin C # : GPS 위치에 사용되는 위성 수 가져 오기

  25. 25

    다른 응용 프로그램에서 문자열 배열 가져 오기

  26. 26

    Windows에서 특정 응용 프로그램의 설치 날짜 가져 오기

  27. 27

    빠른. 정수에서 이진 문자열 가져 오기

  28. 28

    위치에서 JButton 가져 오기

  29. 29

    중국의 Android Wearable에서 GPS 위치 가져 오기

뜨겁다태그

보관