banniere

Le portail francophone de la géomatique


Toujours pas inscrit ? Mot de passe oublié ?
Nom d'utilisateur    Mot de passe              Toujours pas inscrit ?   Mot de passe oublié ?

Annonce

GEODATA DAYS 2024

#1 Sun 10 January 2010 16:24

bernard.nath
Juste Inscrit !
Date d'inscription: 10 Jan 2010
Messages: 2

Récupérer les coordonnées d'un Shapefile

Bonjour,

Je dois réaliser un programme de présentation de projection en France. Pour ce faire, j'ai récupérer un shp des limites de départements de France. Je cherche donc à récupérer ces coordonnées sous forme de tableau (coord géographique) pour les transformer en coordonnées planes.
Pour réaliser cette manipulation, je fais appel à la bibliothèque OGR (http://www.gdal.org/ogr/index.html). Mon code est le suivant :

Code:

#include <iostream>
#include <cmath>
#include "ogrsf_frmts.h"

int main()
{
    OGRRegisterAll();
    OGRDataSource       *poDS;

    poDS = OGRSFDriverRegistrar::Open( "LIMITE_DEPARTEMENT.shp", FALSE );
    if( poDS == NULL )
    {
        printf( "Open failed.\n" );
        exit( 1 );
    }

    OGRLayer  *poLayer;

    poLayer = poDS->GetLayerByName( "LIMITE_DEPARTEMENT" );

    OGRFeature *poFeature;

    poLayer->ResetReading();
    while( (poFeature = poLayer->GetNextFeature()) != NULL )
    {
        OGRFeatureDefn *poFDefn = poLayer->GetLayerDefn();
        int iField;

        for( iField = 0; iField < poFDefn->GetFieldCount(); iField++ )
        {
            OGRFieldDefn *poFieldDefn = poFDefn->GetFieldDefn( iField );

            if( poFieldDefn->GetType() == OFTInteger )
                printf( "%d,", poFeature->GetFieldAsInteger( iField ) );
            else if( poFieldDefn->GetType() == OFTReal )
                printf( "%.3f,", poFeature->GetFieldAsDouble(iField) );
            else if( poFieldDefn->GetType() == OFTString )
                printf( "%s,", poFeature->GetFieldAsString(iField) );
            else
                printf( "%s,", poFeature->GetFieldAsString(iField) );
        }

        OGRGeometry *poGeometry;

        poGeometry = poFeature->GetGeometryRef();
        if( poGeometry != NULL
            && wkbFlatten(poGeometry->getGeometryType()) == wkbPoint )
        {
            OGRPoint *poPoint = (OGRPoint *) poGeometry;

            printf( "%.3f,%3.f\n", poPoint->getX(), poPoint->getY() );
        }
        else
        {
            printf( "no point geometry\n" );
        }

        OGRFeature::DestroyFeature( poFeature );
    }
    OGRDataSource::DestroyDataSource( poDS );
}

Mais rien ne se passe et j'obtiens la capture d'écran de QtCreator qui est en pièce jointe.

Merci d'avance pour votre aide

Hors ligne

 

Pied de page des forums

Powered by FluxBB