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é ?

#1 Tue 11 January 2011 12:54

HansTrapp68
Participant occasionnel
Lieu: Lautenbach
Date d'inscription: 21 Jan 2009
Messages: 31
Site web

Extent des entités d'un shapefile

Bonjour,

Dans le cadre de la mise en place du plugin "shortcuts" sous cartoweb, il me faudrait l'extent (bbox) des différentes entités d'un shapefile. il y en a une soixantaine et je me vois mal déterminer les extent à la main. Jai bien trouvé ceci sous Postgis (pour l'exemple):

Code:

SELECT insee,
       Xmin(foo.extent),
       Ymin(foo.extent),
       Xmax(foo.extent),
       Ymax(foo.extent)
 FROM 
      (SELECT Extent(the_geom), insee FROM ma_table GROUP BY insee) AS foo

C'est parfait, la requête me retourne bien les bbox de mes entités. Ce qui m'ennuie, c'est qu'il faut que je migre l'ensemble de mes shp sous Postgis juste pour obtenir ces données.

J'ai cherché sous QGis mais rien trouvé comme outil. Si quelqun a une solution, ligne de commande ou autre, je suis preneur :-)

Merci d'avance
Cordialement
Michel


L'intelligence artificielle n'a aucune chance face à la stupidité naturelle

Hors ligne

 

#2 Tue 11 January 2011 13:40

Yves
Membre du bureau
Lieu: Aix-les-Bains
Date d'inscription: 22 Mar 2006
Messages: 9869
Site web

Re: Extent des entités d'un shapefile

Bonjour,

Code:

ogrinfo -so monshape.shp monshape

Y.


Yves Jacolin, bénévole de l'association GeoRezo.net, agit au nom et pour le compte de l'association - Partageons ce qui nous départage !!  - GeoRezo vous aide ? Aidez GeoRezo !

Hors ligne

 

#3 Tue 11 January 2011 15:31

HansTrapp68
Participant occasionnel
Lieu: Lautenbach
Date d'inscription: 21 Jan 2009
Messages: 31
Site web

Re: Extent des entités d'un shapefile

Merci Yves pour cette information. Cependant, la commande me retourne l'extent global de la couche et non les extent des différents éléments du shp. J'ai essayé avec d'autres commutateurs sans succès...

Pas grave, je vais passer par Postgis.

Cordialement
Michel


L'intelligence artificielle n'a aucune chance face à la stupidité naturelle

Hors ligne

 

#4 Tue 11 January 2011 22:52

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

Re: Extent des entités d'un shapefile

Avec OGR, tu peux itérer sur les Feature du layer (feat = lyr.GetNextFeature()), récupérer leur géométrie (geom = feat.GetGeomtryRef()) et son extent (geom.GetEnvelope())

Hors ligne

 

#5 Wed 12 January 2011 00:19

ThomasG
Membre
Lieu: Nantes
Date d'inscription: 9 Sep 2005
Messages: 946
Site web

Re: Extent des entités d'un shapefile

Bonsoir,

Un code basique en pièce jointe qui fait le boulot en Python en suivant la méthode proposée par rouault.

Les instructions

Ouvrir la commande FW_Tools (sous Windows) puis se déplacer dans le répertoire où est votre shp
Faire un

Code:

python calculate_extent_from_shp_to_csv.py votrefichier.shp

Normalement sous Windows (je suis sous Linux wink ) vous devriez avoir un retour vous affichant toutes les colonnes avec la bbox et le script crée un fichier votrefichier.csv qui contient ces mêmes informations.

A vous faire la partie pour appliquer le script à plusieurs shp. C'est assez simple il vous suffit de lister les shp et pouvoir ainsi enchainer les "python calculate_extent_from_shp_to_csv.py monfichier1.shp", "python calculate_extent_from_shp_to_csv.py monfichier2.shp", "python calculate_extent_from_shp_to_csv.py monfichier3.shp",...

Cordialement

ThomasG


Fichier(s) joint(s) :
Pour accéder aux fichiers vous devez vous inscrire.

Hors ligne

 

#6 Thu 13 January 2011 11:16

HansTrapp68
Participant occasionnel
Lieu: Lautenbach
Date d'inscription: 21 Jan 2009
Messages: 31
Site web

Re: Extent des entités d'un shapefile

Bonjour,

Mes remerciements pour vos réponses.

Thomas, j'ai testé ton script sous Windows Vista, il fonctionne très bien. Quelques observations complémentaires:
- pas de fichier csv de créé
- les données attributaires sont bien séparées par des ";" mais pas les extent (ils sont séparés par des blancs)

C'est vraiment secondaire. Un copier/coller sous Notepad++ et un coup de rechercher/remplacer pour le ";" et le tour est joué :-)

Bonne journée
Cordialement
Michel


L'intelligence artificielle n'a aucune chance face à la stupidité naturelle

Hors ligne

 

#7 Thu 13 January 2011 18:00

mathieu_r
Participant occasionnel
Date d'inscription: 17 Mar 2009
Messages: 21

Re: Extent des entités d'un shapefile

Sinon, j'ai essayé de faire la même chose dans R.

Pour info, le code serait le suivant:

Code:

#import des librairies
library(rgdal)
library(sp)

#lecture de la couche
coucheGeo= readOGR("coucheGeo.shp",layer="coucheGeo")

#récupération des coordonnées de l'étendue et injection comme attributs de la couche
coucheGeo$xmin=sapply(slot(coucheGeo, "polygons"), function(i) bbox(i)[1,1])
coucheGeo$xmax=sapply(slot(coucheGeo, "polygons"), function(i) bbox(i)[1,2])
coucheGeo$ymin=sapply(slot(coucheGeo, "polygons"), function(i) bbox(i)[2,1])
coucheGeo$ymax=sapply(slot(coucheGeo, "polygons"), function(i) bbox(i)[2,2])

#écriture du fichier
writeOGR(coucheGeo, ".", "coucheGeo", driver="ESRI Shapefile")

Dernière modification par mathieu_r (Thu 13 January 2011 23:30)

Hors ligne

 

Pied de page des forums

Powered by FluxBB