extraction a parir de BD

Extraire des données OSM, créer sa carte, uMap, utiliser sur un GPS ou un smartphone...
maxeeee

extraction a parir de BD

Message par maxeeee » ven. févr. 10, 2012 9:35 pm

salut , bon mon problème est comment extraire les données a partir des tables des bases des données déjà prête sous qgis pour exporter sous c++ pour après commencer a qu'on appelle routing c a dire aller de A vers B a laide de plus court chemin aussi comment peut avoir les coordonnées dune point quelconque le hauteur le longitudinale ... sous Qgis merciiii

HSylvio

Re: extraction a parir de BD

Message par HSylvio » mer. févr. 29, 2012 6:09 pm

Salut,

ci-dessous quelques lignes (pardon je les ai ni commentées ni bien indentées, et ai laissé les commentaires de là où j'ai trouvé les tutos) pour commencer à répondre à ta première question (j'y ai juste passé les deux deniers jours!),

si tu as des pistes/codes pour le geocodage et routing, je suis preneur, j'en aurai besoin d'ici très peu!!

Code : Tout sélectionner


Appel : 

		{	PGSQL_Interface psqlInterface;
			psqlInterface.sendRequest("select osm_id, highway, way from planet_osm_point where highway <> '';");
			cout<<psqlInterface.getOutputTest();
			psqlInterface.exit_nicely();
			getchar();
		}


// onctions de la classe PGSQL_Interface :

PGSQL_Interface::PGSQL_Interface() {

    myConnection =  PQconnectdb("dbname='gis'");
    if (PQstatus(myConnection) != CONNECTION_OK)
    {
    	cout<<stderr<<"Connection to database failed: "<<PQerrorMessage(myConnection)<<endl;
    }



    res = PQexec(myConnection, "BEGIN");
    if (PQresultStatus(res) != PGRES_COMMAND_OK)
    {
            cout<<"BEGIN command failed: "<< PQerrorMessage(myConnection)<<endl;
            PQclear(res);
            exit_nicely();
    }


    /*
     * Should PQclear PGresult whenever it is no longer needed to avoid memory leaks
     */
    PQclear(res);

    /*
     * Fetch rows from pg_database, the system catalog of databases
     */
    res = PQexec(myConnection, "DECLARE myportal CURSOR FOR select * from pg_database");
        if (PQresultStatus(res) != PGRES_COMMAND_OK)
        {
                cerr<< "DECLARE CURSOR failed: "<< PQerrorMessage(myConnection)<<endl;
                PQclear(res);
                exit_nicely();
        }
    PQclear(res);

    res = PQexec(myConnection, "FETCH ALL in myportal");
    if (PQresultStatus(res) != PGRES_TUPLES_OK)
    {
    	cerr<< "FETCH ALL failed: "<< PQerrorMessage(myConnection)<<endl;
            PQclear(res);
            exit_nicely();
    }
}

string PGSQL_Interface::getOutputTest(){


	string toRet;
	int nbTuples = PQntuples(res);
	toRet = "** PQntuples(res) = " + toString(nbTuples) + "**\n\n";
	cout<<"PQntuples(res) = "<<nbTuples<<endl;
    for (int i = 0; i < nbTuples; i++)
    {
            char	*iptr, *tptr, *bptr;
            int		blen;//, ival;
            int		i_fnum, t_fnum, b_fnum;

            /* Use PQfnumber to avoid assumptions about field order in result */
            i_fnum = max(0, PQfnumber(res, "some_id"));
            t_fnum = max(1, PQfnumber(res, "some_text"));
            b_fnum = max(2, PQfnumber(res, "b"));

            cout<<"i_fnum = "<<i_fnum <<"; t_fnum = "<<t_fnum <<"; b_fnum = "<<b_fnum <<endl;

            /* Get the field values (we ignore possibility they are null!) */
            iptr = PQgetvalue(res, i, i_fnum);
            tptr = PQgetvalue(res, i, t_fnum);
            bptr = PQgetvalue(res, i, b_fnum);


            blen = PQgetlength(res, i, b_fnum);

            toRet += "tuple " + toString(i) + ": got\n";
            toRet += " i : '" + toString(PQfname(res, i_fnum)) + "' = (" + toString(PQgetlength(res, i, i_fnum)) + " bytes) " + toString(iptr) + "\n";
            toRet += " t : '" + toString(PQfname(res, t_fnum)) + "' = (" + toString(PQgetlength(res, i, t_fnum)) + " bytes) '" + toString(tptr) + "'\n";
            toRet += " b : '" + toString(PQfname(res, b_fnum)) + "' = (" + toString(blen) + " bytes) '" + toString(bptr) + "'\n";

    }

   // PQclear(res);

    return toRet;
}

void PGSQL_Interface::sendRequest(string toSend){
    res = PQexec(myConnection, toSend.c_str());
    if (PQresultStatus(res) != PGRES_TUPLES_OK)
    {
            fprintf(stderr, "PQexec failed: %s", PQerrorMessage(myConnection));
            PQclear(res);
            exit_nicely();
    }
}
Bon courage!

Répondre

Qui est en ligne ?

Utilisateurs parcourant ce forum : Aucun utilisateur inscrit et 11 invités