Global Contour Model



Once I started playing with a globe and showing flights, in the 30dayMapChallenge, I started to think about how I could build polygon world and overlay adsb flight data….

The world looks very different if you only plot ocean depth

Adding land details and the world feels more familiar…

Animating the world

It seemed so obvious in hindsight but I started the animation with a stationary camera and rotating the earth. While this worked for the limited contour polygons, it did not scale well to the adsb paths. It turned out to be much more efficient to leave the models stationary and rotate the camera.

Global ADSB Flight Paths

ADS-B Exchange offer free sample data for one day each year, most recently 1-Aug-222. A json file is available for each aircaft trace during this 24 hour period. The traces may contain more than one flight but that was ok for this purpose. I downloaded all the json files with a recursive curl command.

wget --no-verbose --no-parent --recursive https://samples.adsbexchange.com/traces/2022/08/01/

Next, the traces were analysed with a python script, filtered to only show traces over six hours with points limited to every 10 minutes, and then loaded into Blender as paths.

	for filename in files:
		with open(filename, "r") as read_file:
			data = json.load(read_file)
			if 'trace' in data:
				traceStartTime = data['timestamp']
				startSeconds = getTimestampOffsetSeconds(traceStartTime)
				trace = []
				i = 0
				lastSeconds = 0
				intervalSeconds = 10 * 60 # 10 mins
				for t in data['trace']:
					if ((i == 0) or (i == len(data['trace'])) or ((t[0] - lastSeconds) > intervalSeconds)):
						v = Vector((t[2], t[1], convertFeetToScaledElevation(t[3])))
						newV = xyToSphereXYZ.getXYZfromLatLon(v)
						trace.append(newV)
						lastSeconds = t[0]
					i = i + 1
				# Limit to traces over six hours
				if (len(trace) > (6*6)):
					count = count + 1
					createPath(trace, 'path', collectionName, startSeconds, lastSeconds)

Zooming in on the UK

Comments