{"id":19323282,"url":"https://github.com/ojack/germany-vector-tiles","last_synced_at":"2026-02-05T05:31:49.653Z","repository":{"id":70842923,"uuid":"383789268","full_name":"ojack/germany-vector-tiles","owner":"ojack","description":null,"archived":false,"fork":false,"pushed_at":"2021-10-01T11:33:20.000Z","size":34814,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-07-13T14:46:48.426Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"https://ojack.xyz/germany-vector-tiles/example-data-loading/","language":null,"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/ojack.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}},"created_at":"2021-07-07T12:21:57.000Z","updated_at":"2021-10-01T11:41:15.000Z","dependencies_parsed_at":"2023-07-16T06:16:28.120Z","dependency_job_id":null,"html_url":"https://github.com/ojack/germany-vector-tiles","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/ojack/germany-vector-tiles","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ojack%2Fgermany-vector-tiles","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ojack%2Fgermany-vector-tiles/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ojack%2Fgermany-vector-tiles/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ojack%2Fgermany-vector-tiles/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/ojack","download_url":"https://codeload.github.com/ojack/germany-vector-tiles/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ojack%2Fgermany-vector-tiles/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29113597,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-02-05T05:31:32.482Z","status":"ssl_error","status_checked_at":"2026-02-05T05:31:29.075Z","response_time":65,"last_error":"SSL_read: 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":[],"created_at":"2024-11-10T01:45:41.510Z","updated_at":"2026-02-05T05:31:49.639Z","avatar_url":"https://github.com/ojack.png","language":null,"funding_links":[],"categories":[],"sub_categories":[],"readme":"## [WIP] Exploration of using vector tiles for rendering large-scale datasets in the browser\n\nThis repository is an exploration of strategies for:\n- simplifying geographic polygons based on visible area\n- compressing large data for browser rendering\n- dynamic browser styling / rendering using WebGL\n- file structure for storing large amounts of data\ngit add \n### What are vector tiles?\nhttps://geovation.github.io/build-your-own-static-vector-tile-pipeline\n\n\n\u003e Mapbox Vector Tiles are a modern way of storing and transmitting the same sort of feature data you might ordinarily find in a shapefile, GeoJSON or TopoJSON file.\n\u003e\n\u003eThere are two features of vector tiles that make them particularly interesting as a source format for displaying data on maps:\n\u003e\n\u003e 1. In preparing the tiles, the data for the features the tileset represents is chopped up into individual tiles. This means the data for a large feature like a coastline will no longer exist as a single complex shape, but instead each tile that needs to display a portion of it will contain just the information needed to render the part of the coastline it is responsible for.\n\u003e 2. Mapbox Vector Tiles are a compact binary encoding of the vector data called Google Protocol Buffers that is smaller than corresponding JSON, and usually smaller than a corresponding traditional raster tile too.\n\u003e\n\u003eBecause of these innovations, vector tiles have a major advantage over non-tiled formats like GeoJSON and TopoJSON:\n\u003e\n\u003e 1. Map clients only need to download the data for the tiles they need to display, not all the data for all features that have some part on the map (as they would with GeoJSON or TopoJSON)\n\u003e 2. Even if source GeoJSON or TopoJSON was prepared as separate tiles, Vector tiles can be obtained by browsers more quickly because they are a more compact binary format so file sizes are lower.\n\u003e\n\u003e Being a vector format (containing portions of the actual source data), vector tiles have advantages over traditional raster tiles (just pictures of the pre-coloured data) too:\n\u003e\n\u003e 1. Map clients can access the vector data directly so have the ability to re-colour or style the data dynamically themselves without needing to load more data from the server (something that can’t be done with raster tiles, which are just images of the data)\n\u003e 2. Map clients can zoom in and out smoothly between the different zoom levels because the data can be easily scaled while new data is loaded. This is known as over-zooming or under-zooming.\n\u003e 3. Vector tiles often have smaller file sizes than raster tiles. For example imagine you want to draw a line. In an image, you’d need to colour in each pixel between the start and end point (perhaps 20 numbers), whereas as a vector, you just specify numbers for the start and end point.\n\n\n### Generating vector tiles\n\nUsing Tippecanoe:\n\nExample dataset: https://github.com/juliuste/german-administrative-areas\n\n```\ntippecanoe --no-feature-limit --no-tile-size-limit --no-tile-compression --output-to-directory gemeinden-uncompressed ./german-administrative-areas/gemeinden.geo.json\n```\n\n#### Using different geographic boundaries at different zoom levels\noutput gemeinden at higher zoom levels (zoom 13 to 8)\n```\ntippecanoe -z13 -Z8 -y GEN --generate-ids --no-tile-compression --output-to-directory gemeinden-z7-ids ./german-administrative-areas/gemeinden.geo.json\n```\n\nkreise (zoom 8 to 6)\n```\ntippecanoe -z8 -Z6 -y GEN --generate-ids --no-tile-compression --output-to-directory kreise-z8-Z6-filtered-ai ./german-administrative-areas/kreise.geo.json\n```\n\nlaender (zoom 6 to 0)\n```\ntippecanoe -z6 -y GEN --generate-ids --no-tile-compression --output-to-directory laender-z6-ids ./german-administrative-areas/laender.geo.json\n```\n\n#### Different geographic boundaries at the same zoom level\ntippecanoe -z13 -y GEN --generate-ids --no-tile-compression --output-to-directory tiles/gemeinden-zAll-ids ./german-administrative-areas/gemeinden.geo.json\n\ntippecanoe -z13 -y GEN --generate-ids --no-tile-compression --output-to-directory tiles/laender-zAll-ids ./german-administrative-areas/laender.geo.json\n\ntippecanoe -z13 -y GEN --generate-ids --no-tile-compression --output-to-directory tiles/kreise-zAll-ids ./german-administrative-areas/kreise.geo.json\n\n\n#### Using sorted geojson (ids have already been pre-generated)\ntippecanoe -z13 -y AGS -y GEN -l laender --force --no-tile-compression --output-to-directory sample-data/tilesets/laender ./data-processing/data/laender-sorted.json\n\ntippecanoe -z13 -y AGS -y GEN -l kreise --force --no-tile-compression --output-to-directory sample-data/tilesets/kreise ./data-processing/data/kreise-sorted.json\n\ntippecanoe -z13 -y AGS -y GEN -l gemeinden --force --no-tile-compression --output-to-directory sample-data/tilesets/gemeinden ./data-processing/data/gemeinden-sorted.json\n\n### Notes\n- compression in tippecanoe refers to whether or not the output is g-zipped. this results in smaller file sizes, but requires special headings on server requests\n\n\n### Rendering Options\n- DeckGL \n- OpenLayers https://openlayers.org/en/latest/examples/osm-vector-tiles.html\n- Mapbox \n- Leaflet http://leaflet.github.io/Leaflet.VectorGrid/vectorgrid-api-docs.html\n- Tangram\n- d3 \n\nhelpful https://deck.gl/docs/developer-guide/performance\n\n### Loading and animating data\n\n```\n   \n### TO DO\n1. ~~example rendering and animating only gemeinden level with fake data~~\n    * ~~generate fake data at each date~~\n    * ~~load data as needed~~ (preload? use webworkers?)\n2. ~~Dynamically load and display data based on features being currently rendered~~\n3. Add example `metadata.json` \n4. document folder structure (update version below)\n5. Generate example `id-lookup.csv` for each vector tileset. (File that associates a specific geoid with a specific array index. All datasets that reference this tileset should use the given id lookup. Possibly also create an `id-lookup-extended.csv` that contains more properties from vector features. )\nseparate file for each date + geographic level (not spit into vectors)\n\n### QUESTIONS\n* is it reasonable to use the same order as id array from each tileset in order to generate ordered arrays of values for each dataset? \n* should each dataset and tileset have its own `metadata.json`, should there be one for 'datasets' and one for 'tilesets', or just one for all? This might affect data pipeline. Ideally, datasets shown and labelling, etc. could be updated just by updating the data files. Is there a way that is most efficient in terms of diffing and versioning? Datasets are likely to change often (each day as is updated), where as tilesets will very rarely if ever change. \n\n### Optimizations\npre-calculated color scale as in : https://github.com/visgl/deck.gl/blob/8.4-release/examples/website/geojson/app.js\n\n\n\n#### Folder structure g\n--my-sample-data\n    metadata.json\n    datasets\n        my-sample-data-1\n            gemeinden\n                values-by-date\n                    2020-01-12.csv\n                    2020-02-13\n                    .....\n                values-by-region\n                    geoid0.csv\n                    geoid1.csv\n                    .....\n            laender\n                values-by-date\n                values-by-region\n        my-sample-data-2\n              gemeinden\n                values-by-date\n                    2020-01-12.csv\n                    2020-02-13\n                    .....\n                values-by-region\n                    geoid0.csv\n                    geoid1.csv\n                    .....\n            laender\n                values-by-date\n                values-by-region\n    tilesets\n        laender\n        gemeinden\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fojack%2Fgermany-vector-tiles","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fojack%2Fgermany-vector-tiles","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fojack%2Fgermany-vector-tiles/lists"}