public abstract class Cylindrical extends GeoProj
Projection
,
Proj
,
Mercator
,
CADRG
,
Serialized FormModifier and Type | Field and Description |
---|---|
protected int |
half_world |
protected java.awt.Point |
world |
DATELINE, mercator, NORTH_POLE, NUM_DEFAULT_CIRCLE_VERTS, NUM_DEFAULT_GREAT_SEGS, pixelsPerMeter, planetPixelCircumference, planetPixelRadius, planetRadius, scaled_radius, SOUTH_POLE, XSCALE_THRESHOLD, XTHRESHOLD
Constructor and Description |
---|
Cylindrical(LatLonPoint center,
float scale,
int width,
int height)
Construct a cylindrical projection.
|
Modifier and Type | Method and Description |
---|---|
protected java.util.ArrayList<float[]> |
_forwardPoly(double[] rawllpts,
int ltype,
int nsegs,
boolean isFilled)
Forward project a raw float[] Poly.
|
protected java.util.ArrayList<float[]> |
_forwardPoly(float[] rawllpts,
int ltype,
int nsegs,
boolean isFilled)
Forward project a raw float[] Poly.
|
protected void |
computeParameters()
Called when some fundamental parameters change.
|
static void |
dumpPoly(double[] rawllpts,
float[] xs,
float[] ys) |
static void |
dumpPoly(float[] rawllpts,
float[] xs,
float[] ys) |
boolean |
forwardRaw(double[] rawllpts,
int rawoff,
float[] xcoords,
float[] ycoords,
boolean[] visible,
int copyoff,
int copylen)
Forward project a raw array of radian points.
|
boolean |
forwardRaw(float[] rawllpts,
int rawoff,
float[] xcoords,
float[] ycoords,
boolean[] visible,
int copyoff,
int copylen)
Forward project a raw array of radian points.
|
LatLonPoint |
getLowerRight()
Get the lower right (southeast) point of the projection.
|
java.lang.String |
getName()
Get the name string of the projection.
|
LatLonPoint |
getUpperLeft()
Get the upper left (northwest) point of the projection.
|
protected void |
init()
Called after the center and scale is set in setParams, but before the
scale is checked for legitimacy.
|
void |
pan(float Az)
Pan the map/projection.
|
java.lang.String |
toString()
Return string-ified description of this projection.
|
assertLatLonPoint, clone, doPolyDispatch, doPolyDispatch, forward, forward, forward, forward, forward, forwardArc, forwardArc, forwardArc, forwardCircle, forwardCircle, forwardCircle, forwardGreatPoly, forwardGreatPoly, forwardLine, forwardLine, forwardLLPoly, forwardPoly, forwardPoly, forwardRect, forwardRect, forwardRect, forwardRhumbPoly, forwardRhumbPoly, getCenter, getCenter, getGCTForProjection, getPlanetPixelCircumference, getPlanetPixelRadius, getPlanetRadius, getPPM, getReferenceLon, getScale, getUcuom, inverse, inverse, isComplicatedLineType, isPlotable, normalize_latitude, normalizeLatitude, normalizeLatitude, pan, setCenter, setCenter, setCenter, setPlanetRadius, setPPM, setUcuom, wrap_longitude, wrapLongitude, wrapLongitude, wrapLongitudeDeg
drawBackground, drawBackground, equals, forward, forward, forward, forwardLine, forwardPoly, forwardPoly, forwardRect, forwardShape, getHeight, getMaxScale, getMinScale, getProjectionID, getScale, getWidth, hashCode, inverse, inverse, isPlotable, makeClone, panE, panE, panN, panN, panNE, panNE, panNW, panNW, panS, panS, panSE, panSE, panSW, panSW, panW, panW, setCenter, setHeight, setMaxScale, setMinScale, setParms, setProjectionID, setScale, setWidth
finalize, getClass, notify, notifyAll, wait, wait, wait
isPlotable
protected transient java.awt.Point world
protected transient int half_world
public Cylindrical(LatLonPoint center, float scale, int width, int height)
center
- LatLonPoint center of projectionscale
- float scale of projectionwidth
- width of screenheight
- height of screenpublic java.lang.String toString()
toString
in class GeoProj
Projection.getProjectionID()
protected void init()
Proj
Make sure you call super.init() if you override this method.
protected void computeParameters()
Each projection will decide how to respond to this change. For instance, they may need to recalculate "constant" parameters used in the forward() and inverse() calls.
computeParameters
in class Proj
public void pan(float Az)
pan(180, c)
pan south
pan(-90, c)
pan west
pan(0, c)
pan north
pan(90, c)
pan east
pan
in interface Projection
pan
in class Proj
Az
- azimuth "east of north" in decimal degrees:
-180 <= Az <= 180
public LatLonPoint getUpperLeft()
Returns the upper left point (or closest equivalent) of the projection based on the center point and height and width of screen.
getUpperLeft
in interface Projection
getUpperLeft
in class Proj
public LatLonPoint getLowerRight()
Returns the lower right point (or closest equivalent) of the projection based on the center point and height and width of screen.
getLowerRight
in interface Projection
getLowerRight
in class Proj
public boolean forwardRaw(float[] rawllpts, int rawoff, float[] xcoords, float[] ycoords, boolean[] visible, int copyoff, int copylen)
It does populate a visible array indicating whether the points are visible on the projected view of the world.
forwardRaw
in interface Projection
forwardRaw
in class Proj
rawllpts
- array of lat,lon,... in radiansrawoff
- offset into rawllptsxcoords
- x coordinatesycoords
- y coordinatesvisible
- coordinates visible?copyoff
- offset into x,y,visible arrayscopylen
- number of coordinates (coordinate arrays should be at
least this long, rawllpts should be at least twice as long).public boolean forwardRaw(double[] rawllpts, int rawoff, float[] xcoords, float[] ycoords, boolean[] visible, int copyoff, int copylen)
It does populate a visible array indicating whether the points are visible on the projected view of the world.
forwardRaw
in interface Projection
forwardRaw
in class Proj
rawllpts
- array of lat,lon,... in radiansrawoff
- offset into rawllptsxcoords
- x coordinatesycoords
- y coordinatesvisible
- coordinates visible?copyoff
- offset into x,y,visible arrayscopylen
- number of coordinates (coordinate arrays should be at
least this long, rawllpts should be at least twice as long).protected java.util.ArrayList<float[]> _forwardPoly(float[] rawllpts, int ltype, int nsegs, boolean isFilled)
Implementation:
For the cylindrical "boxy" family of projections, we project all the
points, and check the horizontal (longitudinal) spacing between vertices
as we go. If the spacing is greater than half the world width
(circumference) in pixels, we assume that the segment has wrapped off one
edge of the screen and back onto the other side. (NOTE that our
restrictions on line segments mentioned in the Projection interface do
not allow for lines >= 180 degrees of arc or for the difference in
longitude between two points to be >= 180 degrees of arc).
For the case where a segment wraps offscreen, we keep track of the wrapping adjustment factor, and shift the points as we go. After projecting and shifting all the points, we have a single continuous x-y polygon. We then need to make shifted copies of this polygon for the maxima and minima wrap values calculated during the projection process. This allows us to see the discontinuous (wrapped) sections on the screen when they are drawn.
_forwardPoly
in class GeoProj
rawllpts
- float[] of lat,lon,lat,lon,... in RADIANS!ltype
- line type (straight, rhumbline, greatcircle)nsegs
- number of segments between vertices (or if < 0, generate
this value internally)isFilled
- filled poly? this is currently ignored for cylindrical
projections.protected java.util.ArrayList<float[]> _forwardPoly(double[] rawllpts, int ltype, int nsegs, boolean isFilled)
Implementation:
For the cylindrical "boxy" family of projections, we project all the
points, and check the horizontal (longitudinal) spacing between vertices
as we go. If the spacing is greater than half the world width
(circumference) in pixels, we assume that the segment has wrapped off one
edge of the screen and back onto the other side. (NOTE that our
restrictions on line segments mentioned in the Projection interface do
not allow for lines >= 180 degrees of arc or for the difference in
longitude between two points to be >= 180 degrees of arc).
For the case where a segment wraps offscreen, we keep track of the wrapping adjustment factor, and shift the points as we go. After projecting and shifting all the points, we have a single continuous x-y polygon. We then need to make shifted copies of this polygon for the maxima and minima wrap values calculated during the projection process. This allows us to see the discontinuous (wrapped) sections on the screen when they are drawn.
_forwardPoly
in class GeoProj
rawllpts
- float[] of lat,lon,lat,lon,... in RADIANS!ltype
- line type (straight, rhumbline, greatcircle)nsegs
- number of segments between vertices (or if < 0, generate
this value internally)isFilled
- filled poly? this is currently ignored for cylindrical
projections.public static final void dumpPoly(float[] rawllpts, float[] xs, float[] ys)
public static final void dumpPoly(double[] rawllpts, float[] xs, float[] ys)
public java.lang.String getName()
getName
in interface Projection
getName
in class Proj
Copyright (C) BBNT Solutions LLC; See http://openmap.bbn.com/ for details