在aladin-lite中实现MOC(多阶覆盖地图)

官方实例

链接- 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 NameDiscription
colorMOC的颜色
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) cone

  • ArrayOfNpix <= 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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值