Pb récupération images - script Zebra - message d'erreur

Bonjour

Nous travaillons actuellement sur les derniers versions de script du projet Zebra Cerema-Inserm.
Malgré l’existence de photos sur la Fare les oliviers sur l’instance ign, nous rencontrons toujours des difficultés lorsqu’on fait une bbox afin de récupérer nos photos. Voici le message reçu hier :
<!doctype html>\n\n500 Internal Server Error\n

Internal Server Error

\n

The server encountered an internal error and was unable to complete your request.
Either the server is overloaded or there is an error in the application.

Merci pour votre aide.

X. Durang Cerema Méditerranée

A t on la bonne url (avec la bonne API) pour recuperer les données ?

nous avons fait l’essai ce matin sur l’instance OSM : même message d’erreur ! :disappointed_relieved:

Si ça coince sur les deux instance, c’est qu’il y a un bug soit dans la code de l’API soit que la requête n’est pas correcte…

Quelle est la requête ?

‘’’
Created on 16 janv. 2024

@author: bernard.rongione
‘’’
from math import sqrt, degrees, atan2, cos, pi, radians, sin
import requests

def get_lng_size(zoom, width, correction_width=0) → float:
“”"
get_lng_size
method:
- for an image, give the size of the image in terms of longitude
“”"
sz = 256 * 2 ** zoom
res_lng = 360./sz
d_lng = res_lng * (width - correction_width)
return d_lng

def get_lat_size(lat: float, zoom, height, correction_height=0) → float:
“”"
get_lat_size
parameter:
- lat - latitude of the center of an image
method:
- for an image, give the size of the image in terms of latitude
“”"
sz = 256 * 2 ** zoom
# resolution in degrees per pixel
res_lat = cos(lat * pi / 180.) * 360. / sz
d_lat = res_lat * (height - correction_height)
return d_lat

def get_bbox(lat, lng, zoom, width, height, correction_width=0, correction_height=0):
lat_size = get_lat_size(lat, zoom, height, correction_height)
lng_size = get_lng_size(zoom, width, correction_width)
bbox = {‘northeast’: {“lat”: round(lat - lat_size / 2, 6), “lng”: round(lng - lng_size / 2, 6)},
‘southwest’: {“lat”: round(lat + lat_size / 2, 6), “lng”: round(lng + lng_size / 2, 6)}}
return bbox

def get_img_streetview(lat: float, lng: float) → requests.Response:

    URL = 'https://panoramax.ign.fr/api/search?'
    bbox = get_bbox(lat, lng, 20, 640, 640, 0, 0)
    print(bbox)
    bbox_str = f"{bbox['northeast']['lng']},{bbox['northeast']['lat']},{bbox['southwest']['lng']},{bbox['southwest']['lat']}"
    print(bbox_str)
    
    rr = None
    print(f"{URL}bbox={bbox_str}")
    # while notend:

        
    r = requests.get(f"{URL}bbox={bbox_str}")
    print(r.content)
    if r.status_code == 200:
        print("status 200")
        dico = r.json()
        features = dico["features"]
        print("taille features: ",len(features))
        for feature in features:
            coord = feature["geometry"]["coordinates"]
            print(coord)
            if bbox['northeast']['lng'] < coord[0] < bbox['southwest']['lng'] and bbox['northeast']['lat'] < coord[1] < bbox['southwest']['lat']:
                url_img = feature['assets']['hd']['href']
                rr = requests.get(url_img)
                break

        
    return rr

if name == “main”:

lats = [43.5507142,43.550390,43.943255]
longs = [5.1884599,5.191055,4.812391]
for x in zip(lats,longs):
    print("#"*20)
    print(x[0],x[1])
    response = get_img_streetview(lat=x[0], lng=x[1])

on fait des tests sur la Fare les Oliviers : Instance Panoramax IGN

Le format de la bbox ne me semble pas bon du tout car ce n’est pas un json qui est attendu, mais 4 coordonnées.

Il devrait être du genre:

https://panoramax.ign.fr/api/search?bbox=monLon,minLat,maxLon,maxLat

Je ne suis pas non bien sûr ce votre calcul de bbox qui me semble inutilement complexe.

Il y a cependant un problème côté API qui même avec une toute petite bbox (0.0001° de côté) semble partir dans une requête SQL inadaptée et aboutit à un timeout…

→ 1 bug de part et d’autre :frowning:

cc @PanierAvide @antoine-de

Merci pour ta réponse. On procède aux corrections et on attend votre retour par l’API. On se tient au courant.

Bonjour, il y avait effectivement une requete mal optimisée lors de la recherche par bbox, un fix est en cours, on vous dit quand c’est déployé sur les instances IGN et OSM-fr
(Improve search performance by using lateral join (!225) · Merge requests · GeoVisio / API · GitLab pour les curieux)

1 Like

J’ai fait un patch temporaire hier sur l’instance OSM qui résoud le problème côté API.

1 Like

Bonjour,
le fixe a été déployé sur l’instance IGN vendredi, tout devrait etre bon maintenant, n’hésitez pas à nous remonter d’autres problèmes.

Merci !

Et la correction est maintenant aussi déployée sur l’instance OSM-FR.