#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