### How to calculate distance from object to point on celestial sphere

• user5341

7 years ago

I'd like to calculate the distance (in arcsec) from the object nearest to ra='08h55m10s' dec='-7d14m42s' to that point on the celestial sphere.

I am actually having trouble identifying the object. I have python code to run a cone search:

``from astropy.coordinates import SkyCoordfrom astroquery.irsa import Irsaimport astropy.units as uloc = SkyCoord('08h55m10s',' -7d14m42s','icrs')table = Irsa.query_region(coordinates=loc,catalog="wise_allsky_4band_p3as_psd", radius= 1 * u.arcminute)print(table)``

This prints:

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

And this is where I am stumped. Which of these objects is nearest to the point? (I assume it must be the object in the zero index). And why? And how can I calculate the distance from the object to that point on the celestial sphere? Re *I assume it must be the object in the zero index*. That's a bad assumption. The object closest to your coordinates is the eight one (index=7) on your list, J085510.83-071442.5. That tool is doing a SQL query and the results are unsorted. Could you explain how you identified the object closest to the coordinates? see the formula in Rob Jeffries answer. It is the correct formula. Ok this clears my misunderstanding. Just to clarify, the smallest angular distance returned by the function is \$55.110833^{\circ}=198 398.999"\$, is this correct? No! Think about it. Your query asked for objects within 1 arc minute (60 arc seconds) of your given coordinates. The search found ten objects.

• 7 years ago

You can use `SkyCoord.separation` to compute the separation between coordinates:

``c1 = SkyCoord('08h55m10s',' -7d14m42s', frame='icrs')  # your coordsc2 = SkyCoord(133.782, -7.241, unit='deg', frame='icrs')  # first object in tablesep = 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 sep0d00m36.3947s``

The table you printed is truncated in between. If you enlarge your terminal emulator, you will be able to see a column called `dist`, which is the distance between your input coordinates and the corresponding object in arcsecs:

``print table['dist']       dist       ------------------36.42077299999999744.13854200000000151.987606999999997         52.83800349.93726699999999922.37269900000000153.621690000000001         12.375482          25.2717653.707365000000003``

Then the nearest object is the one whose separation is:

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

Or equivalently, the one whose index is:

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

The separation is calculated using the equation that @Rob Jeffries pointed out.