#1 Tue 25 July 2006 13:35
- jamasig
- Participant occasionnel
- Date d'inscription: 25 Jul 2006
- Messages: 14
decoupage d'un raster
bonjour,
je sais pas si qlq un px m'aider a resoudre mon probleme
je veux decouper un raster automatiquement en utilisant un shapefile qui est tracé en dessus
je crois qu"il me faut developper un programme en arcobject, pour l'affaire
j'ai trouvé un outil qui s'appelle hawths (la foctionnalité decouper par des polygones), mais ce que je veux c est d'utiliser cette fonctionnalité dans un script arcobject.
en plus lorsque j ai testé l'outil hawths mais celui ci me crie une image tif georeferencée mais sans le fichier tfw ce qui infecte la portabilité de l'image
je sais pas si qlq un à une solution à mon probleme et merci
Hors ligne
#2 Tue 25 July 2006 22:48
- Miniopterine
- Participant assidu
- Date d'inscription: 29 Nov 2005
- Messages: 278
Re: decoupage d'un raster
Il existe cet outil ici,
http://support.esrifrance.fr/
Découpage d'un raster
Description:
Cet outil permet de découper, dans ArcMap, une couche raster en spécifiant
les coordonnées du rectangle de découpage ou en utilisant l'enveloppe d'une
entité (ou d'un élément graphique) de la carte. Le raster résultant du
découpage peut être sauvegardé au format TIFF ou ERDAS Imagine.
Téléchargement:
Télécharger le fichier
Decoupage_raster.zippuis
le décompresser dans le répertoire de votre choix.
Prérequis:
Cet outil nécessite ArcGIS 8.x ou ArcGIS 9.x.
Hors ligne
#3 Wed 26 July 2006 10:50
- janyv
- Participant assidu
- Lieu: Montreuil, France
- Date d'inscription: 8 Feb 2006
- Messages: 356
Re: decoupage d'un raster
Voici un exemple de code VB qui découpe une classe raster stockée dans une geodatabase ArcSDE vers une classe raster stockée dans une geodatabase personnelle (en fait un fichier .img). Le découpage est effectué en précisant les coordonnées terrain du rectangle de découpage. On pourrait, pour améliorer le code aller chercher l'enveloppe d'une entité d'une classe d'entités ou d'un shapefile servant de source de découpage
Bon codage,
Code:
Private Sub ClipRaster() Dim pRasterProp As esriDataSourcesRaster.IRasterProps Dim pBands As esriDataSourcesRaster.IRasterBandCollection Dim pBand As esriDataSourcesRaster.IRasterBand Dim pRaster As esriGeoDatabase.IRaster Dim pRasterDS As esriGeoDatabase.IRasterDataset Dim pSDEFact As esriGeoDatabase.IWorkspaceFactory Dim pAccessWksFact As esriGeoDatabase.IWorkspaceFactory Dim pPropset As esriSystem.IPropertySet Dim pWks As esriGeoDatabase.IWorkspace Dim pSigDONRas As esriGeoDatabase.IRasterWorkspaceEx Dim pClipRas As esriGeoDatabase.IRasterWorkspaceEx Dim pExt As esriGeometry.IEnvelope Dim dTailleCell As Double Dim iCol As Integer Dim iRow As Integer Dim sName As String Dim sNewPath As String ' ********************************************************************************* ' * Connexion à la géodatabase personnelle qui accueille le résultat du découpage * ' ********************************************************************************* Set pAccessWksFact = New esriDataSourcesGDB.AccessWorkspaceFactory Set pClipRas = pAccessWksFact.OpenFromFile("C:\temp\clipraster.mdb", 0) Set pAccessWksFact = Nothing ' ******************************************************************************* ' * Connextion à la géodatabase ArcSDE qui contient la classe raster à découper * ' ******************************************************************************* Set pPropset = New esriSystem.PropertySet With pPropset .SetProperty "SERVER", "NOM_DU_SERVEUR_ARCSDE" .SetProperty "INSTANCE", "NOM_SERVICE_OU_PORT_TCP" .SetProperty "DATABASE", "" .SetProperty "USER", "UTILISATEUR_AUTORISE" .SetProperty "PASSWORD", "MOT_DE_PASSE" .SetProperty "VERSION", "SDE.DEFAULT_OU_AUTRE_VERSION" End With Set pSDEFact = New esriDataSourcesGDB.SdeWorkspaceFactory Set pSigDONRas = pSDEFact.Open(pPropset, 0) Set pPropset = Nothing Set pSDEFact = Nothing ' ********************************************** ' * Pointer sur la classe raster à découper * ' * et initialiser l'objet cible du découpage. * ' ********************************************** Set pRasterDS = pSigDONRas.OpenRasterDataset("NOM_DE_LA_CLASSE_RASTER_A_DECOUPER") Set pRaster = pRasterDS.CreateDefaultRaster Set pRasterProp = pRaster Set pBands = pRaster ' ********************************************* ' * Définir le rectangle de découpage. * ' * Dans l'exemple, on est en mètres terrain. * ' ********************************************* Set pExt = New esriGeometry.Envelope With pExt .XMin = 361951 .YMin = 2352451 .XMax = 501128 .YMax = 2445172 End With ' ************************************************************ ' * Affecter les hauteur et largeur en pixel en fonction * ' * de la taille de la cellule. Attention, ici la résolution * ' * est la même en X qu'en Y. * ' * Affecter l'etendue spatiale. * ' ************************************************************ With pRasterProp dTailleCell = (.MeanCellSize.X + .MeanCellSize.Y) / 2 .Width = Int((pExt.XMax - pExt.XMin) / dTailleCell) .Height = Int((pExt.YMax - pExt.YMin) / dTailleCell) .Extent = pExt End With ' *********************************************************** ' * Effectuer le découpage dans la géodatabase personnelle. * ' *********************************************************** pBands.SaveAs "NOM_DE_LA_CLASSE_RASTER_DECOUPEE", pClipRas, "TIFF" ' *********************** ' * Détruire les objets * ' *********************** Set pRasterDS = Nothing Set pRaster = Nothing Set pExt = Nothing Set pRasterProp = Nothing Set pBands = Nothing Set pRasterDS = Nothing set pClipRas = nothing Set pSigDONRas = Nothing End Sub
yvan.
Si tu ne sais pas demande, si tu sais partage
Hors ligne
#4 Wed 26 July 2006 11:14
- jamasig
- Participant occasionnel
- Date d'inscription: 25 Jul 2006
- Messages: 14
Re: decoupage d'un raster
merci bcp pour le code, mais j'aimerais bien savoir si cela marche bien avec les images tiff géoreferencées, et si l'image resultante est générée avec son fichier tws
Hors ligne
#5 Wed 26 July 2006 11:30
- janyv
- Participant assidu
- Lieu: Montreuil, France
- Date d'inscription: 8 Feb 2006
- Messages: 356
Re: decoupage d'un raster
Si vous souhaitez vous en assurer, changer l'espace de stockage pour un système de fichiers plutôt qu'une geodatabase personnelle comme dans mon exemple et essayez. Si le fichier world (.tfw) n'est pas généré, vous pouvez utiliser l'interface esriDataSourcesRaster::IworldFileExport comme ci-après :
Code:
Dim pWorldFileExport as esriDataSourcesRaster.IWorldFileExport ' Faire pointer sur le jeu de données Raster découpé Set pWorldFileExport = pRasterDS pWorldFileExport.Write set pWorldFileExport = Nothing
bon courage,
yvan.
Si tu ne sais pas demande, si tu sais partage
Hors ligne
#6 Wed 26 July 2006 11:44
- jamasig
- Participant occasionnel
- Date d'inscription: 25 Jul 2006
- Messages: 14
Re: decoupage d'un raster
svp il y a un terme que je comprend pas , cad quoi la classe raster? et ensuite moi j'ai les images dispersées dans un repertoire, donc je n'ai aucune base de données ou je stock les rasters, je sais pas si je peux travailler ainsi, ou peut etre faut il creer une geodatabase, et si c est le cas, comment faire, et merci
Hors ligne
#7 Wed 26 July 2006 11:57
- janyv
- Participant assidu
- Lieu: Montreuil, France
- Date d'inscription: 8 Feb 2006
- Messages: 356
Re: decoupage d'un raster
Une classe raster stocke des données raster dans une geodatabase ArcSDE.
C'est, pardonnez-moi le raccourci, l'équivalent d'un fichier TIFF (ou autre type) mais hébergé par une geodatabase ArcSDE.
Si vos images sont rassemblées au sein d'un répertoire, il va falloir les mosaïquer (arctoolbox propose si mes souvenirs sont bons un tel outil) avant d'effectuer le découpage, à moins que ce dernier ne soit possible à partir d'un catalogue d'images d'une géodatabase ArcSDE (renseignez-vous auprès de l'équipe d'ESRI France).
bon courage,
yvan.
Si tu ne sais pas demande, si tu sais partage
Hors ligne
#8 Wed 26 July 2006 12:13
- jamasig
- Participant occasionnel
- Date d'inscription: 25 Jul 2006
- Messages: 14
Re: decoupage d'un raster
merci bcp je vais essayer cela et restant en contact comme meme pour les difficultés que je vais avoir certainements
Hors ligne
#9 Thu 27 July 2006 15:11
- juuuules
- Juste Inscrit !
- Date d'inscription: 10 May 2006
- Messages: 5
Re: decoupage d'un raster
Bonjour
Je relance cette discussion qui m'a énormément servie car je n'arrive pas à récupérer le fichier de géoréférencement .tfw
Le raster en sortie se trouve dans un répertoire et le clip défini se réalise sans problème.
J'essaye d'utiliser l'objet "IWorldFileExport" comme il est conseillé mais je ne vois pas de résultat.
Pourtant il n'y a pas de bug sur cette cet objet ni quand je lance sa fonction Write.
Si quelqu'un peut m'éclairer sur ce sujet, je l'en remercie d'avance.
Juuuules
Hors ligne
#10 Thu 27 July 2006 16:25
- janyv
- Participant assidu
- Lieu: Montreuil, France
- Date d'inscription: 8 Feb 2006
- Messages: 356
Re: decoupage d'un raster
Bonjour,
Je viens d'essayer la méthode write en créant un objet rasterdataset à partir du fichier tif qui vient d'être découpé et çà fonctionne : le fichier .tfw a été généré, il porte le même préfixe que le fichier tif et se trouve dans le même répertoire.
Si tu ne sais pas demande, si tu sais partage
Hors ligne
#11 Thu 27 July 2006 16:59
- juuuules
- Juste Inscrit !
- Date d'inscription: 10 May 2006
- Messages: 5
Re: decoupage d'un raster
C'est bon ça marche, j'oubliais juste de redéfinir le RasterDs.
Par contre j'ai un autre problème, l'apparence de l'image découpée, une fois chargée dans ArcMap, diffère quelque peu de l'original( au niveau de la teinte).
Par contre, si je l'ai compare sur un viewer d'image (en l'occurence XnView) il n'y a aucune différence.
ça doit pas être si grave.. enfin j'espère...
Sinon, vu que mes découpages seront souvent à effectuer sur plusieurs rasters concommitants, je pense ne pas pouvoir éviter l'étape du mosaïquage.
J'ai commencé à programmer la-dessus mais c'est pas fameux, j'obtiens un image toute noire.
Si vous avez quelques tuyaux à ce sujet....
Juuuules
Hors ligne
#12 Thu 27 July 2006 17:33
- janyv
- Participant assidu
- Lieu: Montreuil, France
- Date d'inscription: 8 Feb 2006
- Messages: 356
Re: decoupage d'un raster
Concernant la différence d'affichage, ArcMap doit appliquer un filtre (Dans l'onglet Symbologie->Type) sur les histogrammes, écart-types par défaut je crois.
Pour le mosaïquage, il existe des outils avec ArcToolBox->Raster : Mosaic to NewRaster et Mosaïque. La boite à outils complémentaires d'ESRI France en propose aussi : Rasters vers Mosaïque et Rasters vers Nouvelle Mosaïque.
Bon courage,
yvan.
Si tu ne sais pas demande, si tu sais partage
Hors ligne
#13 Thu 27 July 2006 19:40
- jamasig
- Participant occasionnel
- Date d'inscription: 25 Jul 2006
- Messages: 14
Re: decoupage d'un raster
svp j ai essayé un exemple donnée par le help de arcgis developper concernant clip raster, mais lorsque j'ai essayer de le compiler il me signe qu'il y unje variable indefinié j ai essayer avec un autre exemple il me signe le meme erreur disant qu il y une variable non definie
svp si qlq peut m'aider pour savoir compiler les exemples
Dernière modification par jamasig (Thu 27 July 2006 19:45)
Hors ligne
#14 Thu 27 July 2006 20:22
- janyv
- Participant assidu
- Lieu: Montreuil, France
- Date d'inscription: 8 Feb 2006
- Messages: 356
Re: decoupage d'un raster
Bonsoir,
Cela veut dire que tu utilises une variable sans l'avoir auparavant déclarée. Cela arrive souvent avec les pointeurs vers un objet ESRI.
Si l'exemple est en Visual Basic, il n'y a pas besoin de compiler, tu peux utiliser le code dans ArcMAP/VBA
yvan.
Si tu ne sais pas demande, si tu sais partage
Hors ligne
#15 Fri 28 July 2006 09:00
- juuuules
- Juste Inscrit !
- Date d'inscription: 10 May 2006
- Messages: 5
Re: decoupage d'un raster
J'ai fais les tests de mosaïquage vers un nouveau raster et je rencontre encore un problème. Vu que je suis contraint de renseigner une taille de pixel identique à celle de mes images d'origine (cad 0.5), j'obtiens comme résultat une image agrandie. Il n'y a plus aucun respect de l'échelle.
C'est en faisant des tests avec plusieurs tailles de pixel que je me suis rendu compte que cela venait de là.
En effet, dès que je mets une taille de pixel inférieur à 1, il y a automatiquement agrandissement de l'image.
J'ai tenté un redimensionnement mais l'image n'est plus bien géoréférencée.
De plus, ce que je veux c'est lancer mon mosaïquage dans une routine par programmation. Donc plutôt avec des objets du genre IMosaic.... Mais il se peut que l'on puisse appeler directement les outils d'arctoolbox sans faire apparaître la boite de dialogue.
Sinon, qu'est ce c'est que la boîte à outils complémentaires d'ESRI France? Je vais aller voir sur le support...
Juuuules
Hors ligne
#16 Fri 28 July 2006 10:55
- jamasig
- Participant occasionnel
- Date d'inscription: 25 Jul 2006
- Messages: 14
Re: decoupage d'un raster
voila l'exemple que je utilise est c est sur cette page que la variable "cboInput" est inconnue
aussi, j'ai bien testé le code de decoupage que vous m avez donné et c est bien marché, merci
le seul pb et comment faire la lecture de l'image enregistreé dans la BD Acces, et je me demande si il y une possibilité que le resultat soit une image tiff directement enregistrée dans repertoire
et merci
Dernière modification par jamasig (Mon 31 July 2006 12:07)
Hors ligne
#17 Sun 30 July 2006 23:29
- Miniopterine
- Participant assidu
- Date d'inscription: 29 Nov 2005
- Messages: 278
Re: decoupage d'un raster
La boite outil complementaire d'ESRI se telecharge gratuitement sur le site du support d'ESRI.
Description:
La boîte d'outils complémentaires ESRI France contient un ensemble d'outils de géotraitement accessibles à partir de la fenêtre ArcToolBox.
Régulièrement complétée par nos soins, elle a pour principal objectif d'illustrer les possibilités de personnalisation de l'environnement de géotraitement d'ArcGIS 9 (scripts, modèles, ...) tout en essayant de répondre à vos besoins les plus fréquents.
Dernière modification par Miniopterine (Wed 08 August 2007 22:33)
Hors ligne
#18 Mon 31 July 2006 11:05
- jamasig
- Participant occasionnel
- Date d'inscription: 25 Jul 2006
- Messages: 14
Re: decoupage d'un raster
merci pour la boite a outil, je vx savoir si elle existe une autre en langage VB
et merci
Hors ligne