|
|
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 double 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: double radianlat, sinlat, coslat; ! 82: double 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. Warning: coordinates are in degrees for ! 96: .I orient, ! 97: in radians for ! 98: .LR place . ! 99: .PP ! 100: .EX ! 101: .ta \n(xxu +\n(xxu +\n(xxu +\n(xxu +\n(xxu +\n(xxu ! 102: struct place pt; ! 103: int (*proj)() = mercator(); ! 104: double x, y; ! 105: .EE ! 106: .PP ! 107: .EX ! 108: orient(45.0, 30.0, 180.0); /* set coordinate rotation */ ! 109: .EE ! 110: .PP ! 111: .EX ! 112: . . . /* fill in the pt structure */ ! 113: normalize(&pt); /* rotate coordinates */ ! 114: if((*proj)(&pt, &x, &y) > 0) /* project onto x,y plane */ ! 115: plot(x, y); ! 116: .EE ! 117: .PP ! 118: The projection function ! 119: .B (*proj)() ! 120: returns 1 for a good point, ! 121: 0 for a point on a wrong ! 122: sheet (e.g. the back of the world in a perspective ! 123: projection), and \-1 for a point that is deemed ! 124: unplottable (e.g. points near the poles on a Mercator projection). ! 125: .PP ! 126: Scaling may be determined from the ! 127: .I x-y ! 128: coordinates of ! 129: selected points. ! 130: Latitudes and longitudes are measured in degrees for ! 131: ease of specification for ! 132: .I orient ! 133: and the projection generators ! 134: but in radians for ease of calculation ! 135: for ! 136: .I normalize ! 137: and ! 138: .I proj. ! 139: In either case ! 140: latitude is measured positive north of the equator, ! 141: and longitude positive west of Greenwich. ! 142: Radian longitude should be limited to the range ! 143: .if t .I \-\(*p\(<=lon<\(*p. ! 144: .if n .I -pi <= lon < pi. ! 145: .SS Projection generators ! 146: Equatorial projections centered on the Prime Meridian ! 147: (longitude 0). ! 148: Parallels are straight horizontal lines. ! 149: .br ! 150: .ns ! 151: .IP ! 152: .B mercator() ! 153: equally spaced straight meridians, conformal, ! 154: straight compass courses ! 155: .br ! 156: .B sinusoidal() ! 157: equally spaced parallels, ! 158: equal-area, same as ! 159: .I bonne(0) ! 160: .br ! 161: .B cylequalarea(lat0) ! 162: equally spaced straight meridians, equal-area, ! 163: true scale on ! 164: .I lat0 ! 165: .br ! 166: .B cylindrical() ! 167: central projection on tangent cylinder ! 168: .br ! 169: .B rectangular(lat0) ! 170: equally spaced parallels, equally spaced straight meridians, true scale on ! 171: .I lat0 ! 172: .br ! 173: .B gall(lat0) ! 174: parallels spaced stereographically on prime meridian, equally spaced straight ! 175: meridians, true scale on ! 176: .I lat0 ! 177: .br ! 178: .B mollweide() ! 179: (homalographic) equal-area, hemisphere is a circle ! 180: .PP ! 181: Azimuthal projections centered on the North Pole. ! 182: Parallels are concentric circles. ! 183: Meridians are equally spaced radial lines. ! 184: .br ! 185: .ns ! 186: .IP ! 187: .B azequidistant() ! 188: equally spaced parallels, ! 189: true distances from pole ! 190: .br ! 191: .B azequalarea() ! 192: equal-area ! 193: .br ! 194: .B gnomonic() ! 195: central projection on tangent plane, ! 196: straight great circles ! 197: .br ! 198: .B perspective(dist) ! 199: viewed along earth's axis ! 200: .I dist ! 201: earth radii from center of earth ! 202: .br ! 203: .B orthographic() ! 204: viewed from infinity ! 205: .br ! 206: .B stereographic() ! 207: conformal, projected from opposite pole ! 208: .br ! 209: .B laue() ! 210: .IR radius " = tan(2\(mu" colatitude ), ! 211: used in xray crystallography ! 212: .br ! 213: .B fisheye(n) ! 214: stereographic seen from just inside medium with refractive index n ! 215: .br ! 216: .B newyorker(r) ! 217: .IR radius " = log(" colatitude / r ): ! 218: extreme `fisheye' view from pedestal of radius ! 219: .I r ! 220: degrees ! 221: .PP ! 222: Polar conic projections symmetric about the Prime Meridian. ! 223: Parallels are segments of concentric circles. ! 224: Except in the Bonne projection, ! 225: meridians are equally spaced radial ! 226: lines orthogonal to the parallels. ! 227: .br ! 228: .ns ! 229: .IP ! 230: .B conic(lat0) ! 231: central projection on cone tangent at ! 232: .I lat0 ! 233: .br ! 234: .B simpleconic(lat0,lat1) ! 235: equally spaced parallels, true scale on ! 236: .I lat0 ! 237: and ! 238: .I lat1 ! 239: .br ! 240: .B lambert(lat0,lat1) ! 241: conformal, true scale on ! 242: .I lat0 ! 243: and ! 244: .I lat1 ! 245: .br ! 246: .B albers(lat0,lat1) ! 247: equal-area, true scale on ! 248: .I lat0 ! 249: and ! 250: .I lat1 ! 251: .br ! 252: .B bonne(lat0) ! 253: equally spaced parallels, equal-area, ! 254: parallel ! 255: .I lat0 ! 256: developed from tangent cone ! 257: .PP ! 258: Projections with bilateral symmetry about ! 259: the Prime Meridian ! 260: and the equator. ! 261: .br ! 262: .ns ! 263: .IP ! 264: .B polyconic() ! 265: parallels developed from tangent cones, ! 266: equally spaced along Prime Meridian ! 267: .br ! 268: .B aitoff() ! 269: equal-area projection of globe onto 2-to-1 ! 270: ellipse, based on ! 271: .I azequalarea ! 272: .br ! 273: .B lagrange() ! 274: conformal, maps whole sphere into a circle ! 275: .br ! 276: .B bicentric(lon0) ! 277: points plotted at true azimuth from two ! 278: centers on the equator at longitudes ! 279: .I \(+-lon0, ! 280: great circles are straight lines ! 281: (a stretched gnomonic projection) ! 282: .br ! 283: .B elliptic(lon0) ! 284: points are plotted at true distance from ! 285: two centers on the equator at longitudes ! 286: .I \(+-lon0 ! 287: .br ! 288: .B globular() ! 289: hemisphere is circle, ! 290: circular arc meridians equally spaced on equator, ! 291: circular arc parallels equally spaced on 0- and 90-degree meridians ! 292: .br ! 293: .B vandergrinten() ! 294: sphere is circle, ! 295: meridians as in ! 296: .I globular, ! 297: circular arc parallels resemble ! 298: .I mercator ! 299: .PP ! 300: Doubly periodic conformal projections. ! 301: .br ! 302: .ns ! 303: .IP ! 304: .B guyou() ! 305: W and E hemispheres are square ! 306: .br ! 307: .B square() ! 308: world is square with Poles ! 309: at diagonally opposite corners ! 310: .br ! 311: .B tetra() ! 312: map on tetrahedron with edge ! 313: tangent to Prime Meridian at S Pole, ! 314: unfolded into equilateral triangle ! 315: .br ! 316: .B hex() ! 317: world is hexagon centered ! 318: on N Pole, N and S hemispheres are equilateral ! 319: triangles ! 320: .PP ! 321: Miscellaneous projections. ! 322: .br ! 323: .ns ! 324: .IP ! 325: .B harrison(dist,angle) ! 326: oblique perspective from above the North Pole, ! 327: .I dist ! 328: earth radii from center of earth, looking ! 329: along the Date Line ! 330: .I angle ! 331: degrees off vertical ! 332: .br ! 333: .B trapezoidal(lat0,lat1) ! 334: equally spaced parallels, ! 335: straight meridians equally spaced along parallels, ! 336: true scale at ! 337: .I lat0 ! 338: and ! 339: .I lat1 ! 340: on Prime Meridian ! 341: .PP ! 342: Retroazimuthal projections. ! 343: At every point the angle between vertical and a straight line to ! 344: `Mecca', latitude ! 345: .I lat0 ! 346: on the prime meridian, ! 347: is the true bearing of Mecca. ! 348: .br ! 349: .ns ! 350: .IP ! 351: .B mecca(lat0) ! 352: equally spaced vertical meridians ! 353: .br ! 354: .B homing(lat0) ! 355: distances to `Mecca' are true ! 356: .PP ! 357: Maps based on the spheroid. ! 358: Of geodetic quality, these projections do not make sense ! 359: for tilted orientations. ! 360: For descriptions, see corresponding maps above. ! 361: .br ! 362: .ns ! 363: .IP ! 364: .B sp_mercator() ! 365: .br ! 366: .B sp_albers(lat0,lat1) ! 367: .SH "SEE ALSO ! 368: .IR map (7), ! 369: .IR map (5), ! 370: .IR plot (3) ! 371: .SH BUGS ! 372: Only one projection and one orientation can be active at a time. ! 373: .br ! 374: The west-longitude-positive convention ! 375: betrays Yankee chauvinism.
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.