map – digitized map formats


Files used by map(7) are a sequence of structures of the form:

struct {
	signed char patchlatitude;
	signed char patchlongitude;
	short n;
	union {
		struct {
			short latitude;
			short longitude;
		} point[n];
		struct {
			short latitude;
			short longitude;
			struct {
				signed char latdiff;
				signed char londiff;
			} point[–n];
		} highres;
	} segment;

where short stands for 16-bit integers and there is no padding within or between structs. Shorts are stored in little-endian order, low byte first. To assure portability, map accesses them bytewise.

Fields patchlatitude and patchlongitude tell to what 10-degree by 10-degree patch of the earth’s surface a segment belongs. Their values range from –9 to 8 and from –18 to 17, respectively, and indicate the coordinates of the southeast corner of the patch in units of 10 degrees.

Each segment of |n| points is connected; consecutive segments are not necessarily related. Latitude and longitude are measured in units of 0.0001 radian. If n is negative, then differences to the first and succeeding points are measured in units of 0.00001 radian. Latitude is counted positive to the north and longitude positive to the west.

The patches are ordered lexicographically by patchlatitude then patchlongitude. A printable index to the first segment of each patch in a file named data is kept in an associated file named data.x. Each line of an index file contains patchlatitude, patchlongitude and the byte position of the patch in the map file. Both the map file and the index file are ordered by patch latitude and longitude.


The data comes from the World Data Bank I and II and U.S. Government sources: the Census Bureau, Geological Survey, and CIA.