OsmDroid: Problem downloading MapTile: /Z/X/Y HTTP response: Forbidden

Bonjour,

J’ai créé ce sujet car depuis quelques temps maintenant sur une application que nous avons développé il y a plusieurs année nous avons un problème avec les tuiles OSM sur Android.

Nous avons l’erreur suivante pour chaque tuiles :

OsmDroid: Problem downloading MapTile: /Z/X/Y HTTP response: Forbidden

Es ce que l’un d’entre vous a déjà eu ce problème et la résolu ?

quel est le serveur que vous interrogez ?

J’utilise la librairie osmdriod : org.osmdroid.tileprovider.tilesource.TileSourceFactory.MAPNIK
Qui va chercher a ces adresses :
public static final OnlineTileSourceBase MAPNIK = new XYTileSource(« Mapnik »,
0, 19, 256, « .png », new String[] {
« http://a.tile.openstreetmap.org/ »,
« http://b.tile.openstreetmap.org/ »,
« http://c.tile.openstreetmap.org/ » },« © OpenStreetMap contributors »);

Est-ce que l’application se conforme à https://operations.osmfoundation.org/policies/tiles/ ?

1 Like

Je crois que le 403 est la réponse à la question, comme quoi ce n’est pas toujours 42 ;-).

1 Like

Bonjour,

@yvecai @bibi je ne suis pas allé voir mais 403 sur les tuiles de la fondation, cela veut dire que cela dépasse les quotas ?

@2BDeveloppement si c’est le cas, peut-être voir soit sur switch2osm pour la mise en place de votre serveur ou voir des presta ?

si ce n’est pas cela, n’hésitez pas à préciser

à plus

pb de http vs https ?

Le téléchargement en masse sort des usages normaux des serveurs de tuiles de la fondation, et les applis qui se basent la dessus sont donc blacklistées (403 forbidden).

Je pense que c’est le cas ici.

cf Blocked applications - OpenStreetMap Wiki

Bonjour à tout le monde

Déjà merci pour toutes vos réponses
Alors l’application a toujours marché depuis 2015 et maintenant plus.
J’ai changé les liens des tuiles pour pointer sur le serveur Allemand ou le Français et ça marche mais les images ne sont pas vraiment les mêmes.

Allemand : https://a.tile.openstreetmap.de/${z}/${x}/${y}.png
Francais : http://a.tile.openstreetmap.fr/osmfr/${z}/${x}/${y}.png

Pourquoi nous bloquerait ont sur le serveur principal mais pas les autres ?

Parce que chaque serveur a sa politique en matière d’usage intensif ou pas, et sa liste de blocage.

Le téléchargement massif de tuiles sur un serveur public est à proscrire. C’est une solution de facilité pour le développeur de l’app, qui n’a pas à supporter les effets que cela produit.

Je suis en train de faire des stats d’usage de nos serveurs de tuiles… 20 millions de requêtes chaque jour en moyenne, il faut pouvoir suivre en terme de ressources et on y arrive de moins en moins, donc on limite les usages massifs.

A charge pour le développeur d’une appli d’assurer la fourniture de tuiles, ou de revoir le fonctionnement de son appli pour ne pas abuser de services publics.

Je préfère largement les apps du style maps.me ou maintenant forkée en OrganicMaps.

Merci pour votre réponse.

En plus l’application utilise un système de cache afin de ne pas retélécharger chaque tuile tout le temps.

Nous avons en plus un système de carte hors ligne dans un fichier ZIP sur notre serveur.
Ces tuiles en hors ligne concernent la zone de la commune concernée par l’application.

Est-ce que cela peut revenir au bout d’un moment ?
Ou devons-nous faire quelque chose pour remettre en marque les tuiles de ce serveur ?

Il y a combien d’utilisateurs de l’appli ?

Je pose la question car un cache dans l’appli, ça veut quand même dire que chaque instance de l’appli vient télécharger des tuiles.

Les cartes hors lignes dispo en ZIP sont générées comment ? A partir de votre propre serveur de tuiles ou toujours à partir de serveurs publics ?

Environ 1500

Sur iOS nous en avons plus que sur Android et aucun problème.

La carte Hors ligne a été générer au début du développement de l’app et est hébergée sur notre serveur et si l’utilisateur souhaite utiliser la carte en mode hors ligne le fichier ZIP est téléchargé et est utilisé sur la carte.

Le blocage limité à Android et pas iOS, vient sûrement du fait que la librairie osmdroid a été bloquée globalement, et qu’on n’a peut être pas le nom de l’appli l’utilisant dans les requêtes pour faire du blocage plus fin.

Si une appli utilisant osmdroid abuse, toutes les autres se trouve bloquées au passage.
Je ne connaissais même pas la libraire osmdroid, donc j’aurai très bien pu tout bloquer pensant ne bloquer qu’une seul app.

Sur iOS c’est fait sans librairie c’est directement le lien de chargement des tuiles dans un MapTiles personnalisé.

Sur Android j’ai essayé de charger autrement avec le lien des tuiles et c’est toujours la même erreur.

Il est bien possible qu’Osmdroid sur Android envoie un user-agent générique. À vérifier. Il était possible de le modifier pour le faire correspondre à son Application quand je l’utilisais il y a quelques années.
Aussi, votre proche cache de tuile avec un petit nginx sur un petit serveur virtuel peux facilement réduire beaucoup le nombre de requêtes envoyé à un serveur.

1 Like

Précisons que Nginx est dispo sur Termux, donc a minima on peut mettre le serveur sur son téléphone, ça évitera que différentes applis de votre téléphone ne demandent la même chose.
Il semble aussi possible d’utiliser OSMAND pour faire du WMTS, ce qui pourrait réduire les appels réseau à 0.

Je pensais surtout suggérer au développeur d’appli de monter un serveur qui sert de cache a destination de ses utilisateurs.

J’avais bien compris, je dis juste qu’on peut se débrouiller sans lui. Il peut aussi monter sont propre serveur. Et là il comprendra vite l’intérêt de nginx. Par contre j’avais effectivement zappé le fait que c’était le développeur qui demandait ! Et du coup il ne va pas vouloir imposer l’installation d’un termux.