SingleSphericalPolygon¶
- class spherical_geometry.polygon.SingleSphericalPolygon(points, inside=None)[source]¶
Bases:
objectPolygons are represented by both a set of points (in Cartesian (x, y, z) normalized on the unit sphere), and an inside point. The inside point is necessary, because both the inside and outside of the polygon are finite areas on the great sphere, and therefore we need a way of specifying which is which.
- Parameters:
- pointsAn Nx3 array of (x, y, z) triples in vector space
These points define the boundary of the polygon.
It may contain zero points, in which it defines the null polygon. It may not contain one, two or three points. Four points are needed to define a triangle, since the polygon must be closed.
- insideAn (x, y, z) triple, optional
This point must be inside the polygon. If not provided, an interior point will be calculated
Attributes Summary
Get the inside point of the polygon.
The points defining the polygon.
Methods Summary
area()Returns the area of the polygon on the unit sphere, in steradians.
contains_arc(a, b)Returns
Trueif the polygon fully encloses the arc given by a and b.contains_lonlat(lon, lat[, degrees])Determines if this
SingleSphericalPolygoncontains a givencontains_point(point)Determines if this
SingleSphericalPolygoncontains a given point.contains_radec(lon, lat[, degrees])Determines if this
SingleSphericalPolygoncontains a givenconvex_hull(points)Create a new
SingleSphericalPolygonfrom the convex hull of a list of points using the Graham Scan algorithmcopy()draw(m, **plot_args)Draws the polygon in a matplotlib.Basemap axes.
from_cone(lon, lat, radius[, degrees, steps])Create a new
SingleSphericalPolygonfrom a cone (otherwise known as a "small circle") defined using (lon, lat, radius).from_lonlat(lon, lat[, center, degrees])Create a new
SingleSphericalPolygonfrom a list of (longitude, latitude) points.from_radec(lon, lat[, center, degrees])Create a new
SingleSphericalPolygonfrom a list of (longitude, latitude) points.from_wcs(fitspath[, steps, crval])Create a new
SingleSphericalPolygonfrom the footprint of a FITS WCS specification.intersection(other)Return a new
SphericalPolygonthat is the intersection of self and other.intersects_arc(a, b)Determines if this
SingleSphericalPolygonintersects or contains the given arc.intersects_poly(other)Determines if this
SingleSphericalPolygonintersects anotherSingleSphericalPolygon.Compute the inverse (complement) of a single polygon
Return True if the points in this polygon are in clockwise order.
Iterate over all base polygons that make up this multi-polygon set.
overlap(other)Returns the fraction of self that is overlapped by other.
Convert
SingleSphericalPolygonfootprint to longitude and latitutde.to_radec()Convert
SingleSphericalPolygonfootprint to longitude and latitutde.union(other)Return a new
SphericalPolygonthat is the union of self and other.Attributes Documentation
- inside¶
Get the inside point of the polygon.
- points¶
The points defining the polygon. It is an Nx3 array of (x, y, z) vectors. The polygon will be explicitly closed, i.e., the first and last points are the same.
Methods Documentation
- area()[source]¶
Returns the area of the polygon on the unit sphere, in steradians.
The area is computed using a generalization of Girard’s Theorem.
if \(\theta\) is the sum of the internal angles of the polygon, and n is the number of vertices, the area is:
\[S = \theta - (n - 2) \pi\]The area can be negative if the points on the polygon are ordered counter-clockwise. Take the absolute value if that is not desired.
- contains_lonlat(lon, lat, degrees=True)[source]¶
Determines if this
SingleSphericalPolygoncontains a given longitude and latitude.- Parameters:
- lon, lat: Longitude and latitude. Must be scalars.
degrees : bool, optional
- If `True`, (default) *lon* and *lat* are in decimal degrees,
- otherwise in radians.
- Returns:
- containsbool
Returns
Trueif the polygon contains the given point.
- contains_point(point)[source]¶
Determines if this
SingleSphericalPolygoncontains a given point.- Parameters:
- pointan (x, y, z) triple
The point to test.
- Returns:
- containsbool
Returns
Trueif the polygon contains the given point.
- contains_radec(lon, lat, degrees=True)¶
Determines if this
SingleSphericalPolygoncontains a given longitude and latitude.- Parameters:
- lon, lat: Longitude and latitude. Must be scalars.
degrees : bool, optional
- If `True`, (default) *lon* and *lat* are in decimal degrees,
- otherwise in radians.
- Returns:
- containsbool
Returns
Trueif the polygon contains the given point.
- classmethod convex_hull(points)[source]¶
Create a new
SingleSphericalPolygonfrom the convex hull of a list of points using the Graham Scan algorithm- Parameters:
- points: A list of points on the unit sphere
- Returns:
- polygon
SingleSphericalPolygonobject
- polygon
- copy()¶
- draw(m, **plot_args)[source]¶
Draws the polygon in a matplotlib.Basemap axes.
- Parameters:
- mBasemap axes object
- **plot_argsAny plot arguments to pass to basemap
- classmethod from_cone(lon, lat, radius, degrees=True, steps=16)[source]¶
Create a new
SingleSphericalPolygonfrom a cone (otherwise known as a “small circle”) defined using (lon, lat, radius).The cone is not represented as an ideal circle on the sphere, but as a series of great circle arcs. The resolution of this conversion can be controlled using the steps parameter.
- Parameters:
- lon, latfloat scalars
This defines the center of the cone
- radiusfloat scalar
The radius of the cone
- degreesbool, optional
If
True, (default) lon, lat and radius are in decimal degrees, otherwise in radians.- stepsint, optional
The number of steps to use when converting the small circle to a polygon.
- Returns:
- polygon
SingleSphericalPolygonobject
- polygon
- classmethod from_lonlat(lon, lat, center=None, degrees=True)[source]¶
Create a new
SingleSphericalPolygonfrom a list of (longitude, latitude) points.- Parameters:
- lon, lat1-D arrays of the same length
The vertices of the polygon in longitude and latitude.
- center(lon, lat) pair, optional
A point inside of the polygon to define its inside.
- degreesbool, optional
If
True, (default) lon and lat are in decimal degrees, otherwise in radians.
- Returns:
- polygon
SingleSphericalPolygonobject
- polygon
- classmethod from_radec(lon, lat, center=None, degrees=True)¶
Create a new
SingleSphericalPolygonfrom a list of (longitude, latitude) points.- Parameters:
- lon, lat1-D arrays of the same length
The vertices of the polygon in longitude and latitude.
- center(lon, lat) pair, optional
A point inside of the polygon to define its inside.
- degreesbool, optional
If
True, (default) lon and lat are in decimal degrees, otherwise in radians.
- Returns:
- polygon
SingleSphericalPolygonobject
- polygon
- classmethod from_wcs(fitspath, steps=1, crval=None)[source]¶
Create a new
SingleSphericalPolygonfrom the footprint of a FITS WCS specification.This method requires having astropy installed.
- Parameters:
- fitspathpath to a FITS file,
astropy.io.fits.Header, orastropy.wcs.WCS Refers to a FITS header containing a WCS specification.
- stepsint, optional
The number of steps along each edge to convert into polygon edges.
- fitspathpath to a FITS file,
- Returns:
- polygon
SingleSphericalPolygonobject
- polygon
- intersection(other)[source]¶
Return a new
SphericalPolygonthat is the intersection of self and other.If the intersection is empty, a
SphericalPolygonwith zero subpolyons will be returned.- Parameters:
- Returns:
- polygon
SphericalPolygonobject
- polygon
See also
Notes
For implementation details, see the
graphmodule.
- intersects_arc(a, b)[source]¶
Determines if this
SingleSphericalPolygonintersects or contains the given arc.
- intersects_poly(other)[source]¶
Determines if this
SingleSphericalPolygonintersects anotherSingleSphericalPolygon.This method is much faster than actually computing the intersection region between two polygons.
- Parameters:
- Returns:
- intersectsbool
Returns
Trueif this polygon intersects the other polygon.
Notes
The algorithm proceeds as follows:
Determine if any single point of one polygon is contained within the other.
Deal with the case where only the edges overlap as in:
: o---------o : o----+---------+----o : | | | | : o----+---------+----o : o---------o
In this case, an edge from one polygon must cross an edge from the other polygon.
- is_clockwise()[source]¶
Return True if the points in this polygon are in clockwise order.
The normal vector to the two arcs containing a vertes points outward from the sphere if the angle is clockwise and inward if the angle is counter-clockwise. The sign of the inner product of the normal vector with the vertex tells you this. The polygon is ordered clockwise if the vertices are predominantly clockwise and counter-clockwise if the reverse.
- iter_polygons_flat()¶
Iterate over all base polygons that make up this multi-polygon set.
- overlap(other)[source]¶
Returns the fraction of self that is overlapped by other.
Let self be a and other be b, then the overlap is defined as:
\[\frac{S_{a \cap b}}{S_a}\]- Parameters:
- Returns:
- fracfloat
The fraction of self that is overlapped by other.
- to_lonlat()[source]¶
Convert
SingleSphericalPolygonfootprint to longitude and latitutde.- Returns:
- lon, latlist of float
List of lon and lat in degrees corresponding to
points.
- to_radec()¶
Convert
SingleSphericalPolygonfootprint to longitude and latitutde.- Returns:
- lon, latlist of float
List of lon and lat in degrees corresponding to
points.
- union(other)[source]¶
Return a new
SphericalPolygonthat is the union of self and other.- Parameters:
- Returns:
- polygon
SphericalPolygonobject
- polygon
See also
Notes
For implementation details, see the
graphmodule.