Cómo calcular la distancia de un objeto a un punto en la esfera celeste

Me gustaría calcular la distancia (en segundos de arco) desde el objeto más cercano a ra='08h55m10s' dec='-7d14m42s' hasta ese punto de la esfera celeste.

De hecho, tengo problemas para identificar el objeto. Tengo código Python para ejecutar una búsqueda de cono:

from astropy.coordinates import SkyCoord
from astroquery.irsa import Irsa
import astropy.units as u

loc = SkyCoord('08h55m10s',' -7d14m42s','icrs')
table = Irsa.query_region(coordinates=loc,catalog="wise_allsky_4band_p3as_psd", radius= 1 * u.arcminute)
print(table)

Esto imprime:

designation        ra     dec   ...       angle         id
                  deg     deg   ...        deg            
------------------- ------- ------- ... ------------------ ---
J085507.72-071428.4 133.782  -7.241 ... 291.84348499999999   0
J085511.22-071522.2 133.797  -7.256 ... 155.64652000000001   1
J085508.65-071354.0 133.786  -7.232 ... 337.39116000000001   2
J085509.94-071534.8 133.791  -7.260 ... 180.87171799999999   3
J085511.28-071528.1 133.797  -7.258 ... 157.48249000000001   4
J085509.47-071502.9 133.789  -7.251 ...         200.548395   5
J085513.60-071440.0 133.807  -7.244 ... 87.949470000000005   6
J085510.83-071442.5 133.795  -7.245 ... 92.439341999999996   7
J085511.39-071427.5 133.797  -7.241 ...          55.110833   8
J085513.30-071420.4 133.805  -7.239 ... 66.332006000000007   9

Y aquí es donde estoy perplejo. ¿Cuál de estos objetos está más cerca del punto? (Supongo que debe ser el objeto en el índice cero). ¿Y por qué? ¿Y cómo puedo calcular la distancia del objeto a ese punto en la esfera celeste?

Re Supongo que debe ser el objeto en el índice cero . Esa es una mala suposición. El objeto más cercano a sus coordenadas es el octavo (índice = 7) en su lista, J085510.83-071442.5. Esa herramienta está haciendo una consulta SQL y los resultados no están ordenados.
¿Podría explicar cómo identificó el objeto más cercano a las coordenadas?
vea la fórmula en la respuesta de Rob Jeffries. Es la fórmula correcta.
Ok, esto aclara mi malentendido. Solo para aclarar, la distancia angular más pequeña devuelta por la función es 55.110833 = 198 398.999 " , ¿es esto correcto?
¡No! Piénsalo. Su consulta solicitó objetos dentro de 1 minuto de arco (60 segundos de arco) de sus coordenadas dadas. La búsqueda encontró diez objetos.

Respuestas (2)

La distancia angular más corta entre dos puntos de la esfera celeste se mide a lo largo de un gran círculo que pasa por ambos.

La ecuación que usa su programa es

porque θ = pecado d 1 pecado d 2 + porque d 1 porque d 2 porque ( α 1 α 2 ) ,
donde ( α 1 , d 1 ) y ( α 2 , d 2 ) son la ascensión recta y la declinación de los dos puntos en el cielo (expresados ​​en grados, luego convertidos a radianes).

En términos de salida de su programa, es más difícil ayudar, especialmente porque no ha dado la salida completa. Las primeras tres columnas deben explicarse por sí mismas: las columnas 2 y 3 son solo las coordenadas expresadas en grados. Supongo que la tercera columna desde la última, que no ha mostrado, da la separación entre su objeto y los objetos del catálogo y que la penúltima columna es el ángulo que forma el gran círculo entre los puntos en el cielo. Eso parece correcto porque el cuarto objeto en la lista tiene casi el mismo RA que su objeto de entrada pero está a 67 segundos de arco hacia el sur (es decir, a 180 grados).

Puede utilizar SkyCoord.separationpara calcular la separación entre coordenadas:

c1 = SkyCoord('08h55m10s',' -7d14m42s', frame='icrs')  # your coords
c2 = SkyCoord(133.782, -7.241, unit='deg', frame='icrs')  # first object in table
sep = c1.separation(c2)

print c1
<SkyCoord (ICRS): ra=133.791666667 deg, dec=-7.245 deg>
print c2
<SkyCoord (ICRS): ra=133.782208333 deg, dec=-7.24123611111 deg>
print sep
0d00m36.3947s

La tabla que imprimió está truncada en el medio. Si amplía su emulador de terminal, podrá ver una columna llamada dist, que es la distancia entre sus coordenadas de entrada y el objeto correspondiente en segundos de arco:

print table['dist']
       dist       
------------------
36.420772999999997
44.138542000000001
51.987606999999997
         52.838003
49.937266999999999
22.372699000000001
53.621690000000001
         12.375482
          25.27176
53.707365000000003

Entonces el objeto más cercano es aquel cuya separación es:

print table['dist'].min()
12.375482

O equivalentemente, aquel cuyo índice es:

print table['dist'].argmin()
7

La separación se calcula usando la ecuación que señaló @Rob Jeffries.