44 comments

[ 3.6 ms ] story [ 90.4 ms ] thread
It's always nice seeing unique projects in Golang appear like this. Also worth noting that this includes the ability to upload directly to imgur via the github.com/mattn/imgur tool. Once thing that I particularly love about Go is the built-in testing suite which mmcloughlin makes good use of.

The only critique I have here is to see some benchmarks! :)

Hence the power of open source.
Thanks! I was really glad to find that imgur tool. I wanted to make sure the images in the README were kept in sync with the code.

Also credit has to go to https://github.com/tidwall/pinhole where all the actual rendering happens!

The map in the readme is puzzling me. It's almost like a riddle: what is there a lot of in the UK, east America, Portugal, and barely any of in Norway, Spain, and Belgium? It looks country-related, since you can see the borders defined pretty well. Is it the Starbucks data? It would explain why Finland appears to have a few, compared to its neighbours.
Probably not Starbucks, way to many mapped in Sweden. Starbucks is not that widely spread here.
Yes the top image in the README is cities. The Starbucks image is lower down in their distinctive green color.
There's a cities.go file in the examples, maybe it's that? But the relevant cities.json is not in this repo.
Judging by used color, the picture might be a result of this demo: https://github.com/mmcloughlin/globe/blob/master/examples/ci...

I have no idea what kind of cities might be listed in 'cities.json'.

Does anyone know why isn’t it possible to get the same perspective (preserving scale, distances, areas) in Google Earth Web?

For example, you wouldn’t be able to get the shapes of continents along with the size of the whole globe in Google Earth visually match the projection under “line” example in README.

[0] https://earth.google.com/web/@54.45747286,-25.48168721,-8084...

There are lots of different map projections[1] and coordinate systems[2]. As the old joke goes, "the best thing about standards is there are so many to choose from!"

1. https://en.wikipedia.org/wiki/Map_projection

2. https://en.wikipedia.org/wiki/Geographic_coordinate_system

If you want to map whole planet’s surface onto a plane then sure, there’re tons of options (Dymaxion projection is my favorite). I can’t understand why areas and distances would be distorted if user manipulates a 3D globe though; yet it seems to be the case here.
That is exactly the problem. It is easy for programmers to start with a 3D sphere and start randomly projecting things on to it. However the earth itself is an ellipsoid that bulges around the equator, so again you have a projection problem of people trying to put one shape onto a different shape.
This looks really cool! One comment, in this picture: https://camo.githubusercontent.com/16434461a69346de4ee07b950...

The left and right side of the rectangle are correctly bent around the shape of the globe. However, the top and bottom sides of the rectangle are not. Is this intention (or am I being stupid?)

The red lines are the shortest paths between the corners of the rectangle, not lines of constant latitude (which would follow the latitude lines drawn on the globe).
Glad to see more graphics work being done in Go. This is built on `pinhole`, which is built on `gg`, a 2D rendering library that I wrote. How many layers deep can we get? :)

https://github.com/fogleman/gg

Standing on the shoulders of giants :)

gg and pinhole made this easy to write. The globe package really just deals with mapping (lat, lng) space to cartestian coordinates (and also includes some land/country datasets).

I've been following you on github for a long time (since the minecraft clone you made in C was featured in /r/programming). You are insane man, I love your work.

Keep it up!

Looks great!

Was there a particular reason why you chose Go to implement this? (strong side of the language or sth like that)

I need to learn go
No you don't, it has no benefits relative to languages in its space of competition (Rust, D, various JVM/.NET languages, Haskell, ML, Nim, etc.).
Team friendlyness, simplicity, readability, tooling, native compilation, built in syntax for concurrency and really fast compilation times for large projects.
Few of these, honestly, benefit one man side projects. If you want to learn Go (for whatever reason) its fine, but otherwise I personally would prefer more expressive and less dogmatic language.
Who said they wanted to learn it for "one man side projects"?
This is what OP project is, no?

Two people see cool sideproject in Go, his thoughts "damn this looks good, I need to learn Go", my thoughts "Whyyy you do this in Go and not D? Simplistic Go has no strong sides here! Why nobody promotes my favourite language with things like this, it deserves hype no less!"

I guess it's because no one is writing anything "cool" in D?

Simplistic Go has a lot going for it - focussing on knocking out cool projects rather than the minutiae of build/package/dependency systems is one of them.

Its because D has way less developers, support and, consequently, way less hype, than a language backed by one of the biggest world corporations in existence.

Anyway, care to elaborate whats wrong with excellent build/package/dependency system in D called Dub? Never had any problems with it.

> really fast compilation times for large projects

This is easily negated by the increased brain time required for using a 1960s type system.

That's pretty cool! It would be nice if the API allowed writing to io.Writer instead of taking filenames.
Are there any provisions for drawing a color mesh on something like this?

Thanks!

Looks really cool! How many points can one draw with this before it becomes too slow? I did a similar looking 3D globe animation with WebGL once and the total number of points was quite an issue

http://jsfiddle.net/go2t1r4q/2/