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! :)
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.
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.
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!"
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.
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? :)
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.
I guess I wanted to use it to visualize data coming from other Go projects I was working on, so it made sense. A tiny example of this is https://github.com/mmcloughlin/spherand which correctly generates random points on a sphere. I also had seen pinhole (https://github.com/tidwall/pinhole) and thought it would be fun to play around with.
How possible / appropriate would it be to utilize this library to create an interactive version similar to this example using d3: https://www.jasondavies.com/maps/rotate/
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.
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.
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
44 comments
[ 3.6 ms ] story [ 90.4 ms ] threadThe only critique I have here is to see some benchmarks! :)
Also credit has to go to https://github.com/tidwall/pinhole where all the actual rendering happens!
I have no idea what kind of cities might be listed in 'cities.json'.
https://github.com/mmcloughlin/globe/blob/master/examples/Ma...
It came from this node package
https://www.npmjs.com/package/cities.json/
It looks like the dataset has more cities in some countries than others.
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...
1. https://en.wikipedia.org/wiki/Map_projection
2. https://en.wikipedia.org/wiki/Geographic_coordinate_system
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?)
https://github.com/fogleman/gg
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).
This may or may not be useful, but here's a Go package containing a bunch of city data. It might be a good fit for people using your project.
https://github.com/tidwall/cities
https://github.com/mmcloughlin/globe/blob/master/examples/ci...
In fact I might switch it, since the cities json file I used has some oddities.
Layers, visualized:
https://godoc.org/github.com/mmcloughlin/globe?import-graph&...
Keep it up!
https://github.com/fogleman
Was there a particular reason why you chose Go to implement this? (strong side of the language or sth like that)
I guess I wanted to use it to visualize data coming from other Go projects I was working on, so it made sense. A tiny example of this is https://github.com/mmcloughlin/spherand which correctly generates random points on a sphere. I also had seen pinhole (https://github.com/tidwall/pinhole) and thought it would be fun to play around with.
Interactive would be hard. It would be relatively simple to output an animated gif though, as the pinhole library does here
https://github.com/tidwall/pinhole/blob/master/examples/eart...
I'm planning to add this feature.
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!"
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.
Anyway, care to elaborate whats wrong with excellent build/package/dependency system in D called Dub? Never had any problems with it.
I gave up after the Urban dictionary link. I assume you're trolling?
This is easily negated by the increased brain time required for using a 1960s type system.
https://godoc.org/github.com/mmcloughlin/globe#Globe.Image
This can be passed to an image encoder like
https://golang.org/pkg/image/png/#Encode https://golang.org/pkg/image/gif/#Encode https://golang.org/pkg/image/jpeg/#Encode
These functions take io.Writer objects. SavePNG was provided for convenience.
Thanks!
http://jsfiddle.net/go2t1r4q/2/