IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

IGN API Géoportail Discussion :

Fond de carte Geoportail avec python / matplotlib : erreur "bbox invalide"


Sujet :

IGN API Géoportail

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2020
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Décembre 2020
    Messages : 7
    Points : 1
    Points
    1
    Par défaut Fond de carte Geoportail avec python / matplotlib : erreur "bbox invalide"
    Bonjour,

    J'ai installé python sous Windows (avec python-3.9.0-amd64.exe) puis les modules suivants avec pip : matplotlib, pyproj, OWSLib.
    Enuite, j'ai installé basemap avec un fichier wheel trouvé sur le site
    https://www.lfd.uci.edu/~gohlke/pythonlibs/#basemap (Unofficial Windows Binaries for Python Extension Packages)
    pip install basemap-1.2.2-cp39-cp39-win_amd64.whl

    Je veux réaliser un fond de carte issu du Géoportail identique à celui obtenu avec la requête suivante qui marche (EPSG:4326 étant WGS84 2D) :
    https://wxs.ign.fr/choisirgeoportail...56&HEIGHT=256&

    Avec le code python suivant, en choisissant EPSG:2154 (RGF93 / Lambert-93) l'image produite est correcte, avec un fond blanc hors des limites du RGF93 ; mais avec EPSG:4326, comme dans la requête web ci-dessus, j'obtiens le message "bbox invalide" (détail ci-dessous).
    Le code minimal est le suivant (pyplot n'est utile que pour faire l'image, il n'est pas en cause).

    Code Python : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    from mpl_toolkits.basemap import Basemap
    import matplotlib.pyplot as plt
    plt.figure(figsize=(15,22))
    map = Basemap(projection='merc', lat_0=25, lon_0=25, resolution='i', area_thresh=0.1,
                  llcrnrlon=0, llcrnrlat=0, urcrnrlon=50, urcrnrlat=50, 
                  # epsg=4326)
                  epsg=2154)
    map.wmsimage("https://wxs.ign.fr/choisirgeoportail/geoportail/r/wms?SERVICE=WMS&VERSION=1.3.0&CRS=EPSG:4326", layers=["GEOGRAPHICALGRIDSYSTEMS.PLANIGNV2"], verbose=True, format='jpeg')
    plt.show()

    Ma question : comment comprendre le message "bbox invalide" ?
    Eventuellement, y'a-t-il une autre layer permettant d'avoir un fond de carte à toute échelle en tout point du globe, avec la clé choisirgeoportail, accessible par wmsimage (qui supporte WMS 1.1.1 et 1.3.0) ?
    Je vous remercie.

    Retour complet :
    https://wxs.ign.fr/choisirgeoportail/ge … =EPSG:4326
    id: WMS, version: 1.1.1
    title: Service WMS Raster Geoportail Publics, abstract: Ce service permet la visualisation de couches de données raster IGN au travers d'un flux WMS
    available layers:
    ['GEOGRAPHICALGRIDSYSTEMS.PLANIGNV2']
    projection options:
    ['EPSG:2978', 'EPSG:3305', 'IGNF:RGPFUTM6S', 'EPSG:4642', 'EPSG:4622', 'EPSG:4641', 'EPSG:3171', 'IGNF:LAMB1C', 'IGNF:LAMBE', 'EPSG:2977', 'IGNF:RGM04UTM38S', 'EPSG:2990', 'EPSG:4633', 'IGNF:RGF93CC42', 'IGNF:TAHI51UTM06S', 'EPSG:27571', 'EPSG:32701', 'EPSG:27583', 'EPSG:23032', 'EPSG:2989', 'EPSG:3172', 'IGNF:WGS84UTM20', 'EPSG:32707', 'EPSG:3296', 'EPSG:3043', 'EPSG:3306', 'IGNF:RGF93CC46', 'IGNF:REUN47GEO', 'EPSG:32739', 'EPSG:27564', 'IGNF:LAMB1', 'IGNF:RGF93CC48', 'EPSG:3042', 'EPSG:3942', 'EPSG:3044', 'EPSG:32620', 'EPSG:4171', 'CRS:84', 'EPSG:27592', 'EPSG:3857', 'EPSG:4621', 'EPSG:2970', 'IGNF:UTM32W84', 'EPSG:4624', 'EPSG:2973', 'IGNF:TAHI79UTM6S', 'EPSG:4687', 'IGNF:RGF93G', 'IGNF:LAMB93', 'EPSG:3034', 'EPSG:4630', 'EPSG:4623', 'EPSG:27594', 'EPSG:4627', 'EPSG:4749', 'EPSG:4639', 'EPSG:27572', 'EPSG:3035', 'EPSG:3949', 'IGNF:UTM20W84GUAD', 'EPSG:27563', 'EPSG:4692', 'EPSG:4629', 'IGNF:GUAD48UTM20', 'EPSG:32632', 'EPSG:3950', 'EPSG:4559', 'EPSG:4690', 'EPSG:4636', 'IGNF:RGSPM06U21', 'EPSG:3947', 'EPSG:23030', 'EPSG:4638', 'EPSG:4643', 'IGNF:REUN47GAUSSL', 'IGNF:RGFG95GEO', 'IGNF:GUADFM49U20', 'IGNF:UTM20W84', 'IGNF:CSG67UTM22', 'EPSG:4275', 'IGNF:LAMB4C', 'EPSG:4258', 'EPSG:2975', 'IGNF:WGS84G', 'IGNF:UTM39SW84', 'EPSG:4470', 'EPSG:27591', 'EPSG:32621', 'EPSG:4626', 'EPSG:2972', 'EPSG:3944', 'EPSG:3298', 'EPSG:3170', 'EPSG:2981', 'IGNF:UTM22RGFG95', 'IGNF:CSG67GEO', 'EPSG:4326', 'IGNF:STPM50GEO', 'EPSG:4558', 'EPSG:21781', 'EPSG:4632', 'IGNF:LAMB2C', 'IGNF:RGF93CC43', 'EPSG:2971', 'IGNF:LAMB2', 'EPSG:4691', 'IGNF:UTM30W84', 'EPSG:32740', 'EPSG:27581', 'IGNF:RGF93CC45', 'EPSG:2987', 'EPSG:3304', 'IGNF:LAMB3C', 'EPSG:2988', 'EPSG:2976', 'EPSG:4628', 'EPSG:2980', 'IGNF:MAYO50UTM38S', 'EPSG:3302', 'EPSG:27593', 'IGNF:MAYO50GEO', 'EPSG:27584', 'IGNF:GUAD48GEO', 'EPSG:3943', 'IGNF:RGR92UTM40S', 'IGNF:LAMB3', 'EPSG:32705', 'IGNF:RGF93CC44', 'EPSG:2969', 'EPSG:4471', 'EPSG:4637', 'EPSG:4689', 'EPSG:4807', 'IGNF:UTM20W84MART', 'IGNF:MART38GEO', 'IGNF:STPM50UTM21', 'EPSG:3303', 'EPSG:27573', 'EPSG:23031', 'EPSG:32738', 'EPSG:4467', 'EPSG:3945', 'IGNF:UTM31W84', 'EPSG:4644', 'IGNF:MART38UTM20', 'IGNF:RGPFUTM7S', 'EPSG:32631', 'IGNF:RGPFUTM5S', 'IGNF:RGF93CC49', 'EPSG:27582', 'EPSG:2154', 'IGNF:UTM01SW84', 'EPSG:3727', 'EPSG:3948', 'IGNF:LAMB4', 'IGNF:GUADFM49GEO', 'IGNF:RGF93CC47', 'EPSG:4688', 'EPSG:3946', 'EPSG:27561', 'EPSG:32622', 'EPSG:32706', 'IGNF:RGF93CC50', 'EPSG:4625', 'EPSG:4463', 'EPSG:27562', 'IGNF:IGN63UTM7S', 'EPSG:32630', 'EPSG:27574', 'EPSG:3297', 'IGNF:WALL78UTM1S']
    Traceback (most recent call last):
    File "xxx.py", line 21, in
    map.wmsimage("https://wxs.ign.fr/choisirgeoportail/geoportail/r/wms?SERVICE=WMS&VERSION=1.3.0&CRS=EPSG:4326", layers=["GEOGRAPHICALGRIDSYSTEMS.PLANIGNV2"], verbose=True, format='jpeg')
    File "PythonPython39libsite-packagesmpl_toolkitsbasemap__init__.py", line 4350, in wmsimage
    img = wms.getmap(service='wms',bbox=(xmin,ymin,xmax,ymax),
    File "PythonPython39libsite-packagesowslibmapwms111.py", line 262, in getmap
    u = openURL(base_url, data, method, timeout=timeout or self.timeout, auth=self.auth)
    File "PythonPython39libsite-packagesowslibutil.py", line 206, in openURL
    raise ServiceException(req.text)
    owslib.util.ServiceException:

    bbox invalide

  2. #2
    Membre éclairé Avatar de elias couppe
    Homme Profil pro
    Développeur Web
    Inscrit en
    Décembre 2014
    Messages
    407
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Décembre 2014
    Messages : 407
    Points : 786
    Points
    786
    Par défaut
    Bonjour,

    malheureusement la requête semble tronquée dans la stack d'erreur que vous avez envoyée. Pourriez-vous nous envoyer la requête WMS complète qui pose problème, telle qu'elle est envoyée par votre application ?

    Merci d'avance

  3. #3
    Nouveau Candidat au Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2020
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Décembre 2020
    Messages : 7
    Points : 1
    Points
    1
    Par défaut Merci pour la réponse.
    Merci pour la réponse.
    La requête est celle qui est en argument de wmsimage dans le snippet

    Citation Envoyé par elias couppe Voir le message
    Bonjour,

    malheureusement la requête semble tronquée dans la stack d'erreur que vous avez envoyée. Pourriez-vous nous envoyer la requête WMS complète qui pose problème, telle qu'elle est envoyée par votre application ?

    Merci d'avance

  4. #4
    Membre éclairé Avatar de elias couppe
    Homme Profil pro
    Développeur Web
    Inscrit en
    Décembre 2014
    Messages
    407
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Décembre 2014
    Messages : 407
    Points : 786
    Points
    786
    Par défaut
    Bonjour,

    je ne sais pas comment la fonction wmsimage fonctionne, et comment elle formate les arguments donnés pour créer la requête wms finalement envoyée au serveur.

    J'aimerais voir la requête finale telle qu'envoyée au serveur (en sortie de la fonction wmsimage) pour pouvoir vérifier son bon formatage.

  5. #5
    Nouveau Candidat au Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2020
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Décembre 2020
    Messages : 7
    Points : 1
    Points
    1
    Par défaut
    De fait, la requête (tronquée à la première ligne de l'output cité ci-dessus) est identique à l'argument de wmsimage.

    Citation Envoyé par elias couppe Voir le message
    Bonjour,

    je ne sais pas comment la fonction wmsimage fonctionne, et comment elle formate les arguments donnés pour créer la requête wms finalement envoyée au serveur.

    J'aimerais voir la requête finale telle qu'envoyée au serveur (en sortie de la fonction wmsimage) pour pouvoir vérifier son bon formatage.

  6. #6
    Membre éclairé Avatar de elias couppe
    Homme Profil pro
    Développeur Web
    Inscrit en
    Décembre 2014
    Messages
    407
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Décembre 2014
    Messages : 407
    Points : 786
    Points
    786
    Par défaut
    Donc si je comprends bien, la requête qui part est :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     https://wxs.ign.fr/choisirgeoportail/geoportail/r/wms?SERVICE=WMS&VERSION=1.3.0&CRS=EPSG:4326
    Il ne s'agit là que de l'url du serveur WMS. Il manque donc plusieurs paramètres, dont la ressource, la requête, la bbox demandée...


    Voilà par exemple une requête qui fonctionne en WMS avec la couche PlanIGNV2, en EPSG:4326 :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     https://wxs.ign.fr/choisirgeoportail/geoportail/r/wms?SERVICE=WMS&FORMAT=image/png&VERSION=1.3.0&CRS=EPSG:4326&layers=GEOGRAPHICALGRIDSYSTEMS.PLANIGNV2&STYLES=&WIDTH=2412&HEIGHT=1200&BBOX=47,0,48,2&REQUEST=GetMap

  7. #7
    Nouveau Candidat au Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2020
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Décembre 2020
    Messages : 7
    Points : 1
    Points
    1
    Par défaut
    Ma question concerne à la fois Python et le Geoportail ; les éléments de la requête sont créés par les fonctions des bibliothèques Python.
    Par ailleurs, en quoi la requête WMS "qui fonctionne" que tu cites est-elle fondamentalement différente de la requête "qui marche" que j'ai citée ?

  8. #8
    Membre actif Avatar de azarzelli
    Homme Profil pro
    Analyse système
    Inscrit en
    Septembre 2020
    Messages
    136
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Analyse système

    Informations forums :
    Inscription : Septembre 2020
    Messages : 136
    Points : 267
    Points
    267
    Par défaut
    Bonjour,

    Alors, moi quand je fais tourner le code fourni dans le premier post, ça "fonctionne" :
    Nom : Capture d’écran de 2021-02-05 10-31-21.png
Affichages : 798
Taille : 28,1 Ko


    En tout cas je n'ai pas du tout l'erreur de "bbox invalide". Ma version de Python est la 3.8.5 et celle de Basemap est la 1.2.2.

    En cherchant un peu, j'ai appris que le module Basemap était déprécié (https://matplotlib.org/basemap/users...ecation-notice) et que le remplaçant maintenu à jour est Cartopy (https://scitools.org.uk/cartopy/docs/latest/). Je vous conseille de faire la transition afin de pouvoir profiter de la communauté de développeurs de cet outil.

    Cordialement,

  9. #9
    Nouveau Candidat au Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2020
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Décembre 2020
    Messages : 7
    Points : 1
    Points
    1
    Par défaut
    Ça fonctionne avec epsg=4326 ?

  10. #10
    Membre actif Avatar de azarzelli
    Homme Profil pro
    Analyse système
    Inscrit en
    Septembre 2020
    Messages
    136
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Analyse système

    Informations forums :
    Inscription : Septembre 2020
    Messages : 136
    Points : 267
    Points
    267
    Par défaut
    En effet, ça ne fonctionne pas, mais cela est dû au fait que l'EPSG dans la classe Basemap n'est pas celui des requêtes WMS, mais celui de la projection de la carte en sortie. Par exemple, pour avoir une carte en Mercator, j'ai mis epsg=3395. Le code suivant fonctionne :

    Code python : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    from mpl_toolkits.basemap import Basemap
    import matplotlib.pyplot as plt
    plt.figure(figsize=(15,22))
    map = Basemap(projection='merc', resolution='i', area_thresh=0.1, llcrnrlon=0, llcrnrlat=0, urcrnrlon=50, urcrnrlat=50, epsg=3395)
    map.wmsimage("https://wxs.ign.fr/choisirgeoportail/geoportail/r/wms?SERVICE=WMS&VERSION=1.3.0&CRS=EPSG:4326", layers=["GEOGRAPHICALGRIDSYSTEMS.PLANIGNV2"], verbose=True, format='jpeg')
    plt.show()

  11. #11
    Nouveau Candidat au Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2020
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Décembre 2020
    Messages : 7
    Points : 1
    Points
    1
    Par défaut
    Merci pour la réponse. Pour l'instant je ne peux pas la vérifier car j'ai un problème de connexion, sans doute dû au fait que je travaille dorénavant par VPN. Il faut sans doute que je trouve le moyen d'initialiser le proxy et le port dans le code python.

  12. #12
    Nouveau Candidat au Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2020
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Décembre 2020
    Messages : 7
    Points : 1
    Points
    1
    Par défaut vpn
    Bonjour,
    La solution fonctionne effectivement mais j'ai un autre problème : comment faire fonctionner le même code source à travers un VPN ? Je n'ai pas de problème en étant connecté directement sur le réseau d'entreprise ou sur un PC quelconque, mais avec le PC d'entreprise par VPN j'ai le message suivant :
    requests.exceptions.ConnectionError: HTTPSConnectionPool(host='wxs.ign.fr', port=443): Max retries exceeded with url: /choisirgeoportail/geoportail/r/wms?service=WMS&request=GetCapabilities&version=1.1.1 (Caused by NewConnectionError('<urllib3.connection.HTTPSConnection object at 0x00000188D28B9BB0>: Failed to establish a new connection: [WinError 10061] Aucune connexion n’a pu être établie car l’ordinateur cible l’a expressément refusée'))
    Merci.

Discussions similaires

  1. [Python 2.X] python matplotlib erreur
    Par hichem0550 dans le forum Calcul scientifique
    Réponses: 1
    Dernier message: 29/05/2016, 16h33
  2. Réponses: 4
    Dernier message: 14/12/2010, 20h21
  3. Erreur _strptime_time avec python 2.6
    Par Sinclair dans le forum Django
    Réponses: 0
    Dernier message: 09/09/2010, 14h15
  4. problème avec Python, matplotlib et pygtk
    Par marwanos dans le forum Déploiement/Installation
    Réponses: 11
    Dernier message: 27/04/2010, 00h29
  5. [Carte Son] Générer un son défini avec python (fréquence, forme du signale etc..)
    Par moumine dans le forum Programmation multimédia/Jeux
    Réponses: 14
    Dernier message: 18/02/2009, 14h42

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo