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….
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.
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)