const is_ra_dec = 1; const crpix = [11924.5, 16791.5]; const crval = [53.12278110761878, -27.80516045555555]; const cdmatrix = [[-8.331872359085824e-06, 8.484786942893281e-13], [7.247535904753022e-13, 8.331873001310441e-06]]; urlParam = function(name){ // Parse parameters from window.location,, // e.g., .../index.html?zoom=8, // urlParam(zoom) = 8, var results = new RegExp('[\?&]' + name + '=([^&#]*)').exec(window.location.href); if (results==null){ return null; } else{ return decodeURI(results[1]) || 0; } } pixToSky = function(xy){ // Convert from zero-index pixel to sky coordinate assuming // simple North-up WCS if (xy.hasOwnProperty('lng')){ var dx = xy.lng - crpix[0] + 1; var dy = xy.lat - crpix[1] + 1; } else { var dx = xy[0] - crpix[0] + 1; var dy = xy[1] - crpix[1] + 1; } var dra = dx * cdmatrix[0][0]; var ddec = dy * cdmatrix[1][1]; // some catalogs are stored in image coords x/y, not ra/dec. When // `is_ra_dec`==1 we are doing calculation in ra/dec when `is_ra_dec`==0 // then we're working in image coords and so multiply by 0 so // cos(0)==1 var ra = crval[0] + dra / Math.cos(crval[1]/180*3.14159 * is_ra_dec); var dec = crval[1] + ddec; return [ra, dec]; } skyToPix = function(rd){ // Convert from sky to zero-index pixel coordinate assuming // simple North-up WCS var dx = (rd[0] - crval[0]) * Math.cos(crval[1]/180*3.14159 * is_ra_dec); var dy = (rd[1] - crval[1]); var x = crpix[0] - 1 + dx / cdmatrix[0][0]; var y = crpix[1] - 1 + dy / cdmatrix[1][1]; return [x,y]; } skyToLatLng = function(rd){ // Convert from sky to Leaflet.latLng coordinate assuming // simple North-up WCS var xy = skyToPix(rd); return L.latLng(xy[1], xy[0]); } panToSky = function(rd, zoom, map){ // Pan map to celestial coordinates var ll = skyToLatLng(rd) map.setZoom(zoom); map.panTo(ll, zoom); //console.log('pan to: ' + rd + ' / ll: ' + ll.lng + ',' + ll.lat); } panFromUrl = function(map){ // Pan map based on ra/dec/[zoom] variables in location bar var ra = urlParam('ra'); var dec = urlParam('dec'); var zoom = urlParam('zoom') || map.getMinZoom(); if ((ra !== null) & (dec !== null)) { panToSky([ra,dec], zoom, map); } else { // Pan to crval panToSky(crval, zoom, map); } } updateLocationBar = function(){ var rd = pixToSky(map.getCenter()); //console.log(rd); var params = 'ra=' + rd[0].toFixed(7); params += '&dec=' + rd[1].toFixed(7); params += '&zoom=' + map.getZoom(); //console.log(params); var param_url = window.location.href.split('?')[0] + '?' + params; window.history.pushState('', '', param_url); }