Hacker News new | past | comments | ask | show | jobs | submit login
Show HN: A simple CLI tool to generate satellite images of a location (github.com/plant99)
303 points by plant99 8 months ago | hide | past | favorite | 62 comments

This is neat!

I’ve built something similar, although my tool can pull its data from any service that supports tile indexing via the Web Mercator Transform (e.g. Google Maps, OSM, basically every online mapping service):


Its original purpose is the creation of Twitter bots like the ones liked below, but it works well for grabbing detailed satellite maps of arbitrary areas.





Love this, and the bots. I had one running myself for a while, but I missed the part that grabbed the satellite imagery, do I did that in bulk ahead and had a folder of them.


This is awesome! I'd go through the code as well in a bit, but the twitter bots are really amazing.

Felicette is a dead-simple CLI tool which searches, downloads, generates, and visualizes satellite imagery in the form of RGB jpegs, taking inputs in the form of location's name or coordinates. It also has options to visualize CIR vegetation data.

Neat project! The example photos in Drive are a bit wonky on mobile and only one of the files is accessible. Consider adding a few example photos in the readme. What’s the licensing and usage rights of the produced images?

Right, thanks for the feedback. They are 16bits JPEGs, thus the large file sizes.

And the images are generated in your system with the data from a public source.

Not sure who owns the copyright to them. ^^

App seems to be using Landsat data. There should be no restrictions on its use.


Seems nice but sends you to dependency hell when you try to install on Ubuntu.

On 18.04, it can't find the correct openvc On 19.04, same things On 20.04, the repo doesn't include config for 20.04

Would love to try it, but ...

You can try the Docker build I just made if you want: https://news.ycombinator.com/item?id=23951167

Very weird, can you raise an issue with some logs, I'd love to take a look at them and see what went wrong. Thanks for looking into the tool.

Wont have time to do this, nor do I have a github account anymore since that once welcoming place has been assimilated by the borg.

However, here's a hint: try to install a minimal ubuntu server on a VM and install/run your package.

You'll quickly discover the real transitive dependency set of your software.

Update your pip and you should be fine. Or modify the package requirements. It worked even with older versions for me.

Off-topic but slightly related, so I'll just post it here in comments.

I've recently discovered pretty cool telnet server. Map in telnet: telnet mapscii.me

That was super cool! They really get all the details.

At first I couldn't figure out how to zoom in. I pressed all they keys. Then I accidentally moved the mouse over the window and it zoomed in.

So my first thought was, "how the heck do they capture the mouse in the terminal!".

Then I exited out of it by killing telnet, and noticed that my terminal was still capturing my mouse input! Just moving the mouse over the terminal put ASCII codes on the command line.

What is this sorcery?

That is really neat, thanks for the share. I am amazed at how much detail they managed to include as you zoom in.

Felicette was the first cat launched into space on 18 October 1963 as part of the French Space Program


Definition of felicette


That is included in the readme

Looks like a great tool, but its dependencies are sufficiently complex to warrant a Dockerfile. This way it would be very clear what the dependencies are independent of how the host system is configured.

I just pushed a Docker build here: https://hub.docker.com/r/milhouse1337/felicette

You can use it like this:

  docker run -it -v "$PWD"/felicette-data:/root/felicette-data milhouse1337/felicette felicette -l "Montreal"
That's a very cool project to play with! Thank you @plant99 for this.

Wow, that just makes it a lot simpler for people to test/use. Could you please share your GitHub username, so I can attribute with a link to the docker image in the README?

Thanks for the feedback, I agree with you on this. I'll add this to the to-do list.

[pipx](https://pipxproject.github.io/pipx/) is a nice way to download python CLI apps in a separate contained virtual env. But I couldn't install your app with it:


Oh from the logs it looks like `numpy` wasn't installed. Please install GDAL=={ogrinfo --version}, and numpy before installing felicette, and that'd most probably solve it.

https://imgur.com/a/dKc2OlG - The example images for those who don't have want to download a 40mb image or don't use google drive

What are the two variations? One looks like a regular image, is the 2nd an IR band?

Yes, RGB and CIR. Btw, all the top nav links in the dochuddle site in your bio are broken and don't do anything.

Looking at the code, it appears to be a nice front end to sat-search https://github.com/sat-utils/sat-search

Yes, it uses sat-utils to search STAC. It's a beautiful project.

Yeah amazing they’ve left out the key info like source of images. Does this API need a token?

Where the data are coming from? Can't find a word about it in README.

Oops, will add a section soon. But for now, it gets the data from a public Landsat 8 AWS storage.


It uses Landsat, as far as I can gather from the code.


Take quite some time to install. And some images are great like `felicette -l "New York" Some totally blank (real time and dark) felicette -l "Hong Kong" Some not sure as a bit random like those of Three Gorges Dam using ``` felicette -c 109.5568 31.0390 felicette -c 111.003761 30.823748 felicette -c 110.25 30.95 ``` One has coloured and the other not sure.

I guess this is part of being satellite images?

Hmm. Weird, maybe faulty data for some row/path(s).

I'm checking on this, thanks for reporting this. Meanwhile, could you please raise this as an issue on the repository?

Here are some possibilities to add:

- Allow farbfeld output (to stdout)

- Allow specifying your own assignment of bands

- Allow to skip the colour adjustment if you want to do that separately

- Ensure it works correctly with a non-Unicode locale

Right, thanks a lot for your suggestions.

Points 2, 3 are in the to-do list. Will definitely add 1, 4.

I'm used to writing latitude first when writing coordinates so I couldn't get the tool to find any images for a while. Other than that neat tool

Oh yes haha, I feel you. I'm using some amazing libraries as dependencies, created by 'Mapbox'. Now you know why it's (lon, lat) ^^

And thanks for checking it out!

On a tangent, but any suggestions for a tool to stitch up drone aerial imagery and use it as a map?

Preferably on the phone/tablet.


Works quite well. Input images must have geo data in the exif metadata like longitude, latitude, FOV, camera pitch (most drones e.g. Autel and DJI drones will include this). You need to set it up on a server, then it's a web app which you could access from a phone/tablet but it involves uploading the images so it probably won't work well like that.

Um, don't know of a tool to process aerial imagery using phone/tablet.

But I'm sure you're aware of https://qgis.org/en/site/. Some of my friends used this to analyze vegetation using drone imagery.

Sounds like the perfect tool for a spy/hacker/csi TV show.

Hey the images turn out great. That’s really cool!

Thank you!

A couple of comments...

> TL;DR: Generate JPEG earth imagery from a location's name/coordinates

It downloads imagery. At first I thought this was a project to simulate satellite imagery from OSM data or something.

> This tool is for a sentient being who wants to view high-res satellite imagery of earth

Landsat is what 30 meters-per-pixel? That's not high-resolution.

> It downloads imagery. At first I thought this was a project to simulate satellite imagery from OSM data or something.

Will update the README, thanks for pointing it out.

> Landsat is what 30 meters-per-pixel? That's not high-resolution.

With the panchromatic band, we can get 15m resolution. But you're right with the fact that one can get images with better resolution on any commercial platforms.

But even OpenMapTiles renders at 15m, I feel. Still have to look into some docs though, I'm curious.

NAIP has 1 m/pixel imagery, only over US.

Thanks, I'll look into it, and try integrating the data source with the tool.

I give it a coordinate and it give me a picture of the French and UK sea towns. That is quite a low resolution I guess.


This is great, thanks for building this

Thanks for trying it out. ^^

is it live? Like can a get a pic of a place made at day light in the last 24 hours?

Hi, not yet. It searches for all Landsat 8 images on AWS with lowest cloud cover.

But even at it's full potential, Landsat 8 gives a temporal resolution of 14 days for a location, iirc.

For a little more effort you could "interleave" the Sentinel 2 images as well, which are of a similar resolution and also have a simple access API.

Oh yes, there are plans to integrate Sentinel images as well, but the data fetch layer has to be worked on to handle auth/AWS config to fetch data from buckets.

So released with Landsat 8 first, and I think sentinel 2 has better resolution, up to 10m, if I am not wrong. So it'd be a lot better if Sentinel 2 integration were in-place.

There's also this, if you are interested in downloading timeseries as a whole: https://github.com/cmla/tsd

It supports sentinel 1/2/5p, landsat 8 and a few other satellites if you have the required API access identifiers. The idea is to fetch data not from buckets but from the actual sources, so the underlying philosophy is a bit different.

This is a gold mine, thanks for sharing!

Landsat 8 has a 16 day repeat cycle

Yess, thanks for the correction.

"The satellite has a 16-day repeat cycle with an equatorial crossing time: 10:00 a.m. +/- 15 minutes." from USGS website.

Are there any example images?

Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact