Bonjour,
J'utilise depuis quelques temps l'excellent tuto http://qwazerty.developpez.com/tutor...-et-vba-excel/ fait par http://www.developpez.net/forums/u723/qwazerty/.
Néanmoins, je me heurte à un problème bien spécifique.
Je cherche à automatiser l'enregistrement d'images PNG.
Ces images PNG décrivent le couvert forestier d'un département et je cherche, dans un cadre privé, à avoir la possibilité de reconstituer avec précision la couverture globale d'un département.
Ainsi donc à l'adresse http://inventaire-forestier.ign.fr/c...ficherCarto/58 un visuel est disponible.
En utilisant l'inspection d'éléments sous Chrome ou autres, j'ai pu remarquer rapidement que la requête
permettait d'atteindre une image spécifique.
Code : Sélectionner tout - Visualiser dans une fenêtre à part http://inventaire-forestier.ign.fr/cartov2/proxy/getTile?LAYERS=v58tf&TRANSPARENT=true&VISIBILITY=true&FORMAT=image%2FPNG&SERVICE=WMS&VERSION=1.1.1&REQUEST=GetMap&STYLES=&EXCEPTIONS=application%2Fvnd.ogc.se_inimage&SRS=EPSG%3A27572&BBOX=666938.372965495,2193033.3729654946,711035.57137523,2237130.57137523&WIDTH=1000&HEIGHT=1000
En jouant avec les bornes X/Y de la zone, en coordonnées Lambert 2 étendu, ainsi qu'avec les valeurs de BBOX, il était possible de cibler une zone bien défini et d'obtenir une image précise du couvert forestier sur celle-ci.
La requête n'est utilisable que si la fenêtre de visualisation à l'adresse http://inventaire-forestier.ign.fr/c...ficherCarto/58 est ouverte.
Je pressens l'utilisation de cookies.
Initialement, je pensais m'en sortir rapidement en utilisant la méthode décrite au point IV-J. Télécharger un fichier du tuto.
L'analyse de la page web affichée suite à la requête
donne:
Code : Sélectionner tout - Visualiser dans une fenêtre à part http://inventaire-forestier.ign.fr/cartov2/proxy/getTile?LAYERS=v58tf&TRANSPARENT=true&VISIBILITY=true&FORMAT=image%2FPNG&SERVICE=WMS&VERSION=1.1.1&REQUEST=GetMap&STYLES=&EXCEPTIONS=application%2Fvnd.ogc.se_inimage&SRS=EPSG%3A27572&BBOX=666938.372965495,2193033.3729654946,711035.57137523,2237130.57137523&WIDTH=1000&HEIGHT=1000
Code html : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 <html> <head> <meta name="viewport" content="width=device-width, minimum-scale=0.1"><title>getTile (1000×1000)</title> </head> <body style="margin: 0px;"> <img style="-webkit-user-select: none; cursor: zoom-in;" src="http://inventaire-forestier.ign.fr/cartov2/proxy/getTile?LAYERS=v58tf&TRANSPARENT=true&VISIBILITY=true&FORMAT=image%2FPNG&SERVICE=WMS&VERSION=1.1.1&REQUEST=GetMap&STYLES=&EXCEPTIONS=application%2Fvnd.ogc.se_inimage&SRS=EPSG%3A27572&BBOX=666938.372965495,2193033.3729654946,711035.57137523,2237130.57137523&WIDTH=1000&HEIGHT=1000" width="939" height="939"> </body> </html>
Or, aucune image n'est décrite dans le src. L'adaptation de la macro décrite dans le tuto permet bien de charger l'adresse et afficher l'image dans une fenêtre IE mais ImgElem reste désespérément vide et WinHttpReq.Status renvoie un code 404 "Not found".
Ci joint la bidouille de code qui demande de charger, avant d’exécuter la macro, dans une fenêtre IE le visualisateur à l'adresse http://inventaire-forestier.ign.fr/c...ficherCarto/58:
Qu'en pensez-vous ? Auriez-vous une idée ou une piste permettant de résoudre ce problème ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61 Sub ImageSite() Dim IE As New InternetExplorer Dim IEDoc As HTMLDocument Dim TableObj As HTMLGenericElement Dim htmlTagCol As IHTMLElementCollection Dim ImgElem As HTMLImg Const CheminRep As String = "E:\#GIS\Shapefiles\Inventaire forestier IGN\Extraction IFN V2\Essai automatisation excel\essai\" 'Ouvre la page Web IE.navigate "http://inventaire-forestier.ign.fr/cartov2/proxy/getTile?LAYERS=v58tf&TRANSPARENT=true&VISIBILITY=true&FORMAT=image%2FPNG&SERVICE=WMS&VERSION=1.1.1&REQUEST=GetMap&STYLES=&EXCEPTIONS=application%2Fvnd.ogc.se_inimage&SRS=EPSG%3A27572&BBOX=640480,2281227,642480,2283227&WIDTH=1000&HEIGHT=1000" IE.Visible = True WaitIE IE Set IEDoc = IE.document 'On recherche l'élément contenant le logo Set htmlTagCol = IEDoc.getElementsByTagName("img") For Each TableObj In htmlTagCol Set ImgElem = TableObj Next 'On crée le répertoire où sera placée l'image 'Si celui-ci existe déjà on ne gère pas l'erreur retournée et on passe à la suite On Error Resume Next MkDir CheminRep On Error GoTo 0 'On réactive la gestion d'erreur 'On passe le chemin de l'image et le répertoire où elle sera copiée SaveHtmlFile ImgElem.href, CheminRep & "essai.png" End Sub Sub SaveHtmlFile(aUrl As String, aDestination As String) 'Pris sur le forum de la msdn (avec quelques menues modifs) 'http://social.msdn.microsoft.com/Forums/en/isvvba/thread/bd0ee306-7bb5-4ce4-8341-edd9475f84ad Dim WinHttpReq As Object, oStream As Object Dim TheURL As String On Error Resume Next 'On ne gère pas les erreurs Set WinHttpReq = New WinHttp.WinHttpRequest 'CreateObject("Microsoft.XMLHTTP") WinHttpReq.Open "GET", aUrl, False WinHttpReq.send TheURL = WinHttpReq.responseBody If WinHttpReq.Status = 200 Then Set oStream = CreateObject("ADODB.Stream") oStream.Open oStream.Type = 1 oStream.Write WinHttpReq.responseBody oStream.SaveToFile aDestination oStream.Close End If End Sub Sub WaitIE(IE As InternetExplorer) 'On boucle tant que la page n'est pas totalement chargée Do Until IE.readyState = READYSTATE_COMPLETE DoEvents Loop End Sub
Merci,
Michel
Partager