Friday, June 29, 2018

Solar System Missions Update 07/2018

Here's my map of all active and future Solar System Missions as of July 1st 2018.

Mars lander InSIGHT and the MarCOs cruising towards Mars, which will be at oppositon this month on the 27th. And the launch window for the Parker Solar Probe opens on the 31st August 4th.

But the biggest show right now for me is Hayabusa 2 with a great approach to Asteroid Ryugu and great images, upcoming in September is the landing of the MINNERVA 2 and MASCOT probes on the asteroid.

Data, images and documentation are available on my space exploration history GitHub repository and the associated website.

Thursday, May 31, 2018

Solar System Missions Update 06/2018

Here's my map of all active and future Solar System Missions as of June 1st 2018.

This time not with one, not two, but four new spacecraft on the map: The Mars lander InSIGHT, along with the first interplanetary cubesats MarCO-A and MarCO-B, aka. Wall-E & Eve. And the Chinese communication relay orbiter for the Lunar far side mission Chang'e 4, Queqiao (鹊桥) or Magpie Bridge. Also, Hayabusa 2 is getting very close to Asteroid Ryugu, less than 10.000 km right now.

Data, images and documentation are available on my space exploration history GitHub repository and the associated website.

Monday, April 30, 2018

Solar System Missions Update 05/2018

Here's my map of all active and future Solar System Missions as of May 1st 2018.

Yay, interplanetary launch affot: InSIGHT! Also, Hayabusa 2 is getting ever closer to Asteroid Ryugu, only ~150.000 km right now.

Data, images and documentation are available on my space exploration history GitHub repository and the associated website.

Sunday, April 22, 2018

Space Observatories Update 04/2018

A new observatory in space, TESS! Time for an update to the Space Observatories page. Also some delays and the Chinese "Two Meter Space Telescope" got the proper name Xuntian, "Sky Survey", and will be deployed close to the future multiple segment Chinese Space Station for easy maintenance.

The source data are now available on my space exploration history github repository, together with the included infographics.

[Edit: Corrected image 2018-04-25]

Monday, April 9, 2018

Tisserand's Parameter in 2 Dimensions

Here is another interactive graph about Tisserand's parameter. My first post about it has the explanation what it is, and also a line graph that adapted to the set orbital parameters semimajor axis a, eccentricity e and inclination i of a perturbed body and the chosen perturber, any giant planet. First, here is the definition again, where Tp is the Tisserand parameter:

Tp = ap a +2 a ap ( 1 - e2 ) cos i

As stated in the above post, the nice thing about it is that it is a quasi-conserved quantity that stays more or less the same before and after a close encounter of an asteroid, a comet or a space probe with a large body. Even nicer would be to see a whole lot of parameter-combinations at once, as a Tp-heat map combining any two parameters in a plane. Like this:

As you can see, the graph lets you select the parameter combination a vs. i, a vs. e, or e vs. i, and chose a value for the third one separtely, for each of the giant outer planets, which are represented by a red circle in the plane. The currently selected parameters are indicated in the resulting formula at the lower right. The Tisserand value below the crosshair is indicated close to it, along with the peri- and aphelion (closest and farthest distance to the Sun) for the given combination of parameters.

So that means paths along the same line of Tisserand values indicate changes of the plotted parameters achievable by a flyby of the respective giant planet, be it for a spacecraft, asteroid or comet. At least that's what I think it means.

The graph uses D3.js for display and interactions, and MathJax for math-formatting. Check out the source code on GitHub

Friday, March 30, 2018

Solar System Missions Update 04/2018

Here's my map of all active and future Solar System Missions as of April 1st 2018.

Until last month I had the Chandrayaan 2 launch imminent, but that got delayed until later this year. OTOH Hayabusa 2 is getting really close now to Asteroid Ryugu, and also getting close are the launches of InSIGHT and the Chang‘e 4 relay orbiter.

Data, images and documentation are available on my space exploration history GitHub repository and the associated website.

Saturday, March 24, 2018

How To Put Your Own Data on the Celestial Map

I have added a simple example of how to add your own data to my interactive celestial map. Specifically, how to display the Summer Triangle at its proper position. It'll look like this:

First we need to add the proper libraries and stylesheet:

<script type="text/javascript" src="https://d3js.org/d3.v3.min.js"></script>
<script type="text/javascript" src="https://d3js.org/d3.geo.projection.v0.min.js"></script>
<script type="text/javascript" src="https://ofrohn.github.io/celestial.min.js"></script>
<link rel="stylesheet" href="https://ofrohn.github.io/celestial.css">

Whatever you add needs to be valid geoJSON. The various types of objects are described in the readme of the data folder in the GitHub repository. This can be a separate file or a JSON object filled at runtime or defined inline. Like so:

  var jsonLine = {
    "type":"FeatureCollection",
    // this is an array, add as many objects as you want
    "features":[
      {"type":"Feature",
       "id":"SummerTriangle",
       "properties": {
         // Name
         "n":"Summer Triangle",
         // Location of name text on the map
         "loc": [-67.5, 52]
       }, "geometry":{
         // the line object as an array of point coordinates, 
         // always as [ra -180..180 degrees, dec -90..90 degrees]
         "type":"MultiLineString",
         "coordinates":[[
           [-80.7653, 38.7837],
           [-62.3042, 8.8683],
           [-49.642, 45.2803],
           [-80.7653, 38.7837]
         ]]
       }
      }  
    ]
  }; 

As you can see, this defines the Summer Triangle asterism, consisting of the bright stars Vega (Alpha Lyr), Deneb (Alpha Cyg) and Altair (Alpha Aql).

You also need to define how the triangle is going to look like with some styles (see documentation on GitHub):

  var lineStyle = { 
    stroke:"#f00", 
    fill: "rgba(255, 204, 204, 0.4)",
    width:3 
  };
  var textStyle = { 
    fill:"#f00", 
    font: "bold 15px Helvetica, Arial, sans-serif", 
    align: "center", 
    baseline: "bottom" 
  };

Lastly, we need some settings for the proper map, also documented on the GitHub repository:

  var config = { 
    width: 640,
    projection: "airy", 
    center: [-65, 0],
    background: { fill: "#fff", stroke: "#000", opacity: 1, width: 1 },
    datapath: "https://ofrohn.github.io/data/",
    stars: { 
      colors: false, 
      names: false, 
      style: { fill: "#000", opacity:1 }, 
      limit: 6, 
      size:5 
    },
    dsos: { show: false },
    mw: { 
      style: { fill:"#996", opacity: 0.1 } 
    },
  };

Now we can get to work, with the function

Celestial.add({file:string, type:"line", callback:function, redraw:function)

The file argument is optional for providing an external geoJSON file, since we already defingd our data, we don't need it. Type is 'line', that leaves two function definiions, the first one gets called at loading, this is where we add our data to the d3-celestial data container, and redraw is called at every redraw event for the map. so here you need to define how to display the added object(s).

  callback: function(error, json) {
    if (error) return console.warn(error);
    // Load the geoJSON file and transform to correct coordinate system, if necessary
    var asterism = Celestial.getData(jsonLine, config.transform);

    // Add to celestial objects container in d3
    Celestial.container.selectAll(".asterisms")
      .data(asterism.features)
      .enter().append("path")
      .attr("class", "ast"); 
    // Trigger redraw to display changes
    Celestial.redraw();
  }

The callback funtion is pretty straight forward: Load the data with Celestial.getData, add to Celestial.container in te usual d3 manner, and redraw. It also provides a json parameter that contains the parsed JSON if a file property is given, but we already have defined jsonLine above, so we use that.

  redraw: function() {   
    // Select the added objects by class name as given previously
    Celestial.container.selectAll(".ast").each(function(d) {
      // Set line styles 
      Celestial.setStyle(lineStyle);
      // Project objects on map
      Celestial.map(d);
      // draw on canvas
      Celestial.context.fill();
      Celestial.context.stroke();
      
      // If point is visible (this doesn't work automatically for points)
      if (Celestial.clip(d.properties.loc)) {
        // get point coordinates
        pt = Celestial.mapProjection(d.properties.loc);
        // Set text styles       
        Celestial.setTextStyle(textStyle);
        // and draw text on canvas
        Celestial.context.fillText(d.properties.n, pt[0], pt[1]);
      }      
    })
  }

And the redraw function with the actual display of the elements, contained in a d3.selectAll call on the previously set class property of the added objects. Celestial.setStyle applies the predefined canvas styles, Celestial.map projects each line on the map. However, that doesn't work for points, so that is done manually with Celestial.clip (true if point is currently visible) and Celestial.mapProjection. and the rest are standard canvas fill and stroke operations. The beginPath and closePath commands are done automatically.

  Celestial.display(config);

Finally, the whole map is displayed. Check out the documentation or download/fork the D3-Celestial source in the GitHub repository. The complete sample code is in the file triangle.html in the demo folder.