{"id":49684623,"url":"https://github.com/anisse/border-explorer","last_synced_at":"2026-05-07T09:36:59.864Z","repository":{"id":307505184,"uuid":"1029730993","full_name":"anisse/border-explorer","owner":"anisse","description":"Exploring places that share borders in Wikidata","archived":false,"fork":false,"pushed_at":"2026-04-23T21:45:14.000Z","size":90099,"stargazers_count":2,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-04-23T23:31:25.243Z","etag":null,"topics":["datavisualization","dataviz","maps","rust-lang","sqlite","wikidata"],"latest_commit_sha":null,"homepage":"https://anisse.github.io/border-explorer/","language":"Rust","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/anisse.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2025-07-31T13:37:39.000Z","updated_at":"2025-12-06T18:52:16.000Z","dependencies_parsed_at":"2025-10-20T22:15:03.253Z","dependency_job_id":"829dab46-f47d-40c5-8f4d-61c4b105d7d9","html_url":"https://github.com/anisse/border-explorer","commit_stats":null,"previous_names":["anisse/border-explorer"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/anisse/border-explorer","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/anisse%2Fborder-explorer","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/anisse%2Fborder-explorer/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/anisse%2Fborder-explorer/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/anisse%2Fborder-explorer/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/anisse","download_url":"https://codeload.github.com/anisse/border-explorer/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/anisse%2Fborder-explorer/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":32731949,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-07T02:14:30.463Z","status":"ssl_error","status_checked_at":"2026-05-07T02:14:29.405Z","response_time":62,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.6:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["datavisualization","dataviz","maps","rust-lang","sqlite","wikidata"],"created_at":"2026-05-07T09:36:59.162Z","updated_at":"2026-05-07T09:36:59.855Z","avatar_url":"https://github.com/anisse.png","language":"Rust","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Border Explorer: viewing places that share border\n\nBrowse places that are connected by a border, connected as a graph.\n\nThis project contains a pipeline to extract from Wikidata all the elements that share a border, and then organize them by categories to present them in a convenient view:\n\n## [Go to border explorer](https://anisse.github.io/border-explorer)\n\n\n# Tech details\n\nThe [first version was viewing only French communes](https://anisse.astier.eu/wikidata-communes-viewer.html); I [rewrote the data pipeline in Rust](https://github.com/ansuz/RIIR) and made it generic to support any Wikidata category. On the website are the top categories, by number of edges and connectivity ratio; minus some categories that are too broad or generic.\n\nInstead of installing Blazegraph and learning SPARQL, I decided to do a first pass to put the data in an sqlite database; then a second pass generates geojson files to be viewed from SQL queries.\n\n# Dependencies\n\n - lbzip2's lbzcat\n - a recent rust toolchain\n - a C compiler (to re-build sqlite)\n\nCrates:\n\n - chrono: for parsing times in the dumps\n - rusqlite: for sqlite access - uses a bundled version of sqlite3\n - memchr: for fast filtering before json parsing\n - serde and serde_json: for JSON parsing and geojson file generation\n - reqwest: for fetching category names from Wikidata (\u003c 200 HTTP requests in a run)\n - indexmap: for stable output generation\n\nFrontend:\n\n - Maplibre GL JS - for displaying the data on a WebGL-accelerated map widget (fork of Mapbox GL JS)\n - Noto font, converted as PBF for OpenMapTiles (from Maplibre demo tiles).\n - [Earth coastlines extract](https://github.com/simonepri/geo-maps/blob/master/info/earth-coastlines.md) from OpenStreetMap, converted to geojson.\n\n# Running, building, etc.\n\nBuild and run on a [bz2 JSON dump of Wikidata](https://www.wikidata.org/wiki/Wikidata:Database_download#JSON_dumps_(recommended)), storing the extracted information in temporary sqlite database `border-explorer.db`:\n\n```sh\ncargo run --release border-explorer.db ./wikidata/latest-all.json.bz2\n```\n\nThis will generate the geojson files in `web/geojson/`; you can then use the website statically with a webserver at the root of `web/`.\n\n# FAQ\n\n### Why do some categories have such an non-descriptive name?\n\nIt comes from Wikidata. Usually those categories have a good enough full description, but a very short name, like \"district\" or \"province\"; do not hesitate to contribute to Wikidata to improve those in your language!\n\n### Why do some categories seem to have incomplete information?\n\nIt comes from Wikidata. Do not hesitate to [contribute](https://www.wikidata.org/wiki/Wikidata:Contribute)!\n\n### Why do I only see names in English (or French)?\n\nSometimes there might not even be a name for any locale, so for english we fallback to `mul`, the multilingual label. But in general, I have only implemented getting the names for those two locales, I might do more if there is interest!\n\n### Why did you do this?\n\nGood question. If you find out, let me know!\n\n### I am not happy with the names displayed, or the political borders described here\n\nI invite you to open a discussion about this on Wikidata's wiki Discussion pages.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fanisse%2Fborder-explorer","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fanisse%2Fborder-explorer","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fanisse%2Fborder-explorer/lists"}