diff --git a/dist/mgrs.js b/dist/mgrs.js index e754197..e0eda66 100644 --- a/dist/mgrs.js +++ b/dist/mgrs.js @@ -32,6 +32,9 @@ var O = 79; // O var V = 86; // V var Z = 90; // Z +var ZDLS = "CDEFGHJKLMNPQRSTUVWX"; +exports.ZDLS = ZDLS; + /** * Conversion of lat/lon to MGRS. * @@ -94,6 +97,39 @@ function radToDeg(rad) { return (180.0 * (rad / Math.PI)); } +function lonZone(ll) { + var Lat = ll.lat; + var Long = ll.lon; + ZoneNumber = Math.floor((Long + 180) / 6) + 1; + + //Make sure the longitude 180.00 is in Zone 60 + if (Long == 180) { + ZoneNumber = 60; + } + + // Special zone for Norway + if (Lat >= 56.0 && Lat < 64.0 && Long >= 3.0 && Long < 12.0) { + ZoneNumber = 32; + } + + // Special zones for Svalbard + if (Lat >= 72.0 && Lat < 84.0) { + if (Long >= 0.0 && Long < 9.0) + ZoneNumber = 31; + else if (Long >= 9.0 && Long < 21.0) + ZoneNumber = 33; + else if (Long >= 21.0 && Long < 33.0) + ZoneNumber = 35; + else if (Long >= 33.0 && Long < 42.0) + ZoneNumber = 37; + } + return ZoneNumber; +} + +exports.lonZone = function(ll) { + return lonZone(ll); +} + /** * Converts a set of Longitude and Latitude co-ordinates to UTM * using the WGS84 ellipsoid. @@ -105,7 +141,8 @@ function radToDeg(rad) { * northing, zoneNumber and zoneLetter properties, and an optional * accuracy property in digits. Returns null if the conversion failed. */ -exports.LLtoUTM = function(ll) { + +function LLtoUTM(ll) { var Lat = ll.lat; var Long = ll.lon; var a = 6378137.0; //ellip.radius; @@ -117,35 +154,8 @@ exports.LLtoUTM = function(ll) { var LatRad = degToRad(Lat); var LongRad = degToRad(Long); var LongOriginRad; - var ZoneNumber; // (int) - ZoneNumber = Math.floor((Long + 180) / 6) + 1; - - //Make sure the longitude 180.00 is in Zone 60 - if (Long === 180) { - ZoneNumber = 60; - } - - // Special zone for Norway - if (Lat >= 56.0 && Lat < 64.0 && Long >= 3.0 && Long < 12.0) { - ZoneNumber = 32; - } - - // Special zones for Svalbard - if (Lat >= 72.0 && Lat < 84.0) { - if (Long >= 0.0 && Long < 9.0) { - ZoneNumber = 31; - } - else if (Long >= 9.0 && Long < 21.0) { - ZoneNumber = 33; - } - else if (Long >= 21.0 && Long < 33.0) { - ZoneNumber = 35; - } - else if (Long >= 33.0 && Long < 42.0) { - ZoneNumber = 37; - } - } + var ZoneNumber = lonZone(ll); LongOrigin = (ZoneNumber - 1) * 6 - 180 + 3; //+3 puts origin // in middle of @@ -177,6 +187,10 @@ exports.LLtoUTM = function(ll) { }; } +exports.LLtoUTM = function(ll) { + return LLtoUTM(ll); +} + /** * Converts UTM coords to lat/long, using the WGS84 ellipsoid. This is a convenience * class where the Zone can be specified as a single string eg."60N" which @@ -274,6 +288,10 @@ function UTMtoLL(utm) { return result; } +exports.latZone = function(lat) { + return getLetterDesignator(lat); +} + /** * Calculates the MGRS letter designator for the given latitude. * @@ -742,5 +760,38 @@ function getMinNorthing(zoneLetter) { } +exports.zoneBounds = function(zoneNumber, zoneLetter) { + var latIndex = ZDLS.indexOf(zoneLetter); + var minLon = (zoneNumber - 1) * 6.0 - 180.0; + var minLat = latIndex * 8.0 - 80.0; + var latRange = 8.0; + var lonRange = 6.0; + if (zoneLetter == 'X') { + latRange = 12.0; + if (zoneNumber == 31) { + lonRange = 9.0; + } else if (zoneNumber == 37) { + minLon -= 3.0; + lonRange = 9.0; + } else if (zoneNumber == 33 || zoneNumber == 35) { + lonRange = 12.0; + minLon -= 3.0; + } + } else if (zoneLetter == 'V') { // Norway special case areas. + if (zoneNumber == 31) { + lonRange = 3.0; + } else if (zoneNumber == 32) { + minLon -= 3.0; + lonRange = 9.0; + } + } + return { + minLon: minLon, + minLat: minLat, + lonRange: lonRange, + latRange: latRange + } +} + },{}]},{},[1])(1) }); diff --git a/mgrs.js b/mgrs.js index 345a0d3..351ba7b 100644 --- a/mgrs.js +++ b/mgrs.js @@ -31,6 +31,9 @@ var O = 79; // O var V = 86; // V var Z = 90; // Z +var ZDLS = "CDEFGHJKLMNPQRSTUVWX"; +exports.ZDLS = ZDLS; + /** * Conversion of lat/lon to MGRS. * @@ -93,6 +96,39 @@ function radToDeg(rad) { return (180.0 * (rad / Math.PI)); } +function lonZone(ll) { + var Lat = ll.lat; + var Long = ll.lon; + ZoneNumber = Math.floor((Long + 180) / 6) + 1; + + //Make sure the longitude 180.00 is in Zone 60 + if (Long == 180) { + ZoneNumber = 60; + } + + // Special zone for Norway + if (Lat >= 56.0 && Lat < 64.0 && Long >= 3.0 && Long < 12.0) { + ZoneNumber = 32; + } + + // Special zones for Svalbard + if (Lat >= 72.0 && Lat < 84.0) { + if (Long >= 0.0 && Long < 9.0) + ZoneNumber = 31; + else if (Long >= 9.0 && Long < 21.0) + ZoneNumber = 33; + else if (Long >= 21.0 && Long < 33.0) + ZoneNumber = 35; + else if (Long >= 33.0 && Long < 42.0) + ZoneNumber = 37; + } + return ZoneNumber; +} + +exports.lonZone = function(ll) { + return lonZone(ll); +} + /** * Converts a set of Longitude and Latitude co-ordinates to UTM * using the WGS84 ellipsoid. @@ -104,7 +140,8 @@ function radToDeg(rad) { * northing, zoneNumber and zoneLetter properties, and an optional * accuracy property in digits. Returns null if the conversion failed. */ -exports.LLtoUTM = function(ll) { + +function LLtoUTM(ll) { var Lat = ll.lat; var Long = ll.lon; var a = 6378137.0; //ellip.radius; @@ -116,35 +153,8 @@ exports.LLtoUTM = function(ll) { var LatRad = degToRad(Lat); var LongRad = degToRad(Long); var LongOriginRad; - var ZoneNumber; // (int) - ZoneNumber = Math.floor((Long + 180) / 6) + 1; - - //Make sure the longitude 180.00 is in Zone 60 - if (Long === 180) { - ZoneNumber = 60; - } - - // Special zone for Norway - if (Lat >= 56.0 && Lat < 64.0 && Long >= 3.0 && Long < 12.0) { - ZoneNumber = 32; - } - - // Special zones for Svalbard - if (Lat >= 72.0 && Lat < 84.0) { - if (Long >= 0.0 && Long < 9.0) { - ZoneNumber = 31; - } - else if (Long >= 9.0 && Long < 21.0) { - ZoneNumber = 33; - } - else if (Long >= 21.0 && Long < 33.0) { - ZoneNumber = 35; - } - else if (Long >= 33.0 && Long < 42.0) { - ZoneNumber = 37; - } - } + var ZoneNumber = lonZone(ll); LongOrigin = (ZoneNumber - 1) * 6 - 180 + 3; //+3 puts origin // in middle of @@ -176,6 +186,10 @@ exports.LLtoUTM = function(ll) { }; } +exports.LLtoUTM = function(ll) { + return LLtoUTM(ll); +} + /** * Converts UTM coords to lat/long, using the WGS84 ellipsoid. This is a convenience * class where the Zone can be specified as a single string eg."60N" which @@ -273,6 +287,10 @@ function UTMtoLL(utm) { return result; } +exports.latZone = function(lat) { + return getLetterDesignator(lat); +} + /** * Calculates the MGRS letter designator for the given latitude. * @@ -740,3 +758,36 @@ function getMinNorthing(zoneLetter) { } } + +exports.zoneBounds = function(zoneNumber, zoneLetter) { + var latIndex = ZDLS.indexOf(zoneLetter); + var minLon = (zoneNumber - 1) * 6.0 - 180.0; + var minLat = latIndex * 8.0 - 80.0; + var latRange = 8.0; + var lonRange = 6.0; + if (zoneLetter == 'X') { + latRange = 12.0; + if (zoneNumber == 31) { + lonRange = 9.0; + } else if (zoneNumber == 37) { + minLon -= 3.0; + lonRange = 9.0; + } else if (zoneNumber == 33 || zoneNumber == 35) { + lonRange = 12.0; + minLon -= 3.0; + } + } else if (zoneLetter == 'V') { // Norway special case areas. + if (zoneNumber == 31) { + lonRange = 3.0; + } else if (zoneNumber == 32) { + minLon -= 3.0; + lonRange = 9.0; + } + } + return { + minLon: minLon, + minLat: minLat, + lonRange: lonRange, + latRange: latRange + } +} diff --git a/package.json b/package.json index 3134f9b..1e3c875 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "mgrs", - "version": "0.0.4-alpha", + "version": "0.0.4-pwilczynski", "description": "Utility for converting between WGS84 lat/lng and MGRS coordinates", "main": "mgrs.js", "scripts": {