- tinyworldmap est une carte du monde conçue pour les web apps offline-first et à faible bande passante, pensée pour être utilisée avec Leaflet
- Elle prend en charge tous les niveaux de zoom, et sa version la plus complète pèse 450 KB en gzip ; le rendu côté client a été profilé et testé pour éviter toute latence perceptible, même sur des téléphones anciens et peu puissants datant d’il y a 10 ans
- La carte de base affiche les 10 000 villes les plus peuplées ajoutées à OpenStreetMap, ce qui inclut, au moment de la rédaction, toutes les villes et localités de plus de 48 000 habitants
- Deux modes d’utilisation sont prévus : comme carte de base en remplacement des tuiles OpenStreetMap, ou comme carte de secours qui remplace hors ligne les requêtes de tuiles OSM par des tuiles générées localement
- Les données cartographiques sont publiées sous licence ODBL, comme OpenStreetMap, et nécessitent une attribution à OpenStreetMap et à tinyworldmap, par exemple dans le pied de page Leaflet
Objectif et périmètre de tinyworldmap
- tinyworldmap est une carte du monde destinée aux web apps offline-first et à faible bande passante
- Elle est conçue pour fonctionner avec Leaflet et prend en charge tous les niveaux de zoom
- Sa version la plus complète pèse 450 KB en gzip et 1.1 MB une fois décompressée
- Le rendu côté client a été largement profilé et testé sur des téléphones anciens et peu performants datant d’il y a 10 ans, sans latence perceptible
- Des démonstrations sont disponibles : Nightly demo, Stable demo, v3 announcement
Données cartographiques de base
- Par défaut, la carte affiche les 10 000 villes les plus peuplées ajoutées à OpenStreetMap
- Au moment de la rédaction, cela couvre toutes les villes et localités de plus de 48 000 habitants
Deux façons de l’utiliser avec Leaflet
Style de carte et cartes personnalisées
- Le constructeur accepte une option
render pour modifier l’apparence de la carte
- L’option
style de chaque couche s’applique à CanvasRenderingContext2D du Canvas
- Par exemple, on peut modifier le style en définissant
fillStyle pour la couche state_borders
let render = {
state_borders: {
style: {fillStyle: '#f00'}
}
}
new L.GridLayer.TinyWorld({maxZoom: 19, render}).addTo(map)
- Si votre organisation a besoin d’une carte personnalisée avec carte routière, carte urbaine, carte dans d’autres langues, ou d’un contenu incluant des données OSM ou non-OSM, vous pouvez demander un devis à
business@tinyworldmap.com
Options de fichiers de carte encore plus petits
-
Version sans frontières
tiny-world-cities-10000.js(on) contient, par rapport à la version complète, des données sans frontières d’États, frontières nationales ni littoraux
- Cette version réduit la taille de 300 KB en gzip et de 825 KB une fois décompressée
- Son avantage est que toutes les données incluses y sont précises
- Dans la version complète, les frontières nationales ne sont pas exactes aux niveaux de zoom élevés, ce qui peut donner un rendu étrange si l’on superpose des formes alignées sur des frontières nationales ou des littoraux
- Dans ce cas, la version sans frontières est souvent plus esthétique
-
Version sans libellés de villes
- Il existe deux fichiers sans libellés de villes
tiny-world-borders.js(on) : sans frontières d’États
tiny-world-nocities.js(on) : avec frontières d’États conservées
- Les libellés de villes occupent 410 KB décompressés et 172 KB compressés
-
Version avec moins de villes
- Des fichiers avec libellés de villes sont aussi proposés en versions 2 000 et 4 000 villes
- Il suffit de remplacer
10000 par 2000 ou 4000 dans le nom du fichier
- | Nombre de villes incluses | Seuil de population |
- | --- | --- |
- | 10,000 | plus de 48 000 habitants |
- | 4,000 | plus de 137 000 habitants |
- | 2,000 | plus de 287 000 habitants |
Licence et attribution
- Les données de tinyworldmap sont publiées sous licence ODBL, comme les données OpenStreetMap
- L’ODBL impose une attribution
- Si la configuration a été faite comme indiqué, le pied de page Leaflet doit inclure l’attribution à OpenStreetMap et à tinyworldmap
- Sinon, il faut ajouter séparément l’attribution à OpenStreetMap et à tinyworldmap
1 commentaires
Avis sur Hacker News
J’aime l’idée. C’est bien parce que ça résout le problème où, quand on dézoome trop, il faut attendre que le serveur rende la tuile du continent qu’on vient de demander.
En revanche, je vois bien la position relative de West Bloomfield Township et de Waterford Charter Township, dans la banlieue de Detroit, mais je ne vois pas trop quel cas d’usage a besoin de ça sans savoir dans quel État ils se trouvent, ni même que les Grands Lacs existent.
J’aimerais qu’il y ait beaucoup plus de données pour les côtes, et beaucoup moins pour les subdivisions des grandes aires urbaines.
Elles masquent trop d’autres informations possibles.
C’est sympa, mais le niveau de détail des côtes est beaucoup trop faible. Quelques villes britanniques flottent au-dessus de la mer, tandis que le Groenland et le nord du Canada accaparent tous les sommets.
Le niveau de détail lié à la projection de Mercator semble déjà avoir été pris en compte, mais il faudrait moins prioriser les zones où presque personne ne vit.
La base SQLite de QRank est déjà passée sur HN auparavant.
[1] https://qrank.wmcloud.org/
[2] https://github.com/hikeratlas/qrank
Une province des Pays-Bas apparaît comme une île, détachée du territoire continental du pays, alors qu’elle ne l’est pas en réalité. Pourtant, la carte connaît cinq noms de villes dans cette province, dont certains se chevauchent presque.
À l’inverse, l’ajout de l’Afsluitdijk me paraît personnellement être un détail inutile, mais je comprends qu’il soit difficile, par programme, de distinguer les terres à dessiner d’une simple infrastructure maritime.
Je devrais ouvrir un ticket dans l’issue tracker, mais comme je ne suis pas connecté sur mobile, un commentaire HN est ce que je peux faire de mieux pour l’instant. Si d’autres ressentent la même chose, ils peuvent s’appuyer sur ce commentaire pour proposer des améliorations comme ajuster le ratio, introduire une distance minimale entre les villes ou réduire la taille globale du fichier.
La Polynésie française n’existe même pas sur la carte.
La raison pour laquelle ce n’était pas fait au départ, c’est que sur de vieux téléphones, en particulier avec Firefox for Android, dessiner beaucoup de polygones pouvait provoquer des crashs. Depuis, la procédure de dessin a été optimisée, mais il faut rester prudent.
[1] https://tinyworldmap.com/beta.html
C’est le genre de chose qui devrait être détecté par un contrôle qualité de base.
J’ai créé quelque chose de similaire. Priorité à l’offline, très petit, basé sur du vectoriel, avec un accent mis sur l’internationalisation.
C’est disponible dans toutes les langues de l’ONU. En revanche, l’espagnol manque parce que je l’ai tout simplement oublié, ce qui est embarrassant, alors que je pourrais probablement le faire en quelques heures.
Les noms de pays et de villes utilisent les dénominations officielles enregistrées auprès de l’ONU. Donc le nom court officiel du Royaume-Uni est « United Kingdom of Great Britain and Northern Ireland ».
https://map.ache.one/en
Dessiner une carte légère et gérer l’internationalisation était relativement facile, parce qu’il existe plusieurs sources de données ouvertes et bibliothèques pour ça.
La partie vraiment difficile, ce sont les définitions administratives pures. Si vous avez des données associées à la plupart des pays, elles finiront forcément par diverger de la source cartographique, et il faut au final créer une carte sur mesure à la main.
Il n’existe pas de consensus sur ce qu’est un « pays ». Le Sahara occidental est officiellement un pays, mais en pratique le Maroc l’occupe depuis longtemps ; la Somalie comprend le Somaliland et le Puntland, qui fonctionnent de fait comme des États indépendants, sans reconnaissance officielle. Le Groenland, Niue, etc. se situent quelque part entre les deux.
D’après mon expérience au niveau des pays, c’était un processus manuel rempli de hacks sales, et le plus difficile était de tester si tout était correctement aligné. En particulier, trouver le bon niveau de généralisation et l’apparence que les gens attendent de la carte de leur région était compliqué.
Je me demande si l’effort nécessaire pour améliorer fortement cette carte en vaut la peine à vos yeux.
L’astérisque est sur Dar Es Salaam, mais l’étiquette indique Dodoma. Dodoma est bien la capitale réelle, mais elle se trouve plutôt vers le centre du pays.
C’est mignon. J’avais fait quelque chose de pas tout à fait identique, mais similaire, il y a longtemps.
https://web.archive.org/web/20020611095429/http://www.cs.man.ac.uk/~hancockd/CityZen/index.html
20 000 segments, 3 350 lieux, le tout — viewer et quiz compris — faisait 162 Ko.
Merci pour le retour. Pour expliquer le contexte du choix, jusqu’à récemment, l’objectif principal de ce projet n’était pas la forme des pays
Pendant longtemps, la version sans frontières présente dans le README était la seule version, et je ne pensais pas qu’il serait possible d’ajouter le monde entier. Mais ça l’était
J’ai publié une version nightly qui supprime les fjords et ajoute davantage de détails ailleurs, notamment les îles très demandées. Globalement, la résolution est aussi plus élevée
La raison pour laquelle je ne l’avais pas fait au départ, c’est que sur les anciens téléphones, en particulier avec Firefox for Android, dessiner beaucoup de polygones pouvait provoquer un crash. Depuis, j’ai optimisé la procédure de dessin, mais il faut rester prudent
[1] https://tinyworldmap.com/beta.html
Je ne suis pas sûr que les 10 000 villes les plus peuplées soient le meilleur filtre
Cette approche favorise les villes des grands pays, et les petits pays risquent de voir la plupart de leurs villes exclues
Il faudrait un filtre complémentaire qui inclue les X principales villes de chaque pays. Cela permettrait probablement de couvrir aussi les principales villes des petits pays
Des critères comme capitale nationale, capitale régionale, ville mondiale ou centralité régionale pourraient utilement compléter les conditions de base
Sur ce sujet, des géographes et cartographes pourraient sans doute donner des conseils plus pertinents
J’ai trouvé intéressant que choisir les 10 000 plus grandes agglomérations du monde fasse descendre jusqu’à 48 000 habitants
Je ne sais pas encore si ce chiffre est surprenant ou non
Même en passant à 200, on reste au-dessus de 100 000. Selon Wikipedia, Daly City, CA, classée #333, compte 100 007 habitants : <https://en.wikipedia.org/wiki/List_of_United_States_cities_b...>
Comme dans beaucoup d’autres situations de mise à l’échelle, ce type de distribution est généralement proche d’une droite sur un graphique log-log
En China, il faut descendre jusqu’au 106e rang avant de trouver une ville de moins d’un million d’habitants. Aux États-Unis, il n’y en a que 9 de ce type
Pour India, je viens de vérifier : il y a 46 villes de plus d’un million d’habitants ; Malegaon, 100e, compte 471 000 habitants, et Aurangabad, 300e, dépasse encore les 100 000
Cela dit, la notion de « ville » est très arbitraire. Certaines des plus grandes villes du monde correspondraient, selon les critères d’autres pays, à des aires métropolitaines, voire à des États ou des provinces
Les plus grandes villes par superficie ont au contraire une population très faible. Sermersooq, au Greenland, compte 24 148 habitants pour 575 300 km², soit environ 144 fois Rhode Island ; parmi les États américains, seuls Texas et Alaska sont plus grands. Alaska n’est lui aussi qu’environ 12 % plus grand
La géographie urbaine est un domaine complexe : on compare généralement plusieurs échelles et définitions, comme les aires statistiques métropolitaines, la surface bâtie et la population. Cela permet d’atténuer l’arbitraire des frontières politiques et de mieux refléter la population totale ainsi que l’impact économique
C’est assez étonnant que la taille du fichier soit de cet ordre alors que les frontières sont aussi grossières
La taille totale des données semble bien en dessous du point d’équilibre entre utilité et taille de fichier. Par exemple, avec une taille doublée, les frontières n’auraient sans doute pas été aussi irrégulières
D’après l’explication indiquant que « toutes les données de la version complète, à l’exception des frontières et des littoraux, sont présentes, ce qui réduit la taille de 200 Ko », environ 29 % correspondent aux données de frontières et de côtes, et 71 % aux noms et positions des villes
Personnellement, je pense qu’on pourrait supprimer beaucoup de villes. En particulier, les villes qui se superposent ne deviennent visibles que lorsqu’on zoome assez pour voir la masse terrestre grise et les noms de villes ; à la place, il vaudrait mieux rendre les côtes plus précises
Je ne sais pas non plus à quelle fréquence on a besoin de la position sur une carte du monde générale. Par exemple, sur le site web d’un point d’intérêt que l’on consulte, une carte légère montrant les autoroutes et lignes de transport public à proximité pour s’y rendre ne serait-elle pas plus souvent utile ?
Si l’on créait une version qui découpe toute la Terre en unités de quelques km², on pourrait probablement obtenir un niveau de détail assez utile avec une taille dix fois plus faible. Une carte low-poly de toute la planète peut aussi servir à des usages comme le suivi de la Station spatiale internationale, mais cela semble beaucoup plus rare
Même si la population est inférieure à 40 000 habitants, les capitales devraient impérativement être incluses, et signalées d’une manière ou d’une autre par un astérisque
Vraiment génial. C’est impressionnant de voir à quelle vitesse ça se charge sur téléphone
L’idée de compresser les données spatiales sous forme de Paths est excellente
Pour éviter la licence ODbL, utiliser les données Natural Earth plutôt qu’OSM pourrait aussi être une bonne option
Ce serait vraiment bien d’inclure aussi un outil permettant de convertir les données spatiales en Paths