|
|
1.1 ! root 1: .TH PROJ 3X bowell ! 2: .CT 2 graphics math ! 3: .br ! 4: .SH NAME ! 5: orient, normalize \- map projections ! 6: .SH SYNOPSIS ! 7: .B orient(lat, lon, rot) ! 8: .br ! 9: .B float lat, lon, rot; ! 10: .PP ! 11: .B normalize(p) ! 12: .br ! 13: .B struct place *p; ! 14: .SH DESCRIPTION ! 15: Users of ! 16: .IR map (7) ! 17: may skip to the description of `Projection generators' ! 18: below. ! 19: .PP ! 20: The functions ! 21: .I orient ! 22: and ! 23: .I normalize ! 24: plus a collection of map projection generators ! 25: are loaded by ! 26: option ! 27: .BR -lmap ! 28: of ! 29: .IR ld (1). ! 30: Most of them ! 31: calculate maps for a spherical earth. ! 32: Each map projection is available in one standard ! 33: form, into which data must be normalized ! 34: for transverse ! 35: or nonpolar projections. ! 36: .PP ! 37: Each standard projection is displayed with the Prime ! 38: Meridian (longitude 0) being a straight vertical line, along which North ! 39: is up. ! 40: The orientation of nonstandard projections is specified by ! 41: .I orient. ! 42: Imagine a transparent gridded sphere around the globe. ! 43: First turn the overlay about the North Pole ! 44: so that the Prime Meridian (longitude 0) ! 45: of the overlay coincides with meridian ! 46: .I lon ! 47: on the globe. ! 48: Then tilt the North Pole of the ! 49: overlay along its Prime Meridian to latitude ! 50: .I lat ! 51: on the globe. ! 52: Finally again turn the ! 53: overlay about its `North Pole' so ! 54: that its Prime Meridian coincides with the previous position ! 55: of (the overlay's) meridian ! 56: .I rot. ! 57: Project the desired map in ! 58: the standard form appropriate to the overlay, but presenting ! 59: information from the underlying globe. ! 60: It is not useful to use ! 61: .I orient ! 62: without using ! 63: .IR normalize . ! 64: .PP ! 65: .I Normalize ! 66: converts latitude-longitude coordinates on the globe ! 67: to coordinates on the overlaid grid. ! 68: The coordinates and their sines and cosines ! 69: are input to ! 70: .I normalize ! 71: in a ! 72: .B place ! 73: structure. ! 74: Transformed coordinates and their sines and cosines ! 75: are returned in the same structure. ! 76: .PP ! 77: .EX ! 78: .nr xx \w'12345678' ! 79: .ta \n(xxu +\n(xxu +\n(xxu +\n(xxu +\n(xxu +\n(xxu ! 80: struct place { ! 81: float radianlat, sinlat, coslat; ! 82: float radianlon, sinlon, coslon; ! 83: }; ! 84: .EE ! 85: .PP ! 86: The projection generators ! 87: return a pointer to a function that converts normalized coordinates ! 88: to ! 89: .I x-y ! 90: coordinates for the desired map, or ! 91: 0 if the required projection ! 92: is not available. ! 93: The returned function is exemplified by ! 94: .I proj ! 95: in this example: ! 96: .PP ! 97: .EX ! 98: .ta \n(xxu +\n(xxu +\n(xxu +\n(xxu +\n(xxu +\n(xxu ! 99: struct place pt; ! 100: int (*proj)() = mercator(); ! 101: float x, y; ! 102: .EE ! 103: .PP ! 104: .EX ! 105: orient(45.0, 30.0, 180.0); /* set coordinate rotation */ ! 106: .EE ! 107: .PP ! 108: .EX ! 109: . . . /* fill in the pt structure */ ! 110: normalize(&pt); /* rotate coordinates */ ! 111: if((*proj)(&pt, &x, &y) > 0) /* project onto x,y plane */ ! 112: plot(x, y); ! 113: .EE ! 114: .PP ! 115: The projection function ! 116: .B (*proj)() ! 117: returns 1 for a good point, ! 118: 0 for a point on a wrong ! 119: sheet (e.g. the back of the world in a perspective ! 120: projection), and \-1 for a point that is deemed ! 121: unplottable (e.g. points near the poles on a Mercator projection). ! 122: .PP ! 123: Scaling may be determined from the ! 124: .I x-y ! 125: coordinates of ! 126: selected points. ! 127: Latitudes and longitudes are measured in degrees for ! 128: ease of specification for ! 129: .I orient ! 130: and the projection generators ! 131: but in radians for ease of calculation ! 132: for ! 133: .I normalize ! 134: and ! 135: .I proj. ! 136: In either case ! 137: latitude is measured positive north of the equator, ! 138: and longitude positive west of Greenwich. ! 139: Radian longitude should be limited to the range ! 140: .if t .I \-\(*p\(<=lon<\(*p. ! 141: .if n .I -pi <= lon < pi. ! 142: .SS Projection generators ! 143: Equatorial projections centered on the Prime Meridian ! 144: (longitude 0). ! 145: Parallels are straight horizontal lines. ! 146: .br ! 147: .ns ! 148: .IP ! 149: .B mercator() ! 150: equally spaced straight meridians, conformal, ! 151: straight compass courses ! 152: .br ! 153: .B sinusoidal() ! 154: equally spaced parallels, ! 155: equal-area, same as ! 156: .I bonne(0) ! 157: .br ! 158: .B cylequalarea(lat0) ! 159: equally spaced straight meridians, equal-area, ! 160: true scale on ! 161: .I lat0 ! 162: .br ! 163: .B cylindrical() ! 164: central projection on tangent cylinder ! 165: .br ! 166: .B rectangular(lat0) ! 167: equally spaced parallels, equally spaced straight meridians, true scale on ! 168: .I lat0 ! 169: .br ! 170: .B gall(lat0) ! 171: parallels spaced stereographically on prime meridian, equally spaced straight ! 172: meridians, true scale on ! 173: .I lat0 ! 174: .br ! 175: .B mollweide() ! 176: (homalographic) equal-area, hemisphere is a circle ! 177: .PP ! 178: Azimuthal projections centered on the North Pole. ! 179: Parallels are concentric circles. ! 180: Meridians are equally spaced radial lines. ! 181: .br ! 182: .ns ! 183: .IP ! 184: .B azequidistant() ! 185: equally spaced parallels, ! 186: true distances from pole ! 187: .br ! 188: .B azequalarea() ! 189: equal-area ! 190: .br ! 191: .B gnomonic() ! 192: central projection on tangent plane, ! 193: straight great circles ! 194: .br ! 195: .B perspective(dist) ! 196: viewed along earth's axis ! 197: .I dist ! 198: earth radii from center of earth ! 199: .br ! 200: .B orthographic() ! 201: viewed from infinity ! 202: .br ! 203: .B stereographic() ! 204: conformal, projected from opposite pole ! 205: .br ! 206: .B laue() ! 207: .IR radius " = tan(2\(mu" colatitude ), ! 208: used in xray crystallography ! 209: .br ! 210: .B fisheye(r) ! 211: .IR radius " = log(" colatitude / r ): ! 212: .I New Yorker ! 213: map from viewing pedestal of radius ! 214: .I r ! 215: degrees ! 216: .PP ! 217: Polar conic projections symmetric about the Prime Meridian. ! 218: Parallels are segments of concentric circles. ! 219: Except in the Bonne projection, ! 220: meridians are equally spaced radial ! 221: lines orthogonal to the parallels. ! 222: .br ! 223: .ns ! 224: .IP ! 225: .B conic(lat0) ! 226: central projection on cone tangent at ! 227: .I lat0 ! 228: .br ! 229: .B simpleconic(lat0,lat1) ! 230: equally spaced parallels, true scale on ! 231: .I lat0 ! 232: and ! 233: .I lat1 ! 234: .br ! 235: .B lambert(lat0,lat1) ! 236: conformal, true scale on ! 237: .I lat0 ! 238: and ! 239: .I lat1 ! 240: .br ! 241: .B albers(lat0,lat1) ! 242: equal-area, true scale on ! 243: .I lat0 ! 244: and ! 245: .I lat1 ! 246: .br ! 247: .B bonne(lat0) ! 248: equally spaced parallels, equal-area, ! 249: parallel ! 250: .I lat0 ! 251: developed from tangent cone ! 252: .PP ! 253: Projections with bilateral symmetry about ! 254: the Prime Meridian ! 255: and the equator. ! 256: .br ! 257: .ns ! 258: .IP ! 259: .B polyconic() ! 260: parallels developed from tangent cones, ! 261: equally spaced along Prime Meridian ! 262: .br ! 263: .B aitoff() ! 264: equal-area projection of globe onto 2-to-1 ! 265: ellipse, based on ! 266: .I azequalarea ! 267: .br ! 268: .B lagrange() ! 269: conformal, maps whole sphere into a circle ! 270: .br ! 271: .B bicentric(lon0) ! 272: points plotted at true azimuth from two ! 273: centers on the equator at longitudes ! 274: .I \(+-lon0, ! 275: great circles are straight lines ! 276: (a stretched gnomonic projection) ! 277: .br ! 278: .B elliptic(lon0) ! 279: points are plotted at true distance from ! 280: two centers on the equator at longitudes ! 281: .I \(+-lon0 ! 282: .br ! 283: .B globular() ! 284: hemisphere is circle, ! 285: circular arc meridians equally spaced on equator, ! 286: circular arc parallels equally spaced on 0- and 90-degree meridians ! 287: .br ! 288: .B vandergrinten() ! 289: sphere is circle, ! 290: meridians as in ! 291: .I globular, ! 292: circular arc parallels resemble ! 293: .I mercator ! 294: .PP ! 295: Doubly periodic conformal projections. ! 296: .br ! 297: .ns ! 298: .IP ! 299: .B guyou() ! 300: W and E hemispheres are square ! 301: .br ! 302: .B square() ! 303: world is square with Poles ! 304: at diagonally opposite corners ! 305: .br ! 306: .B tetra() ! 307: map on tetrahedron with edge ! 308: tangent to Prime Meridian at S Pole, ! 309: unfolded into equilateral triangle ! 310: .br ! 311: .B hex() ! 312: world is hexagon centered ! 313: on N Pole, N and S hemispheres are equilateral ! 314: triangles ! 315: .PP ! 316: Miscellaneous projections. ! 317: .br ! 318: .ns ! 319: .IP ! 320: .B harrison(dist,angle) ! 321: oblique perspective from above the North Pole, ! 322: .I dist ! 323: earth radii from center of earth, looking ! 324: along the Date Line ! 325: .I angle ! 326: degrees off vertical ! 327: .br ! 328: .B trapezoidal(lat0,lat1) ! 329: equally spaced parallels, ! 330: straight meridians equally spaced along parallels, ! 331: true scale at ! 332: .I lat0 ! 333: and ! 334: .I lat1 ! 335: on Prime Meridian ! 336: .PP ! 337: Retroazimuthal projections. ! 338: At every point the angle between vertical and a straight line to ! 339: `Mecca', latitude ! 340: .I lat0 ! 341: on the prime meridian, ! 342: is the true bearing of Mecca. ! 343: .br ! 344: .ns ! 345: .IP ! 346: .B mecca(lat0) ! 347: equally spaced vertical meridians ! 348: .br ! 349: .B homing(lat0) ! 350: distances to `Mecca' are true ! 351: .PP ! 352: Maps based on the spheroid. ! 353: Of geodetic quality, these projections do not make sense ! 354: for tilted orientations. ! 355: For descriptions, see corresponding maps above. ! 356: .br ! 357: .ns ! 358: .IP ! 359: .B sp_mercator() ! 360: .br ! 361: .B sp_albers(lat0,lat1) ! 362: .SH "SEE ALSO ! 363: .IR map (7), ! 364: .IR map (5), ! 365: .IR plot (3) ! 366: .SH BUGS ! 367: Only one projection and one orientation can be active at a time. ! 368: .br ! 369: The west-longitude-positive convention ! 370: betrays Yankee chauvinism.
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.