#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
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
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 ) 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
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