.. include:: references.txt .. _astropy-coordinates-transforming: Transforming between Systems **************************** `astropy.coordinates` supports a rich system for transforming coordinates from one frame to another. While common astronomy frames are built into Astropy, the transformation infrastructure is dynamic. This means it allows users to define new coordinate frames and their transformations. The topic of writing your own coordinate frame or transforms is detailed in :ref:`astropy-coordinates-design`, and this section is focused on how to *use* transformations. The full list of built-in coordinate frames, the included transformations, and the frame names are shown as a (clickable) graph in the `~astropy.coordinates` API documentation. The recommended method of transformation is shown below:: >>> import astropy.units as u >>> from astropy.coordinates import SkyCoord >>> gc = SkyCoord(l=0*u.degree, b=45*u.degree, frame='galactic') >>> gc.fk5 # doctest: +FLOAT_CMP While this appears to be ordinary attribute-style access, it is actually syntactic sugar for the more general :meth:`~astropy.coordinates.SkyCoord.transform_to` method, which can accept either a frame name, class, or instance:: >>> from astropy.coordinates import FK5 >>> gc.transform_to('fk5') # doctest: +FLOAT_CMP >>> gc.transform_to(FK5) # doctest: +FLOAT_CMP >>> gc.transform_to(FK5(equinox='J1980.0')) # doctest: +FLOAT_CMP As a convenience, it is also possible to use a |SkyCoord| object as the frame in :meth:`~astropy.coordinates.SkyCoord.transform_to`. This allows for putting one coordinate object into the frame of another:: >>> sc = SkyCoord(ra=1.0, dec=2.0, unit='deg', frame=FK5, equinox='J1980.0') >>> gc.transform_to(sc) # doctest: +FLOAT_CMP Additionally, some coordinate frames (including `~astropy.coordinates.FK5`, `~astropy.coordinates.FK4`, and `~astropy.coordinates.FK4NoETerms`) support "self transformations," meaning the *type* of frame does not change, but the frame attributes do. Any example is precessing a coordinate from one equinox to another in an equatorial frame. This is done by passing ``transform_to`` a frame class with the relevant attributes, as shown below. Note that these frames use a default equinox if you do not specify one:: >>> fk5c = SkyCoord('02h31m49.09s', '+89d15m50.8s', frame=FK5) >>> fk5c.equinox