This is MiscZoneUTMCoord.m in view mode; [Download] [Up]
/*=========================== MiscZoneUTMCoord.m ============================*/ /* MiscZoneUTMCoord class contains and supports values representing locations in any zone of the world wide Universal Transverse Mercator coordinate system. Constants are from: Ordinance Survey Information Transverse Mercator Projection Constants, Formulae and Methods March 1983 Zones are 6 degrees apart starting at 3 degrees east of Longitude 180 and proceeding East. Greenwich is bracketed by Zone 30 and 31. Zone Numbering starts from 1 and ends at 60. DMA Release 0.8, Copyright @1993 by Genesis Project, Ltd. All Rights Reserved. For further information on terms and conditions see: Documentation/GISKit/Agreements-Legal-README HISTORY 26-Mar-93 Dale Amon at GPL Created. */ #import <MiscFoundation/MiscZoneUTMCoord.h> #import "_MiscError.h" @implementation MiscZoneUTMCoord static id gridZones[60]; /*===========================================================================*/ /* Class methods */ /*===========================================================================*/ /* Initialize the class */ + (void)initialize {[MiscZoneUTMCoord setVersion:MISC_ZONE_COORD_VERSION_ID]; return;} /*===========================================================================*/ /* Initialization methods. If we don't already have a UTM constants object for the specified zone, create one instance that all will share and that cannot be deleted. Zone's are 1-60. Zone 0 will be treated as Zone 1. A zone greater than 60 will be set to Zone 60. */ /*===========================================================================*/ /* internal method for setting up the constants from the zone */ + (unsigned int) makeZone: (unsigned int) utmzone { double longitude; char buf[20]; if (utmzone == 0) utmzone++; else if (utmzone > 60) utmzone = 60; if (!gridZones[utmzone]) { longitude = 6.0 * (double) utmzone - 3.0 - 180.0; sprintf(buf,"UTM Zone %2u",utmzone); gridZones[utmzone] = [[MiscUTMConstants allocWithZone:[self zone]] initGridName: [NSString stringWithCString:buf] trueOrigin: 0.0 : longitude inGrid: 500000.0 : 0.0 onSphere: 6378388.000 : 6356911.946 centralMeridianScaling: 0.9996]; [gridZones[utmzone] setProtected]; } return utmzone; } /*---------------------------------------------------------------------------*/ /* DESIGNATED INITIALIZER */ -initDescription: (NSString *) txt zone: (unsigned int) utmzone { zoneNumber = [MiscZoneUTMCoord makeZone: utmzone]; return [super initDescription: txt constants: gridZones[utmzone]]; } /*---------------------------------------------------------------------------*/ /* Block the designated initializer of our parent class */ -initDescription: (NSString *) txt constants: anObject { MISC_ERROR_BAIL; return self; } /*===========================================================================*/ /* Archive methods */ /*===========================================================================*/ - (void)encodeWithCoder:(NSCoder *)aCoder { [super encodeWithCoder:aCoder]; [aCoder encodeValueOfObjCType:"i" at:(int*)&zoneNumber]; } /*---------------------------------------------------------------------------*/ - (id)initWithCoder:(NSCoder *)aDecoder { self = [super initWithCoder:aDecoder]; [aDecoder decodeValueOfObjCType:"i" at:(int*)&zoneNumber]; [constants setUnprotected]; [constants release]; [MiscZoneUTMCoord makeZone: zoneNumber]; return self; } @end
These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.