ISCE_INSAR/components/isceobj/Location/Peg.py

165 lines
4.7 KiB
Python

'''
Copyright 2010, by the California Institute of Technology.
ALL RIGHTS RESERVED.
United States Government Sponsorship acknowledged.
Any commercial use must be negotiated with the Office of
Technology Transfer at the California Institute of Technology.
This software may be subject to U.S. export control laws. By
accepting this software, the user agrees to comply with all applicable
U.S. export laws and regulations. User has the responsibility to obtain
export licenses, or other export authority as may be required before
exporting such information to foreign countries or providing access
to foreign persons.
'''
import math
from isceobj.Location.Coordinate import Coordinate
from iscesys.Component.Component import Component
HEADING = Component.Parameter(
'_heading',
public_name='HEADING',
default=0,
type=float,
mandatory=True,
intent='input',
doc=''
)
HEIGHT = Component.Parameter(
'_height',
public_name='HEIGHT',
default=0,
type=float,
mandatory=True,
intent='input',
doc=''
)
LATITUDE = Component.Parameter(
'_latitude',
public_name='LATITUDE',
default=0,
type=float,
mandatory=True,
intent='input',
doc=''
)
LONGITUDE = Component.Parameter(
'_longitude',
public_name='LONGITUDE',
default=0,
type=float,
mandatory=True,
intent='input',
doc=''
)
RADIUS_OF_CURVATURE = Component.Parameter(
'_radiusOfCurvature',
public_name='RADIUS_OF_CURVATURE',
default=0,
type=float,
mandatory=True,
intent='input',
doc=''
)
class PegFactory(object):
@staticmethod
def fromEllipsoid(coordinate=None,heading=None,ellipsoid=None):
"""
Create a Peg object from a coordinate, a heading, and an ellipsoid.
@param coordinate: an isceobj.Location.Coordinate object
@param heading: the heading in degrees
@param ellipsoid: an object of type isceobj.Planet.Ellipsoid
"""
radiusOfCurvature = 0.0
# Calculate the radius of curvature at the peg point
try:
radiusOfCurvature = ellipsoid.radiusOfCurvature([coordinate.latitude,coordinate.longitude,0.0],hdg=heading)
except AttributeError:
print("Object %s requires radiusOfCurvature() methods" % (ellipsoid.__class__))
return Peg(latitude=coordinate.latitude,longitude=coordinate.longitude, \
heading=heading,radiusOfCurvature=radiusOfCurvature)
class Peg(Coordinate,Component):
"""
A class to hold peg point information
"""
parameter_list = (
LATITUDE,
HEADING,
RADIUS_OF_CURVATURE,
HEIGHT,
LONGITUDE
)
family = 'peg'
def __init__(self,family=None,name=None,latitude=None,longitude=None,heading=None,radiusOfCurvature=None):
"""
@param latitude: the latitude in degrees
@param longitude: the longitude in degrees
@param heading: the heading in degrees
@param radiusOfCurvature: the radius of curvature at the specified coordinates
"""
#Rember always init the Component class first since it will call the _parameter method
#and set all defaults.
Component.__init__(self,family if family else self.__class__.family, name=name)
self._latitude = latitude
self._longitude = longitude
self._height = None
self._heading = heading
self._radiusOfCurvature = radiusOfCurvature
Coordinate.__init__(self,latitude=latitude,longitude=longitude,height=0.0)
def getHeading(self):
return self._heading
def setHeading(self, value):
self._heading = value
def setRadiusOfCurvature(self,rc):
self._radiusOfCurvature = rc
def getRadiusOfCurvature(self):
return self._radiusOfCurvature
def updateRadiusOfCurvature(self, ellipsoid):
'''Updates the radius of curvature assuming the coordinate and heading information is correct.'''
if self._radiusOfCurvature is not None:
print('Radius field is not empty. \n Forcefully updating the value.')
self._radiusOfCurvature = ellipsoid.radiusOfCurvature([self._latitude, self._longitude, 0.0], hdg=self._heading)
def __str__(self):
retstr = "Latitude: %s\n"
retlst = (self._latitude,)
retstr += "Longitude: %s\n"
retlst += (self._longitude,)
retstr += "Heading: %s\n"
retlst += (self._heading,)
retstr += "Radius of Curvature: %s\n"
retlst += (self._radiusOfCurvature,)
return retstr % retlst
heading = property(getHeading, setHeading)
radiusOfCurvature = property(getRadiusOfCurvature,setRadiusOfCurvature)