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

Rencontres QGIS 2025

L'appel à participation est ouvert jusqu'au 19 janvier 2025!

#1 Wed 07 July 2010 11:40

lukhan
Participant occasionnel
Date d'inscription: 5 Jul 2010
Messages: 11

manipulation de shapefile avec API OGR

Bonjour à tous,

Voici mon souci : J'ai un shapefile qui contient une polyligne, et j'aimerai récupérer les 4 points les plus "extrèmes" en terme de positionnement : le point le plus à l'est, nord, sud, et ouest.

J'ai dans l'idée d'ouvrir mon shapefile, de récupérer la geometry, de la convertir en points grâce à OGR_G_ForceToMultiPoint(), et ensuite de faire une petite moulinette min/max pour trouver ces 4 points.

Déjà, je ne sais pas si ma méthode est la bonne, où si il y a plus simple ?

Et second problème, il ne me semble pas avoir le prototype de OGR_ForceToMultiPoint() dans ogr_api.h, comme dans la doc, d'où une "undefined reference to..." à la compilation.

Merci de votre aide.

Hors ligne

 

#2 Wed 07 July 2010 11:54

rouault
Participant assidu
Date d'inscription: 26 Apr 2009
Messages: 168

Re: manipulation de shapefile avec API OGR

La doc de la fonction OGR_G_ForceToMultiPoint() dit :

/*Tries to force the provided geometry to be a multipoint.  Currently this just effects a change on points. */

Bon j'avoue que ce n'est pas super clair, mais le code lui l'est un peu plus ;-) En fait l'implémentation actuelle transforme une GEOMETRYCOLLECTION contenant uniquement des POINT en une géométrie MULTIPOINT. Donc pas pertinent pour ton besoin.

Et les fonctions n'ont été ajoutées dans l'API C du trunk GDAL qu'il y a 3 mois, donc ça ne sera dispo que pour GDAL 1.8.0

Le plus simple c'est que tu itères sur les points constituant ta polyligne. Quelque chose comme :

int nPoints = OGR_G_GetPointCount(hPolyline);
int i;
for(i=0;i<nPoints;i++)
{
    double x = OGR_G_GetX(hPolyline, i);
    double y = OGR_G_GetY(hPolyline, i);
/* code pour comparer (x,y) avec les 4 points extrêmes courants et mettre à jour si besoin */
}

Hors ligne

 

#3 Wed 07 July 2010 11:54

Jeirhome
Membre
Lieu: Liverion
Date d'inscription: 22 Aug 2006
Messages: 4298
Site web

Re: manipulation de shapefile avec API OGR

Si tu veux l'enveloppe, tu prends OGR_G_GetEnvelope 

Sinon avec OGR_G_GetX et OGR_G_GetY tu as les coordonnées de tes points sans faire une conversion de polygon en point (surtout que là c'est du multipoint, donc ça ne t'arranges pas).

Pour la dernière remarque, le nom exact est OGR_G_ForceToMultiPoint


Jérôme Cuinet
L'avantage de la Chine, c'est que le soleil se couche plus tard !

Hors ligne

 

#4 Wed 07 July 2010 18:12

lukhan
Participant occasionnel
Date d'inscription: 5 Jul 2010
Messages: 11

Re: manipulation de shapefile avec API OGR

Ok, j'ai réussi.

Merci beaucoup.

Hors ligne

 

Pied de page des forums

Powered by FluxBB