1

このようなC++プログラムを使用して、端末にGPSメッセージを連続的に出力するGPSレシーバーを使用しています

Latitude:13.3  Longitude:80.25
Latitude:13.4  Longitude:80.27
Latitude:13.5  Longitude:80.28

このデータを C++ プログラム (QT アプリケーション) 内に取り込みたい

以下は私の完全なプログラムコードです

void QgsGpsPlotPluginGui::on_buttonBox_accepted()
{

QString myPluginsDir = "usr/lib/qgis/plugins";
QgsProviderRegistry::instance(myPluginsDir);


QgsVectorLayer * mypLayer = new QgsVectorLayer("/home/mit/Documents/Dwl/GIS DataBase/india_placename.shp","GPS","ogr");

QgsSingleSymbolRenderer *mypRenderer = new
QgsSingleSymbolRenderer(mypLayer->geometryType());
QList <QgsMapCanvasLayer> myLayerSet;
mypLayer->setRenderer(mypRenderer);
if (mypLayer->isValid())
{
qDebug("Layer is valid");
}
else
{
qDebug("Layer is NOT valid");
}

// Add the Vector Layer to the Layer Registry
QgsMapLayerRegistry::instance()->addMapLayer(mypLayer, TRUE);
// Add the Layer to the Layer Set
myLayerSet.append(QgsMapCanvasLayer(mypLayer, TRUE));
QgsMapCanvas * mypMapCanvas = new QgsMapCanvas(0, 0);
mypMapCanvas->setExtent(mypLayer->extent());
mypMapCanvas->enableAntiAliasing(true);
mypMapCanvas->setCanvasColor(QColor(255, 255, 255));
mypMapCanvas->freeze(false);


QgsFeature * mFeature = new QgsFeature();
QgsGeometry * geom = QgsGeometry::fromPoint(*p);

QGis::GeometryType geometryType=QGis::Point;
QgsRubberBand * mrub = new QgsRubberBand (mypMapCanvas,geometryType);
QgsPoint * p = new QgsPoint();
double latitude =13.3;
double longitude = 80.25;
p->setX(latitude);
p->setY(longitude);
mrub->setToGeometry(geom,mypLayer);
mrub->show()

}

上記のコードでは、次のように緯度と経度の値を手動で入力しました。

    double latitude =13.3;
    double longitude = 80.25;
    p->setX(latitude);
    p->setY(longitude);           

しかし、端末からこれらの値を取得する必要があります。

どちらのプログラムも c++ で記述されていますが、異なるフレームワークに属しています。

4

3 に答える 3

0

パイプを作成するだけです:

#include <cstdio>
#include <iostream>

#define WWRITER 0

#if WWRITER
int main() {
    while (true) {
        std::cout << "Latitude:13.3 Longitude:80.25";
    }
    return 0;
}
#else
int main() {
    FILE* fp = popen("Debug/Writer", "r");
    if(fp == 0)  perror(0);
    else {
        const std::size_t LatitudeLength = 9;
        const std::size_t LongitudeLength = 10;
        char latitude_name[LatitudeLength+1];
        char longitude_name[LongitudeLength+1];
        double latitude;
        double longitude;
        while(fscanf(fp, "%9s%lf%10s%lf",
            latitude_name,
            &latitude,
            longitude_name,
            &longitude)  == 4)
        {
            std::cout << "Values: " << latitude << ", " << longitude << std::endl;
        }
        pclose(fp);
    }
    return 0;
}
#endif

注: この例は際限なく実行されます。

于 2013-09-02T10:55:25.903 に答える
0

ソリンの答えに+1すると、標準出力を標準入力に簡単に渡すことができます:)しかし、Linux/cigwinで実行していると仮定しますか?

しかし、両方のプログラムコードにアクセスできる場合、より良い解決策は、UdpSockets (またはおそらく Tcp ですが、Udp の方が簡単です) を使用し、この方法でプログラム間でデータを渡すことです...ソリューションに必要な大きさ/長期がわかりませんしかし、それらを「長期的」でより保守しやすい方法で統合したい場合は、これがより良いアプローチになります。

于 2013-09-02T10:58:33.807 に答える