Splitting out the list of providers in a standalone JSON file

This issue has been tracked since 2022-06-10.

Currently, the available providers are listed in a JavaScript object that is defined inline in the source code of leaflet-providers.

It would be really useful to make that information available directly in a JSON file that could be used from other projects. For example, xyzservices extracts that information from leaflet-provider.js to make the same information available to Python. Xyzservices has some adoption in the scientific Python ecosystem (Geopandas, ipyleaflet, contextily, leafmap, bokeh, and others) - meaning that this project has in fact a lot of indirect adoption...

This separate JSON file could even be published independently of the leaflet-providers JS source, which would probably make it valuable for other users.

brunob wrote this answer on 2022-06-13

Hi @SylvainCorlay nice idea, we just have to find a way to generate automagically this JSON file from the repo. Do you have any hint for that ? @jieter any thoughts on this ?

martinfleis wrote this answer on 2022-06-13

Hi @brunob, we already have that magic in xyzservices. We scrape your JS to get that JSON but the result is slightly adapted to work within our use case. But the Python code for that is here https://github.com/geopandas/xyzservices/blob/main/provider_sources/_parse_leaflet_providers.py and a resulting JSON here https://github.com/geopandas/xyzservices/blob/main/provider_sources/leaflet-providers-parsed.json.

brunob wrote this answer on 2022-06-13

@martinfleis do you think we can use your script on our repo with a github ci or anything like that ?

martinfleis wrote this answer on 2022-06-13
brunob wrote this answer on 2022-06-13

Nice, let's hope that @jieter could look into it or propose an alternative method :)

SylvainCorlay wrote this answer on 2022-06-14

We could generate this JSON as a one-off, include the JSON in your repository, and then read the JSON from your JavaScript instead of having the object hard coded in the code base.

This would make it a single source of truth.

jieter wrote this answer on 2022-06-14

Yes, it would be nice to maintain the list in a machine readable format, and generate leaflet-providers.js from it + a template. I am not sure about JSON though. In the current definitions, we use some comments: (1 2 3 4), which I think is a valuable capability not possible in classic json.

Other options would be JSONC, but that would require consumers of the file to use non-standard parsers too.

Any suggestions?

martinfleis wrote this answer on 2022-06-14

What about using YAML instead if we need comments? That feels as a bit more standard solution than JSONC.

SylvainCorlay wrote this answer on 2022-06-15

The big advantage of JSON is that you can parse it from either Python or JS without a third-party dependency.

brunob wrote this answer on 2022-06-16

+1 for JSON too

More Details About Repo
Owner Name leaflet-extras
Repo Name leaflet-providers
Full Name leaflet-extras/leaflet-providers
Language JavaScript
Created Date 2012-04-06
Updated Date 2022-12-08
Star Count 1778
Watcher Count 66
Fork Count 603
Issue Count 9


Issue Title Created Date Updated Date