我看了看并找到了解决这个问题的办法,但我什么都没有。
我通过matplotlib生成矩形FITS图像,然后使用AstroPy(或PyFITS)将WCS坐标应用于它们。我的图像是银河纬度和经度,因此适合我的地图的标题关键字应为GLON-CAR
和GLAT-CAR
(对于笛卡尔投影)。我查看other maps在SAO DS9中使用相同的地图投影,并且坐标工作得很好......网格应该是完全正交的。可以找到FITS标准预测here.
但是当我生成我的地图时,坐标根本不是笛卡儿。这是我的地图(左)和大致相同区域(右)的另一个参考地图的并排比较。两者都在FITS标题中列出了GLON-CAR
和GLAT-CAR
,但是在SAO DS9中查看时很复杂(请注意,坐标网格是SAO DS9根据FITS标题中的数据生成的,或者至少存储在FITS文件中的某个地方):
这是有问题的,因为如果投影错误,坐标分配算法会为每个像素分配不正确的坐标。
有没有人遇到这个,或者知道可能是什么问题?
我已经尝试过应用其他投影(只是为了看看它们在SAO DS9中的表现)并且它们表现得很好......但我的笛卡尔和墨卡托投影并没有像他们应该的那样提出正交网格。
我无法相信这会是AstroPy中的一个错误,但是我找不到任何其他原因......除非我在标题中的参数格式不正确,但我仍然看不出它会如何导致我正在经历的问题。或者你会推荐使用其他东西吗? (我已经看过matplotlib底图,但在我的计算机上工作时遇到了一些麻烦)。
我的标题代码如下:
from __future__ import division
import numpy as np
from astropy.io import fits as pyfits # or use 'import pyfits, same thing'
#(lots of code in between: defining variables and simple calculations...
#probably not relevant)
header['BSCALE'] = (1.00000, 'REAL = TAPE*BSCALE + BZERO')
header['BZERO'] = (0.0)
header['BUNIT'] = ('mag ', 'UNIT OF INTENSITY')
header['BLANK'] = (-100.00, 'BLANK VALUE')
header['CRVAL1'] = (glon_center, 'REF VALUE POINT DEGR') #FIRST COORDINATE OF THE CENTER
header['CRPIX1'] = (center_x+0.5, 'REF POINT PIXEL LOCATION') ## REFERENCE X PIXEL
header['CTYPE1'] = ('GLON-CAR', 'COORD TYPE : VALUE IS DEGR')
header['CDELT1'] = (-glon_length/x_length, 'COORD VALUE INCREMENT WITH COUNT DGR') ### degrees per pixel
header['CROTA1'] = (0, 'CCW ROTATION in DGR')
header['CRVAL2'] = (glat_center, 'REF VALUE POINT DEGR') #Y COORDINATE OF THE CENTER
header['CRPIX2'] = (center_y+0.5, 'REF POINT PIXEL LOCATION') #Y REFERENCE PIXEL
header['CTYPE2'] = ('GLAT-CAR', 'COORD TYPE: VALUE IS DEGR') # WAS CAR OR TAN
header['CDELT2'] = (glat_length/y_length, 'COORD VALUE INCREMENT WITH COUNT DGR') #degrees per pixel
header['CROTA2'] = (rotation, 'CCW ROTATION IN DEGR') #NEGATIVE ROTATES CCW around origin (bottom left).
header['DATAMIN'] = (data_min, 'Minimum data value in the file')
header['DATAMAX'] = (data_max, 'Maximum data value in the file')
header['TELESCOP'] = ("Produced from 2MASS")
pyfits.update(filename, map_data, header)
感谢您提供的任何帮助。
答案 0 :(得分:7)
在-CAR
投影的现代定义中(来自Calabretta等人),GLON-CAR
/ GLAT-CAR
投影仅在CRVAL2
设置为零时才生成直线网格。如果CRVAL2
不为零,则网格是弯曲的(这应该与Astropy无关)。您可以通过调整CRVAL2
和CRPIX2
来尝试解决此问题,以便CRVAL2
为零。这有帮助吗?
为了澄清我的意思,请在上面的代码之后,在写出文件之前尝试:
header['CRPIX2'] -= header['CRVAL2'] / header['CDELT2']
header['CRVAL2'] = 0.
运气好吗?
如果你看一下'引用的标题'你看过的文件,你会发现那里CRVAL2
为零。需要明确的是,CRVAL2
不为零,错误,但网格不再是直线的。