{ "$schema": "https://vega.github.io/schema/vega/v5.json", "description": "Line drawn between airports in the U.S. simulating a flight itinerary", "background": "white", "padding": 5, "width": 800, "height": 500, "data": [ { "name": "source_0", "url": "data/us-10m.json", "format": {"type": "topojson", "feature": "states"} }, {"name": "source_1", "url": "data/airports.csv", "format": {"type": "csv"}}, { "name": "source_2", "values": [ {"airport": "SEA", "order": 1}, {"airport": "SFO", "order": 2}, {"airport": "LAX", "order": 3}, {"airport": "LAS", "order": 4}, {"airport": "DFW", "order": 5}, {"airport": "DEN", "order": 6}, {"airport": "ORD", "order": 7}, {"airport": "JFK", "order": 8} ] }, { "name": "data_0", "source": "source_1", "transform": [ { "type": "geojson", "fields": ["longitude", "latitude"], "signal": "layer_1_geojson_0" }, { "type": "geopoint", "projection": "projection", "fields": ["longitude", "latitude"], "as": ["layer_1_x", "layer_1_y"] } ] }, { "name": "data_1", "source": "source_2", "transform": [ { "type": "lookup", "from": "source_1", "key": "iata", "fields": ["airport"], "values": ["latitude", "longitude"] }, { "type": "geojson", "fields": ["longitude", "latitude"], "signal": "layer_2_geojson_0" }, { "type": "geopoint", "projection": "projection", "fields": ["longitude", "latitude"], "as": ["layer_2_x", "layer_2_y"] } ] } ], "projections": [ { "name": "projection", "size": {"signal": "[width, height]"}, "fit": { "signal": "[data('source_0'), layer_1_geojson_0, layer_2_geojson_0]" }, "type": "albersUsa" } ], "marks": [ { "name": "layer_0_marks", "type": "shape", "style": ["geoshape"], "from": {"data": "source_0"}, "encode": { "update": { "fill": {"value": "#eee"}, "stroke": {"value": "white"}, "ariaRoleDescription": {"value": "geoshape"} } }, "transform": [{"type": "geoshape", "projection": "projection"}] }, { "name": "layer_1_marks", "type": "symbol", "style": ["circle"], "from": {"data": "data_0"}, "encode": { "update": { "opacity": {"value": 0.7}, "fill": {"value": "gray"}, "ariaRoleDescription": {"value": "circle"}, "description": { "signal": "\"longitude: \" + (format(datum[\"longitude\"], \"\")) + \"; latitude: \" + (format(datum[\"latitude\"], \"\"))" }, "x": {"field": "layer_1_x"}, "y": {"field": "layer_1_y"}, "size": {"value": 5}, "shape": {"value": "circle"} } } }, { "name": "layer_2_marks", "type": "line", "style": ["line"], "sort": {"field": ["datum[\"order\"]"], "order": ["ascending"]}, "from": {"data": "data_1"}, "encode": { "update": { "stroke": {"value": "#4c78a8"}, "description": { "signal": "\"longitude: \" + (format(datum[\"longitude\"], \"\")) + \"; latitude: \" + (format(datum[\"latitude\"], \"\")) + \"; order: \" + (isValid(datum[\"order\"]) ? datum[\"order\"] : \"\"+datum[\"order\"])" }, "x": {"field": "layer_2_x"}, "y": {"field": "layer_2_y"} } } } ] }