PROJ.4
[6] code that is included within oce.
(For a temporary alternative, see mapPlot(longitude, latitude, longitudelim, latitudelim,
grid=TRUE, bg, fill=NULL, type='l', axes=TRUE, drawBox=TRUE, showHemi=TRUE,
polarCircle=0, lonlabel=NULL, latlabel=NULL, sides=NULL,
projection="+proj=moll", parameters=NULL, orientation=NULL,
tissot=FALSE, trim=TRUE, debug=getOption("oceDebug"), ...)
data
that contains items named longitude
and
latitude
(e.g. an coastline-class
NULL
to avoid
filling. Filling is inaccurate for projections, e.g. yielding as
misshaped Antarticic continent or oceans filled instead of land. In
such cases, it makes sense par("plot")
.plot.coastline
. Using these arguments permits reasonably
simple customization. proj4
package, i.e. starting
with +proj=
. (See mapTissot
to
plot Tissot indicatrices, i.e. ellipses at grid intersection points,
which indicate map distortion.xlim
etc
to reproduce a scale exactly between two plots.projection
, parameters
and orientation
in the terminology employed by the mapproj
package. In that case, the calculations are done using that package (if it
is installed). Unfortunately, this method can yield poor results, because
inverse-projection is not handled by mapproj
. For this reason, this
capability is likely to be removed in a future version of oce
. It is
only provided in the present version to give users time to alter their
code. It will be removed sometime in the year 2015.mapproject
in the mapproj
package.
Those who choose the (recommended) PROJ.4 system [5,6] have a wide range of
projections to choose from. These are listed in the table given below. For
example, set projection="+proj=aea"
to select the Albers equal area
projection. The projection list consists of all the PROJ.4 (version 4.9.1) projections
that have inverses, minus a few that cause problems:
alsk
overdraws coastlineWorld
, and is a niche projection for Alaska;
calcofi
is not a real projection, but rather a coordinate system;
gs48
overdraws coastlineWorld
, and is a niche projection for the USA;
gs50
overdraws coastlineWorld
, and is a niche projection for the USA;
gstmerc
overdraws coastlineWorld
;
isea
causes segmentation faults on OSX systems;
krovak
overdraws coastlineWorld
, and is a niche projection for the Czech Republic;
labrd
returns NaN
for most of the world, and is a niche projection for Madagascar;
lee_os
overdraws coastlineWorld
;
and
nzmg
overdraws coastlineWorld
.
The information in the table is reformatted from the output of the unix
command proj -lP
, where proj
is provided by version 4.9.0 of
the PROJ.4 system. Most of the arguments listed have default values. In
addition, most projections can handle arguments lon_0
and
lat_0
, for shifting the reference point, although in some cases
shifting the longitude can yield poor filling of coastlines.
Further details of the projections and the controlling arguments are
provided at several websites, because PROJ.4 has been incorporated into
many software systems; a good starting point for learning is [6].
See
aea
lat_1
, lat_2
Azimuthal equidistant aeqd
lat_0
, guam
Aitoff aitoff
-
Mod. stererographics of Alaska alsk
-
Bipolar conic of western hemisphere bipc
-
Bonne Werner bonne
lat_1
Cassini cass
-
Central cylindrical cc
-
Equal area cylindrical cea
lat_ts
Collignon collg
-
Craster parabolic Putnins P4 crast
-
Eckert I eck1
-
Eckert II eck2
-
Eckert III eck3
-
Eckert IV eck4
-
Eckert V eck5
-
Eckert VI eck6
-
Equidistant cylindrical plate (Caree) eqc
lat_ts
, lat_0
Equidistant conic eqdc
lat_1
, lat_2
Euler euler
lat_1
, lat_2
Extended transverse Mercator etmerc
lat_ts
, lat_0
Fahey fahey
-
Foucaut fouc
-
Foucaut sinusoidal fouc_s
-
Gall stereographic gall
-
Geostationary satellite view geos
h
General sinusoidal series gn_sinu
m
, n
Gnomonic gnom
-
Goode homolosine goode
-
Hatano asymmetrical equal area hatano
-
HEALPix healpix
-
rHEALPix rhealpix
north_square
, south_square
Interrupted Goode homolosine igh
-
International map of the world polyconic imw_p
lat_1
, lat_2
, lon_1
Kavraisky V kav5
-
Kavraisky VII kav7
-
Lambert azimuthal equal area laea
-
Lat/long lonlat
-
Lat/long latlon
-
Lambert conformal conic lcc
lat_1
, lat_2
, lat_0
Lambert conformal conic alternative lcca
lat_0
Lambert equal area conic leac
lat_1
, south
Loximuthal loxim
Space oblique for Landsat lsat
lsat
, path
McBryde-Thomas flat-polar sine, no. 1 mbt_s
McBryde-Thomas flat-polar sine, no. 2 mbt_fps
McBride-Thomas flat-polar parabolic mbtfpp
McBryde-Thomas flat-polar quartic mbtfpq
McBryde-Thomas flat-polar sinusoidal mbtfps
Mercator merc
lat_ts
Miller oblated stereographic mil_os
Miller cylindrical mill
Mollweide moll
Murdoch I murd1
lat_1
, lat_2
Murdoch II murd2
lat_1
, lat_2
murdoch III murd3
lat_1
, lat_2
Natural earth natearth
Nell nell
Nell-Hammer nell_h
Near-sided perspective nsper
h
New Zealand map grid nzmg
General oblique transformation ob_tran
o_proj
, o_lat_p
, o_lon_p
, o_alpha
, o_lon_c
o_lat_c
, o_lon_1
, o_lat_1
, o_lon_2
, o_lat_2
Oblique cylindrical equal area ocea
lat_1
, lat_2
, lon_1
, lon_2
Oblated equal area oea
n
, m
, theta
Oblique Mercator omerc
alpha
, gamma
, no_off
, lonc
, lon_1
,
lat_1
, lon_2
, lat_2
Orthographic ortho
-
Perspective conic pconic
lat_1
, lat_2
Polyconic American poly
-
Putnins P1 putp1
-
Putnins P2 putp2
-
Putnins P3 putp3
-
Putnins P3' putp3p
-
Putnins P4' putp4p
-
Putnins P5 putp5
-
Putnins P5' putp5p
-
Putnins P6 putp6
-
Putnins P6' putp6p
-
Quartic authalic qua_aut
-
Quadrilateralized spherical cube qsc
-
Robinson robin
-
Roussilhe stereographic rouss
-
Sinusoidal aka Sanson-Flamsteed sinu
-
Swiss. oblique Mercator somerc
-
Stereographic stere
lat_ts
Oblique stereographic alternative sterea
-
Gauss-schreiber transverse Mercator gstmerc
lat_0
, lon_0
, k_0
Transverse cylindrical equal area tcea
-
Tissot tissot
lat_1
, lat_2
Transverse Mercator tmerc
-
Two point equidistant tpeqd
lat_1
, lon_1
, lat_2
, lon_2
Tilted perspective tpers
tilt
, azi
, h
Universal polar stereographic ups
south
Urmaev flat-polar sinusoidal urmfps
n
Universal transverse Mercator utm
zone
, south
van der Grinten I vandg
-
Vitkovsky I vitk1
lat_1
, lat_2
Wagner I Kavraisky VI wag1
-
Wagner II wag2
-
Wagner III wag3
lat_ts
Wagner IV wag4
-
Wagner V wag5
-
Wagner VI wag6
-
Werenskiold I weren
-
Winkel I wink1
lat_ts
Winkel Tripel wintri
lat_ts
}
MERIT
,
SGS85
, GRS80
, IAU76
, airy
, APL4.9
,
NWL9D
, mod_airy
, andrae
, aust_SA
, GRS67
,
bessel
, bess_nam
, clrk66
, clrk80
,
clrk80ign
, CPM
, delmbr
, engelis
,
evrst30
, evrst48
, evrst56
, evrst69
,
evrstSS
, fschr60
, fschr60m
, fschr68
,
helmert
, hough
, intl
, krass
, kaula
,
lerch
, mprts
, new_intl
, plessis
, SEasia
,
walbeck
, WGS60
, WGS66
, WGS72
, WGS84
, and
sphere
(the default). For example, use projection="+proj=aea
+ellps=WGS84"
for an Albers Equal Area projection using the most
recent of the World Geodetic System model. It is unlikely that changing the
ellipse will have a visible effect on plotted material at the plot scale
appropriate to most oceanographic applications.WGS84
,
GGRS87
, Greek_Geodetic_Reference_System_1987
, NAD83
,
North_American_Datum_1983
, NAD27
,
North_American_Datum_1927
, potsdam
, Potsdam
,
carthage
, Carthage
, hermannskogel
,
Hermannskogel
, ire65
, Ireland
, nzgd49
,
New
, OSGB36
, and Airy
. It is unlikely that changing
the datum will have a visible effect on plotted material at the plot scale
appropriate to most oceanographic applications.projection="+proj=moll"
useful for world-wide
plots, ortho
for hemispheres viewed from the equator, stere
for polar views, lcc
for wide meridional ranges in mid latitudes,
and merc
in limited-area cases where angle preservation is
important.mapPlot
tries to draw
axes along a box containing the map, instead of trying to find spots along
the ``edge'' of the map at which to put longitude and latitude labels.
This design choice greatly simplifies the coding effort, freeing up time to
work on issues regarded as more pressing. Chief among those issues are (a)
the occurrence of horizontal lines in maps that have prime meridians
(b) inaccurate filling of land regions that (again) occur with shifted
meridians and (c) inaccurate filling of Antarctica in some projections.
Generally, issues are tackled first for commonly used projections, such as
those used in the examples.projection
argument, projections are best
specified in the notation used by project()
in the proj4
package, although (at least temporarily) it is also possible to specify it
in the notation of mapproject()
in the mapproj
package.
Once a projection is set, the many functions that add more material to a
map will use that same projection.
Further details on map projections are provided by [1,11], an exhaustive
treatment that includes many illustrations, an overview of the history of
the topic, and some notes on the strengths and weaknesses of the various
formulations. See especially pages 2 through 7, which define terms and
provide recommendations. Reference [2] is also useful,
especially regarding datum shifts; [3] and [4] are less detailed and
perhaps better for novices. See [8] for a gallery of projections. 2. Natural Resources Canada
3. Wikipedia page
4. Radical Cartography website
5. The PROJ.4
website is
6. PROJ.4
projection details are at
7. All the PROJ.4
(version 4.9.0) schemes that have inverses are
used, except for calcofi
(which is not really a projection scheme),
isea
(which causes R to segmentation-fault on a world coastline test
case), and labrd
which a nich local projection that has an error
making it return NaN
for the entire earth coastline.
8. A gallery of plots with the PROJ.4-style projections is provided at
9. A fascinating historical perspective is provided by Snyder, J. P. (1993). Two thousand years of map projections. University of Chicago Press.
mapPoints
, lines
with mapLines
, text with mapText
, polygons with
mapPolygon
, images with mapImage
, and scale
bars with mapScalebar
. Points on a map may be determined
with mouse clicks using mapLocator
. Great circle paths can
be calculated with geodGc
. See [8] for a demonstration of
the available map projections (with graphs).library(oce)
data(coastlineWorld)
# Example 1.
# Mollweide ([1] page 54) is an equal-area projection that works well
# for whole-globe views, below shown in a Pacific-focus view.
# Note that filling is not employed when the prime meridian
# is shifted, because this causes a problem with Antarctica
par(mfrow=c(2,1), mar=c(3, 3, 1, 1))
mapPlot(coastlineWorld, projection="+proj=moll", fill='gray')
mtext("Mollweide", adj=1)
mapPlot(coastlineWorld, projection="+proj=moll +lon_0=-180")
mtext("Mollweide", adj=1)
par(mfrow=c(1,1))
# Example 2.
# Orthographic projections resemble a globe, making them attractive for
# non-technical use, but they are neither conformal nor equal-area, so they
# are somewhat limited for serious use on large scales. See Section 20 of
# [1]. Note that filling is not employed because it causes a problem with
# Antarctica.
par(mar=c(3, 3, 1, 1))
mapPlot(coastlineWorld, projection="+proj=ortho +lon_0=-180")
mtext("Orthographic", adj=1)
# Example 3.
# The Lambert conformal conic projection is an equal-area projection
# recommended by [1], page 95, for regions of large east-west extent
# away from the equator, here illustrated for the USA and Canada.
par(mar=c(3, 3, 1, 1))
mapPlot(coastlineWorld, longitudelim=c(-130,-55), latitudelim=c(35,60),
projection="+proj=lcc +lat_0=30 +lat_1=60 +lon_0=-100", fill='gray')
mtext("Lambert conformal", adj=1)
# Example 4.
# The stereographic projection [1], page 120, is conformal, used
# below for an Arctic view with a Canadian focus. Note the trick of going
# past the pole: the second latitudelim value is 180 minus the first, and the
# second longitudelim is 180 plus the first; this uses image points "over"
# the pole.
par(mar=c(3, 3, 1, 1))
mapPlot(coastlineWorld, longitudelim=c(-130,50), latitudelim=c(70,110),
proj="+proj=stere +lat_0=90 +lon_0=-135", fill='gray')
mtext("Stereographic", adj=1)
# Example 5.
# Spinning globe: create PNG files that can be assembled into a movie
png("539B-%03d.png")
lons <- seq(360, 0, -15)
ilon <- seq_along(lons)
par(mar=rep(0, 4))
for (i in ilon) {
p <- paste("+proj=ortho +lat_0=30 +lon_0=", lons[i], sep="")
if (i == 1) {
mapPlot(coastlineWorld, projection=p, col="blue", lwd=1.4)
xlim <- par("usr")[1:2]
ylim <- par("usr")[3:4]
} else {
mapPlot(coastlineWorld, projection=p, col="blue", lwd=1.4,
xlim=xlim, ylim=ylim, xaxs="i", yaxs="i")
}
}
dev.off()
Run the code above in your browser using DataLab