[Spice_discussion] Solar zenith angle and azimuth
Joe Knapp
jmknapp at gmail.com
Thu Jul 1 04:19:28 PDT 2010
Excellent description--thanks. I was working on the same problem.
Question: to get the apparent elevation (zenith angle), is a parallax
correction to the elevation needed? Refraction?
Joe
On Wed, Jun 30, 2010 at 6:46 PM, Nat Bachman
<nathaniel.bachman at jpl.nasa.gov> wrote:
>
> Dear Dr. Aye,
>
> Hello, this is from Nat Bachman. I'm a member of
> the NAIF team headed by Chuck Acton.
>
> SPICE does not contain a subroutine to
> compute solar azimuth and elevation (zenith angle
> is the complement of elevation). There are two basic
> approaches to the solution:
>
> 1) If you have a "small" number of surface points
> of interest, use the SPICE utility PINPOINT
> to create an SPK file providing locations of
> these points and a frame kernel providing
> topocentric frame specifications. Then
> proceed as you've described.
>
> PINPOINT is available from the utilities area
> of the NAIF web site at URL
>
> http://naif.jpl.nasa.gov/naif/utilities.html
>
> I've also included below some notes on running PINPOINT
> to generate SPICE kernels for surface points on
> the *Earth*. Most of the discussion applies to Mars,
> but for Mars you won't need the high-precision
> Earth PCK; instead you'd use the either the generic
> NAIF text PCK to provide Mars orientation, or you'd
> use a PCK of your own choosing (perhaps a standard
> one used by your project).
>
> 2) If you have too many surface points for (1)
> to be practical, create at run time the
> necessary surface-point-to-sun vectors
> and topocentric frames for each surface point.
>
> The surface point to sun vectors can be created by
> subtracting the respective Mars-centered surface
> vectors from the Mars to sun vector; this is valid
> as long as the aberration corrections don't have to
> exact (and for most purposes they need not be).
> Reception-style light time and stellar aberration
> corrections should be used for a realistic approximation
> of the apparent direction to the Sun. Here Mars is
> the observer, the Sun is the target, and the epoch
> is that at which photons are received at the surface
> point. Note that if the illumination at the surface point is
> being observed by a remote sensing instrument, this epoch
> may be the epoch of photon reception at the instrument minus
> one way light time between the instrument and the surface
> point.
>
> Each topocentric frame can be represented by a
> 3x3 matrix that converts vectors from the body-fixed
> frame associated with the central body
> to the topocentric frame associated
> with the surface point of interest.
>
> For a given surface location, the desired
> transformation matrix has as its rows the basis vectors
> of the associated topocentric frame. For all locations
> except at or extremely near the poles, these vectors
> are (listed in the order of computation):
>
> [Here x denotes the cross product]
>
> Row 3: (Z-axis) the unit zenith direction vector
> expressed in the central body's body-fixed,
> body centered reference frame (IAU_MARS, in
> your case).
> Row 2: (Y-axis) the zenith direction x the body's north
> pole direction (0,0,1), scaled to unit length.
> Row 1: (X-axis) Y x Z, scaled to unit length.
>
> At the poles this definition goes singular.
>
> It's usually convenient to call the SPICE routine UCRSS to
> obtain a unit-length cross product.
>
> Usually (and it is done this way in PINPOINT) the zenith direction
> is taken as the direction of increasing altitude in the planetodetic
> coordinate system; this direction is parallel to the normal to
> the central body's reference spheroid that passes through the
> surface point.
>
> One has to be a bit careful here because the surface
> point might not lie on the reference spheroid. If it does, call
> SURFNM to obtain the surface normal direction. If it doesn't,
> call RECGEO to find the planetodetic coordinates of
> the surface point, next find the point at the same planetodetic
> lon/lat but at zero altitude; convert those coordinates back to
> the rectangular system, and finally call SURFNM to obtain
> the surface normal, which is also the desired zenith direction.
> Note that none of the above works for a truly triaxial reference
> ellipsoid.
>
> The radii of the reference spheroid can be obtained by calling
> either of the SPICE routines BODVCD or BODVRD; one must first
> have loaded a PCK file that contains the radii.
>
> With the matrix in hand, left-multiplying the surface-sun vector
> transforms it to the corresponding topocentric frame.
>
> Please let us know if you have further questions.
>
> Best regards,
>
> -Nat
>
>
>
>
> Using an Earth surface site as an ephemeris object
> ==================================================
>
> Note: a list of references is included at the bottom of this
> discussion.
>
> Before creating new kernels, it may be worthwhile
> to check the NAIF web site to see whether
> the location of interest is covered by kernels
> already provided by NAIF:
>
> http://naif.jpl.nasa.gov/naif/data.html
>
> If the data you need are not available, you can create
> the kernels you need by following these steps:
>
> 1) Decide on a name and ID code for the site of
> interest. In order to enable use of the name in SPICE
> API calls, create a text kernel that establishes the
> name/ID code mapping. Applications that require this
> mapping should load this kernel at run time.
> This is done by kernel variable definitions of the
> form
>
> NAIF_BODY_NAME += 'MY_OBJECT_NAME'
> NAIF_BODY_CODE += nnnnnn
>
> where 'MY_OBJECT_NAME' is replaced by the actual
> name enclosed in single quotes, and nnnnnn is replaced
> by an integer ID code that doesn't conflict with any
> other you or other consumers of your new kernels
> will be using. The kernel must start with the \begindata
> control sequence (this is supposed to read "backslash
> begindata" but might not appear that way, depending on
> your e-mail client).
>
> The kernel including these assignments must conform
> to the SPICE text kernel format; see the "Intro to Kernels"
> tutorial cited under "References" for details.
>
> See the NAIF_IDS Required Reading or tutorial for further details.
>
>
> 2) Use the SPICE utility PINPOINT to create an SPK file
> for the site. PINPOINT is available from the NAIF
> web site. The PINPOINT user's guide is available from
> the web site as well; also, you can make PINPOINT
> print out the user's guide text by typing
>
> pinpoint -help
>
> See the URL
>
> http://naif.jpl.nasa.gov/naif/utilities.html
>
> to obtain a PINPOINT executable for your platform.
>
> Create a "definitions file" for your site (see PINPOINT User's Guide).
> Normally the reference frame for your site location data should
> be ITRF93. For *very* low-accuracy work, the frame IAU_EARTH
> can be used. Note that inertially referenced site locations
> can be in error by as much as ~6 km if IAU_EARTH is used.
> If your site location data are in a frame that is substantially
> different from ITRF93, you may need to transform them to the
> ITRF93 frame before providing them to PINPOINT.
>
> Run PINPOINT to create an SPK file for the site.
>
> Note that PINPOINT can create one SPK file providing data for
> multiple sites.
>
>
> 3) If you need to compute geometry relative to a topocentric
> (local level) reference frame centered at the surface site, you'll
> also need to create a topocentric frame kernel for that site.
> The easiest way to do this is to use PINPOINT's topocentric
> frame kernel generation feature. See the PINPOINT User's guide for
> details.
>
> To see examples topocentric frame specifications, see
> the NAIF topocentric frame kernel for the DSN stations:
>
> ftp://naif.jpl.nasa.gov/pub/naif/generic_kernels/
> fk/stations/earth_topo_050714.tf
>
> See the comments in this frame kernel (it's a text file) for details
> concerning its contents.
>
> Having defined a topocentric frame centered at the surface site,
> you can use the name of this frame in calls to any SPICE routine
> that requires a frame name as input.
>
>
> 4) Obtain one or more binary Earth PCK kernels to provide
> Earth orientation data. These kernels can be obtained from
> the NAIF ftp site:
>
> ftp://naif.jpl.nasa.gov/pub/naif/generic_kernels/pck
>
> See the aareadme.txt file there for a discussion of the types
> of binary Earth PCKs that are available.
>
> Once you have the SPK kernel, name/ID code mapping kernel,
> and binary Earth PCK file loaded these into your application,
> your application can call the SPK API routines (such as SPKEZR
> or SPKPOS) to compute position or state vectors using the surface
> site as an observer or target.
>
>
> 5) Validate your kernels.
>
> - Look up the Earth-surface site vector in the ITRF93 frame using
> SPKEZR. Check position and velocity against your input data.
>
> - Check the topocentric frame kernel, if you've created one. If this
> frame has been specified to be consistent with the frames NAIF
> defines for the DSN, the +X axis should point north, the +Y axis
> west, and the +Z axis "up."
>
> Note that the axes of the topocentric frame, expressed relative to
> ITRF93, can be picked off from the rows of the ITRF93-to-topocentric
> frame transformation matrix returned by the SPICE routine PXFORM.
> The SPICE routines UCRSS (unit cross product) and VSEP (3-d vector
> angular separation) can be helpful for vector comparisons.
>
> - You also can obtain the outward normal vector on the Earth reference
> ellipsoid at your site's longitude and geodetic latitude; this vector
> should be parallel to your topocentric frame's +Z axis. To do this,
> convert the site location to geodetic coordinates using RECGEO; then
> use the resulting latitude and longitude and an altitude value of 0
> as inputs to GEOREC to produce a point on the reference ellipsoid at
> the same latitude and longitude of your site. Call the SPICE routine
> SURFNM to obtain the outward normal vector at this point. **Note: unless
> your site has an altitude of 0, don't input its Cartesian coordinates
> directly into SURFNM; the resulting computation will produce a normal
> vector for a different ellipsoid than the one you want to use.**
>
> After following these steps, you can get the state of a target ephemeris
> object,
> as seen from the surface site, using just one SPICE call: SPKEZR returns the
> observer-target state vector, expressed in a user-specified reference frame,
> at a
> specified observation time. (If velocity is not needed, SPKPOS can be called
> instead.)
>
> Target azimuth and elevation can be obtained using a second SPICE call:
> after a call to SPKEZR or SPKPOS, where the reference frame used is the
> topocentric
> frame associated with the surface site, a subsequent call to RECLAT yields
> the elevation and longitude of the target in that frame. Negating longitude
> yields azimuth.
>
> One note of caution: a variety of "local level" and "azimuth"
> definitions exist. The instructions above are compatible with
> definitions used by NAIF. Check these against your requirements;
> some adjustments might be needed for your application.
>
>
> References
> ==========
>
> PINPOINT User's Guide
> http://naif.jpl.nasa.gov/naif/utilities.html
> (Follow links for your platform)
>
>
> NAIF_IDs tutorial
>
> ftp://naif.jpl.nasa.gov/pub/naif/toolkit_docs/Tutorials/
> pdf/individual_docs/06_naif_ids.pdf
>
>
> Text kernel tutorial
> ftp://naif.jpl.nasa.gov/pub/naif/toolkit_docs/Tutorials/
> pdf/individual_docs/08_intro_to_kernels.pdf
>
>
> PCK tutorials
>
> ftp://naif.jpl.nasa.gov/pub/naif/toolkit_docs/Tutorials/
> pdf/individual_docs/20_pck.pdf
>
> ftp://naif.jpl.nasa.gov/pub/naif/toolkit_docs/Tutorials/
> pdf/individual_docs/25_lunar-earth_pck-fk.pdf
>
>
> SPICE Toolkit Required Reading
>
> http://naif.jpl.nasa.gov/naif/documentation.html
> (Follow links for your platform)
>
> Also included in your SPICE Toolkit under /doc
>
>
> SPICE binary PCK programming Lesson
>
> ftp://naif.jpl.nasa.gov/pub/naif/toolkit_docs/Lessons/
>
>
> PCK file aareadme.txt file on NAIF ftp site:
>
> ftp://naif.jpl.nasa.gov/pub/naif/generic_kernels/pck/aareadme.txt
>
>
> DSN station topocentric frame kernel on NAIF ftp site:
>
> ftp://naif.jpl.nasa.gov/pub/naif/generic_kernels/fk/stations/
> earth_topo_050714.tf
>
>
> Comments from DSN station SPK file on NAIF ftp site
>
> ftp://naif.jpl.nasa.gov/pub/naif/generic_kernels/spk/stations/
> earthstns_itrf93_050714.cmt
>
>>
> Dear all,
>
> is it possible with SPICE to calculate on an arbitrary coordinate on the
> Mars surface at an arbitrary epoch to calculate the local sun zenith angle
> and the azimuth of the sun?
>
> I searched around a lot in the SPICE docs, but it seems that one always
> needs an observer frame, but I was hoping that this calculations are
> possible without having to write my own frame kernel.
> I am aware that I need to define my local frame at my surface point on Mars,
> but I am not sure how.
> Any help or hint for the right spot in the docs would be appreciated.
>
> Best regards,
> Michael
> _______________________________________________
> Spice_discussion mailing list
> Spice_discussion at naif.jpl.nasa.gov
> http://naif.jpl.nasa.gov/mailman/listinfo/spice_discussion
> _______________________________________________
> Spice_discussion mailing list
> Spice_discussion at naif.jpl.nasa.gov
> http://naif.jpl.nasa.gov/mailman/listinfo/spice_discussion
>
More information about the Spice_discussion
mailing list