官方实例
链接- Create a MOC from a JSON object
可以在左侧修改数据试试。
在这个例子中,Aladin Lite支持从一个JSON对象实现MOC(多阶覆盖地图)的可视化。
首先,从一个JSON对象创建MOC实例:
var moc A.MOCFromJSON(<JSON-object>,<overlay-options>?);
然后就可以使用aladin.addMOC(moc)
将moc对象添加到aladin。
其中,可用的覆盖选项(overlay-options)如下所示:
Key Name | Discription |
---|---|
color | MOC的颜色 |
lineWidth | 轮廓的线宽,以像素为单位 |
opacity | 在0和1之间的浮点数。如果不透明度等于1(默认值),则只绘制MOC的轮廓线 |
adaptativeDisplay | 默认情况下,显示的MOC的分辨率在大视野下降低。 可以通过将false传递给此属性来关闭此功能。 |
这些很好理解,可是JSON对象里面的内容犯了难。34567又是个啥?
var json = {"3":[517], // "order":[ ipix ]
"4":[2065,2066,2067,2112,2344,2346,2432],
"5":[8221,8257,8258,8259,8293,8304,8305,8307,8308,8452,8456,9346,9352,9354,9736],
"6":[32861,32862,32863,32881,32882,32883,32892,32893,33025,33026,33027,33157,33168,33169,33171,
33181,33224,33225,33227,33236,33240,33812,33816,33828,33832,37377,37378,37379,37382,37388,
37390,37412,37414,37420,37422,37562,38928,38930,38936,38948,38952],
"7":[131423,131439,131443,131523,131556,131557,131580,131581,132099,132612,132613,132624,132625,132627,132637,
132680,132681,132683,132709,132720,132721,132904,132905,132948,132952,132964,132968,133008,133009,133012,135252,135256,135268,135316,135320,135332,135336,148143,148152,148154,149507,149520
,149522,149523,149652,149654,149660,149662,149684,149686,149692,149694,149695,150120,150122,150208,150210,150216,150218,150240,150242,150243,155748,155752,155796,155800,155812,155816]};
(order, ipix) Pair
于是下载aladin-lite源码,找到相关代码行(以下只截取了部分),了解到是(order, ipix)对。但是对其天文意义依旧不理解。
// Aladin.js
// API
A.MOCFromJSON = function(jsonMOC, options) {
var moc = new MOC(options);
moc.dataFromJSON(jsonMOC);
return moc;
};
// MOC.js
/**
* set MOC data by parsing a MOC serialized in JSON
* (as defined in IVOA MOC document, section 3.1.1)
*/
MOC.prototype.dataFromJSON = function(jsonMOC) {
this._highResCells = {};
this._lowResCells = {};
var order, ipix;
for (var orderStr in jsonMOC) {
if (jsonMOC.hasOwnProperty(orderStr)) {
order = parseInt(orderStr);
if (this.order===undefined || order > this.order) {
this.order = order;
}
for (var k=0; k<jsonMOC[orderStr].length; k++) {
ipix = jsonMOC[orderStr][k];
this._addPix(order, ipix);
}
}
}
};
因此需要恶补IVOA MOC document。主要理解MOC编码部分,此处暂时省略学习过程,后续补上。
坐标 => npix索引
在我的源数据中,只有坐标信息,没有npix索引,因此,需要有这么一个函数,它能将根据坐标信息求出对应的npix索引。在MOC的官方文档的3.2部分已经实现。
3.2 Basic HEALPix functions
For generating MOC from observations, or drawing them on the sphere, an HEALPix library is required. The basic functions available in all HEALPix libraries are the following :
npix
<=coordToNpix(order, alpha,delta)
:
returns the HEALPix cell index containing the alpha,delta coordinates.ArrayOfNpix
<=queryDisc(order, alpha,delta,radius)
:
returns the list of cell indices covering the (long,lat,radius) coneArrayOfNpix
<=queryPolygon(order, alpha1,delta1, ... alphaN,deltaN)
:
returns the list of cell indices covering the spherical polygon(alpha,delta)
<=NpixToCoord(order,npix)
:
returns the coordinates of the center of order/npix cell.ArrayOf(alpha,delta)
<=NpixToCorners(order,npix)
:
returns the corner coordinates of order/npix cell.
源码和实现的详细情况,请参考曲面细分HEALPix的官网 - Class MocQuery。