{"id":25930509,"url":"https://github.com/doersino/gomati","last_synced_at":"2025-03-03T23:21:26.738Z","repository":{"id":69427606,"uuid":"250344013","full_name":"doersino/gomati","owner":"doersino","description":"A simple Google Maps tile downloader and stitcher.","archived":false,"fork":false,"pushed_at":"2021-04-05T14:40:21.000Z","size":578,"stargazers_count":8,"open_issues_count":1,"forks_count":2,"subscribers_count":3,"default_branch":"master","last_synced_at":"2025-02-27T17:28:56.202Z","etag":null,"topics":["aerial-imagery","bash-script","google-maps","map-tiles","maps","satellite-imagery"],"latest_commit_sha":null,"homepage":"","language":"Shell","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/doersino.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null}},"created_at":"2020-03-26T18:46:59.000Z","updated_at":"2023-10-09T11:21:50.000Z","dependencies_parsed_at":"2023-09-22T07:06:04.393Z","dependency_job_id":null,"html_url":"https://github.com/doersino/gomati","commit_stats":{"total_commits":18,"total_committers":2,"mean_commits":9.0,"dds":0.05555555555555558,"last_synced_commit":"bfa6de4856b606af2a5e5695acfcd93fb0957277"},"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/doersino%2Fgomati","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/doersino%2Fgomati/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/doersino%2Fgomati/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/doersino%2Fgomati/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/doersino","download_url":"https://codeload.github.com/doersino/gomati/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":241753763,"owners_count":20014357,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","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":["aerial-imagery","bash-script","google-maps","map-tiles","maps","satellite-imagery"],"created_at":"2025-03-03T23:21:21.996Z","updated_at":"2025-03-03T23:21:25.372Z","avatar_url":"https://github.com/doersino.png","language":"Shell","funding_links":[],"categories":[],"sub_categories":[],"readme":"# gomati\n\n*A simple Google Maps tile downloader and stitcher.*\n\n**Note: I've reimplemented (and significantly extended) this tool in Python – meet [ærialbot](http://github.com/doersino/aerialbot). Despite having been designed to power a set of Twitter bots, if you configure it to download an area around a fixed point and leave the Twitter API credentials blank, it's essentially equivalent to this tool. Notably, as it uses a threadpool for tile downloading, it's *significantly* faster than this tool.**\n\n\n## Setup \u0026 Usage\n\nSince Gomati is a **humble shell script**, you'll need `bash`, along with common command-line utilities – the only ones I'm not confident you already have are `curl` and `imagemagick`. Your package manager probably provides them.\n\nUsing this tool is as simple as **entering your desired latitude and longitude** in the source code, optionally taking a peek at the other parameters you can modify, and running:\n\n```\nbash gomati.sh\n```\n\nA more detailed **list of requirements and usage/configuration instructions**, along with a couple of tips and tricks, is **located at the top of `gomati.sh`**.\n\n![GOMATI_ZOOM=15 GOMATI_LATITUDE=43.078899 GOMATI_LONGITUDE=-79.072873 GOMATI_WIDTH=16 GOMATI_HEIGHT=6 GOMATI_RESIZE=1500x1000 bash gomati.sh](example.jpg)\n\n\n## FAQ\n\n### Why the name?\n\nGomati stands for **Go**ogle **Ma**ps **Ti**les and is apparently also a [river in India](https://en.wikipedia.org/wiki/Gomti_River).\n\n### Why did you make this tool?\n\nBecause satellite imagery [can be extremely beautiful](https://earthview.withgoogle.com), and I was looking for a way of easily downloading high-resolution satellite views of arbitrary locations such as [the center pivot irrigation farms of the American heartland](http://www.thegreatamericangrid.com/archives/1441).\n\n### Does this violate Google's terms of use?\n\nProbably. I haven't checked. But they haven't banned my IP for downloading tens of thousands of map tiles during development and testing, so you're probably good as long as you don't go overboard downloading a centimeter-scale map of your country.\n\n### Morally speaking, how bad is it to violate Google's terms of use assuming I don't go overboard?\n\nI'm not an ethicist, but consider this: Google is a stupendously profitable company that earns the bulk of its income via folks like you just going about their days surfing the ad-filled web.\n\n### What's the maximum map size?\n\nThe limiting factor is probably RAM during the stitching step: I've grabbed an 80-by-80 tile map (that's 6400 tiles for those of you keeping track at home) of my hometown, and ImageMagick ate about 12 GB of RAM while stitching them together into a 20480x20480, 420M pixel image.\n\n(The effectively-free Google Maps Static API [limits you](https://developers.google.com/maps/documentation/maps-static/dev-guide#Imagesizes) to 1280x1280 pixels unless you're grandfathered into a discontinued premium plan, as I've learned after building Gomati.)\n\n### Why is this tool so slow?\n\nSince it's a shell script, there's zero multithreading and a whole bunch of context-switching overhead, plus I made a real fancy progress indicator that's updated in a tight loop (i.e. a lot of string manipulation happens frequently). I should have implemented this in Python – and I would've, if only I had anticipated the amount of feature creep I ended up sneaking in.\n\n(The slowness isn't an issue if you use Gomati as I indend to use it: occasionally grabbing a 100ish tile map, which takes fewer than 30 seconds. Think of at as, uh, a totally intentional rate-limiting feature.)\n\n### How do you determine tile coordinates based on latitude and longitude?\n\nBy plugging them into the surprisingly simple [Web Mercator Projection](https://en.wikipedia.org/wiki/Web_Mercator_projection) formulas.\n\n### How can I figure out which zoom levels are available for my location?\n\nEither by trial and error (will always work) or via [this page](https://developers.google.com/maps/documentation/javascript/examples/maxzoom-simple) (will work until Google significantly changes their documentation).\n\n### This thing only does satellite images, not road maps – I want my money back!\n\nNot a question, but sure: 💵\n\n### You know, it'd be really neat if there was, like, a Twitter bot based on this tool!\n\nNot a question, but sure: Meet [@americasquared](https://twitter.com/americasquared).\n\n### Something is broken – can you fix it?\n\nPossibly. Please feel free to [file an issue](https://github.com/doersino/gomati/issues) – I'll be sure to take a look!\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdoersino%2Fgomati","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fdoersino%2Fgomati","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdoersino%2Fgomati/lists"}