1
|
<!doctype html public "-//W3C//DTD HTML 4.0 Frameset//EN""http://www.w3.org/TR/REC-html40/frameset.dtd">
|
2
|
<html>
|
3
|
<head>
|
4
|
<title>
|
5
|
<a href='http://mapbuilder.sourceforge.net'>Community Map Builder</a> 27 Apr 2008 Overview
|
6
|
</title>
|
7
|
<link rel ="stylesheet" type="text/css" href="stylesheet.css" title="Style">
|
8
|
<script>
|
9
|
function asd() {
|
10
|
|
11
|
parent.document.title="MGRS.js Overview";
|
12
|
|
13
|
}
|
14
|
</script>
|
15
|
</head>
|
16
|
<body bgcolor="white" onload="asd();">
|
17
|
|
18
|
<!-- ========== START OF NAVBAR ========== -->
|
19
|
<a name="navbar_top"><!-- --></a>
|
20
|
<table border="0" width="100%" cellpadding="1" cellspacing="0">
|
21
|
<tr>
|
22
|
<td colspan=2 bgcolor="#EEEEFF" class="NavBarCell1">
|
23
|
<a name="navbar_top_firstrow"><!-- --></a>
|
24
|
<table border="0" cellpadding="0" cellspacing="3">
|
25
|
<tr align="center" valign="top">
|
26
|
|
27
|
|
28
|
<td bgcolor="#EEEEFF" class="NavBarCell1"> <a href="overview-summary.html"><font class="NavBarFont1"><b>Overview</b></font></a> </td>
|
29
|
<td bgcolor="#FFFFFF" class="NavBarCell1Rev"> <font class="NavBarFont1Rev"><b>File</b></font> </td>
|
30
|
|
31
|
|
32
|
<td bgcolor="#FFFFFF" class="NavBarCell1"> <font class="NavBarFont1">Class</font> </td>
|
33
|
<td bgcolor="#EEEEFF" class="NavBarCell1"> <a href="overview-tree.html"><font class="NavBarFont1"><b>Tree</b></font></a> </td>
|
34
|
<td bgcolor="#EEEEFF" class="NavBarCell1"> <a href="index-all.html"--><font class="NavBarFont1"><b>Index</b></font></a> </td>
|
35
|
<td bgcolor="#EEEEFF" class="NavBarCell1"> <a href="help-doc.html"><font class="NavBarFont1"><b>Help</b></font></a> </td>
|
36
|
</tr>
|
37
|
</table>
|
38
|
</td>
|
39
|
<td bgcolor="#EEEEFF" align="right" valign="top">
|
40
|
<em>
|
41
|
<b><a href='http://mapbuilder.sourceforge.net'>Community Map Builder</a> 27 Apr 2008</b></em>
|
42
|
</td>
|
43
|
</tr>
|
44
|
|
45
|
<tr>
|
46
|
<td bgcolor="white" class="NavBarCell2"><font size="-2">
|
47
|
PREV
|
48
|
NEXT</font></td>
|
49
|
<td bgcolor="white" class="NavBarCell2"><font size="-2">
|
50
|
<a href="index.html" target="_top"><b>FRAMES</b></a>
|
51
|
<a href="overview-summary.html" target="_top"><b>NO FRAMES</b></a>
|
52
|
|
53
|
<script>
|
54
|
<!--
|
55
|
if(window==top) {
|
56
|
document.writeln('<A HREF="allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
|
57
|
}
|
58
|
//-->
|
59
|
</script>
|
60
|
<noscript>
|
61
|
<a href="allclasses-noframe.html" target=""><b>All Classes</b></a>
|
62
|
</noscript>
|
63
|
</font></td>
|
64
|
</tr>
|
65
|
</table>
|
66
|
<!-- =========== END OF NAVBAR =========== -->
|
67
|
|
68
|
<hr>
|
69
|
<center>
|
70
|
|
71
|
<h2>MGRS.js</h2>
|
72
|
|
73
|
</center>
|
74
|
|
75
|
|
76
|
|
77
|
|
78
|
<h4>Summary</h4>
|
79
|
<p>
|
80
|
|
81
|
No overview generated for 'MGRS.js'<BR/><BR/>
|
82
|
|
83
|
</p>
|
84
|
|
85
|
<hr>
|
86
|
|
87
|
|
88
|
|
89
|
<!-- ========== METHOD SUMMARY =========== -->
|
90
|
|
91
|
<a name="method_summary"><!-- --></a>
|
92
|
<table border="1" cellpadding="3" cellspacing="0" width="100%">
|
93
|
<tr bgcolor="#CCCCFF" class="TableHeadingColor">
|
94
|
<td colspan=2>
|
95
|
<font size="+2">
|
96
|
<b>Method Summary</b>
|
97
|
</font>
|
98
|
</td>
|
99
|
</tr>
|
100
|
|
101
|
|
102
|
<tr bgcolor="white" class="TableRowColor">
|
103
|
<td align="right" valign="top" width="1%">
|
104
|
<font size="-1">
|
105
|
<code>static Object</code>
|
106
|
</font>
|
107
|
</td>
|
108
|
<td>
|
109
|
<code>
|
110
|
<b>
|
111
|
<a href="GLOBALS.html#AsciiToNum">AsciiToNum</a></b>( ascii )
|
112
|
</code>
|
113
|
<br>
|
114
|
|
115
|
|
116
|
</td>
|
117
|
</tr>
|
118
|
|
119
|
<tr bgcolor="white" class="TableRowColor">
|
120
|
<td align="right" valign="top" width="1%">
|
121
|
<font size="-1">
|
122
|
<code>static Object</code>
|
123
|
</font>
|
124
|
</td>
|
125
|
<td>
|
126
|
<code>
|
127
|
<b>
|
128
|
<a href="GLOBALS.html#degToRad">degToRad</a></b>(deg)
|
129
|
</code>
|
130
|
<br>
|
131
|
|
132
|
|
133
|
</td>
|
134
|
</tr>
|
135
|
|
136
|
<tr bgcolor="white" class="TableRowColor">
|
137
|
<td align="right" valign="top" width="1%">
|
138
|
<font size="-1">
|
139
|
<code>static Object</code>
|
140
|
</font>
|
141
|
</td>
|
142
|
<td>
|
143
|
<code>
|
144
|
<b>
|
145
|
<a href="GLOBALS.html#formatMGRS">formatMGRS</a></b>()
|
146
|
</code>
|
147
|
<br>
|
148
|
|
149
|
|
150
|
</td>
|
151
|
</tr>
|
152
|
|
153
|
<tr bgcolor="white" class="TableRowColor">
|
154
|
<td align="right" valign="top" width="1%">
|
155
|
<font size="-1">
|
156
|
<code>static Object</code>
|
157
|
</font>
|
158
|
</td>
|
159
|
<td>
|
160
|
<code>
|
161
|
<b>
|
162
|
<a href="GLOBALS.html#get100kID">get100kID</a></b>( easting, northing, zone_number)
|
163
|
</code>
|
164
|
<br>
|
165
|
|
166
|
Get the two letter 100k designator for a given UTM easting,
|
167
|
northing and zone number value.
|
168
|
</td>
|
169
|
</tr>
|
170
|
|
171
|
<tr bgcolor="white" class="TableRowColor">
|
172
|
<td align="right" valign="top" width="1%">
|
173
|
<font size="-1">
|
174
|
<code>static Object</code>
|
175
|
</font>
|
176
|
</td>
|
177
|
<td>
|
178
|
<code>
|
179
|
<b>
|
180
|
<a href="GLOBALS.html#get100kSetForZone">get100kSetForZone</a></b>(i)
|
181
|
</code>
|
182
|
<br>
|
183
|
|
184
|
Given a UTM zone number, figure out the MGRS 100K set it is in.
|
185
|
</td>
|
186
|
</tr>
|
187
|
|
188
|
<tr bgcolor="white" class="TableRowColor">
|
189
|
<td align="right" valign="top" width="1%">
|
190
|
<font size="-1">
|
191
|
<code>static Object</code>
|
192
|
</font>
|
193
|
</td>
|
194
|
<td>
|
195
|
<code>
|
196
|
<b>
|
197
|
<a href="GLOBALS.html#getLetter100kID">getLetter100kID</a></b>( column, row, parm)
|
198
|
</code>
|
199
|
<br>
|
200
|
|
201
|
Get the two-letter MGRS 100k designator given information
|
202
|
translated from the UTM northing, easting and zone number.
|
203
|
</td>
|
204
|
</tr>
|
205
|
|
206
|
<tr bgcolor="white" class="TableRowColor">
|
207
|
<td align="right" valign="top" width="1%">
|
208
|
<font size="-1">
|
209
|
<code>static Object</code>
|
210
|
</font>
|
211
|
</td>
|
212
|
<td>
|
213
|
<code>
|
214
|
<b>
|
215
|
<a href="GLOBALS.html#getLetterDesignator">getLetterDesignator</a></b>(lat)
|
216
|
</code>
|
217
|
<br>
|
218
|
|
219
|
|
220
|
</td>
|
221
|
</tr>
|
222
|
|
223
|
<tr bgcolor="white" class="TableRowColor">
|
224
|
<td align="right" valign="top" width="1%">
|
225
|
<font size="-1">
|
226
|
<code>static Object</code>
|
227
|
</font>
|
228
|
</td>
|
229
|
<td>
|
230
|
<code>
|
231
|
<b>
|
232
|
<a href="GLOBALS.html#LLtoUTM">LLtoUTM</a></b>()
|
233
|
</code>
|
234
|
<br>
|
235
|
|
236
|
Converts a set of Longitude and Latitude co-ordinates to UTM
|
237
|
given an ellipsoid
|
238
|
</td>
|
239
|
</tr>
|
240
|
|
241
|
<tr bgcolor="white" class="TableRowColor">
|
242
|
<td align="right" valign="top" width="1%">
|
243
|
<font size="-1">
|
244
|
<code>static Object</code>
|
245
|
</font>
|
246
|
</td>
|
247
|
<td>
|
248
|
<code>
|
249
|
<b>
|
250
|
<a href="GLOBALS.html#MGRS">MGRS</a></b>()
|
251
|
</code>
|
252
|
<br>
|
253
|
|
254
|
|
255
|
</td>
|
256
|
</tr>
|
257
|
|
258
|
<tr bgcolor="white" class="TableRowColor">
|
259
|
<td align="right" valign="top" width="1%">
|
260
|
<font size="-1">
|
261
|
<code>static Object</code>
|
262
|
</font>
|
263
|
</td>
|
264
|
<td>
|
265
|
<code>
|
266
|
<b>
|
267
|
<a href="GLOBALS.html#NumToAscii">NumToAscii</a></b>( num )
|
268
|
</code>
|
269
|
<br>
|
270
|
|
271
|
|
272
|
</td>
|
273
|
</tr>
|
274
|
|
275
|
|
276
|
</table>
|
277
|
<p>
|
278
|
|
279
|
<!-- ========== END METHOD SUMMARY =========== -->
|
280
|
|
281
|
|
282
|
<pre class="sourceview"><span class="comment">/*
|
283
|
Author: Patrice G. Cappelaere (Got library from Geoserver)
|
284
|
License: LGPL as per: http://www.gnu.org/copyleft/lesser.html
|
285
|
|
286
|
$Id: MGRS.js 2546 2007-01-23 12:07:39Z gjvoosten $
|
287
|
*/</span>
|
288
|
|
289
|
|
290
|
<span class="reserved">function</span> MGRS() {
|
291
|
<span class="comment">/**
|
292
|
* UTM zones are grouped, and assigned to one of a group of 6
|
293
|
* sets.
|
294
|
*/</span>
|
295
|
var NUM_100K_SETS = 6;
|
296
|
|
297
|
<span class="comment">/**
|
298
|
* The column letters (for easting) of the lower left value, per
|
299
|
* set.
|
300
|
*/</span>
|
301
|
var SET_ORIGIN_COLUMN_LETTERS = new Array(<span class="literal">'A'</span>,<span class="literal">'J'</span>,<span class="literal">'S'</span>,<span class="literal">'A'</span>,<span class="literal">'J'</span>,<span class="literal">'S'</span>);
|
302
|
|
303
|
<span class="comment">/**
|
304
|
* The row letters (for northing) of the lower left value, per
|
305
|
* set.
|
306
|
*/</span>
|
307
|
var SET_ORIGIN_ROW_LETTERS = new Array(<span class="literal">'A'</span>,<span class="literal">'F'</span>,<span class="literal">'A'</span>,<span class="literal">'F'</span>,<span class="literal">'A'</span>,<span class="literal">'F'</span>);
|
308
|
|
309
|
<span class="comment">/**
|
310
|
* The column letters (for easting) of the lower left value, per
|
311
|
* set,, for Bessel Ellipsoid.
|
312
|
*/</span>
|
313
|
var BESSEL_SET_ORIGIN_COLUMN_LETTERS = new Array( <span class="literal">'A'</span>, <span class="literal">'J'</span>, <span class="literal">'S'</span>, <span class="literal">'A'</span>, <span class="literal">'J'</span>, <span class="literal">'S'</span> );
|
314
|
|
315
|
<span class="comment">/**
|
316
|
* The row letters (for northing) of the lower left value, per
|
317
|
* set, for Bessel Ellipsoid.
|
318
|
*/</span>
|
319
|
var BESSEL_SET_ORIGIN_ROW_LETTERS = new Array( <span class="literal">'L'</span>, <span class="literal">'R'</span>, <span class="literal">'L'</span>, <span class="literal">'R'</span>, <span class="literal">'L'</span>, <span class="literal">'R'</span> );
|
320
|
var SET_NORTHING_ROLLOVER = 20000000;
|
321
|
|
322
|
<span class="comment">/**
|
323
|
* Use 5 digits for northing and easting values, for 1 meter
|
324
|
* accuracy of coordinate.
|
325
|
*/</span>
|
326
|
|
327
|
var ACCURACY_1_METER = 5;
|
328
|
|
329
|
<span class="comment">/**
|
330
|
* Use 4 digits for northing and easting values, for 10 meter
|
331
|
* accuracy of coordinate.
|
332
|
*/</span>
|
333
|
var ACCURACY_10_METER = 4;
|
334
|
|
335
|
<span class="comment">/**
|
336
|
* Use 3 digits for northing and easting values, for 100 meter
|
337
|
* accuracy of coordinate.
|
338
|
*/</span>
|
339
|
var ACCURACY_100_METER = 3;
|
340
|
|
341
|
<span class="comment">/**
|
342
|
* Use 2 digits for northing and easting values, for 1000 meter
|
343
|
* accuracy of coordinate.
|
344
|
*/</span>
|
345
|
|
346
|
var ACCURACY_1000_METER = 2;
|
347
|
<span class="comment">/**
|
348
|
* Use 1 digits for northing and easting values, for 10000 meter
|
349
|
* accuracy of coordinate.
|
350
|
*/</span>
|
351
|
var ACCURACY_10000_METER = 1;
|
352
|
|
353
|
<span class="comment">/** The set origin column letters to use. */</span>
|
354
|
var originColumnLetters = SET_ORIGIN_COLUMN_LETTERS;
|
355
|
|
356
|
<span class="comment">/** The set origin row letters to use. */</span>
|
357
|
var originRowLetters = SET_ORIGIN_ROW_LETTERS;
|
358
|
|
359
|
var A = 65; //AsciiToNum(<span class="literal">'A'</span>);
|
360
|
var I = 73; //AsciiToNum(<span class="literal">'I'</span>);
|
361
|
var O = 79; //AsciiToNum(<span class="literal">'O'</span>);
|
362
|
var V = 86; //AsciiToNum(<span class="literal">'V'</span>);
|
363
|
var Z = 90; //AsciiToNum(<span class="literal">'Z'</span>);
|
364
|
|
365
|
var DEBUG = false;
|
366
|
|
367
|
<span class="comment">/** The String holding the MGRS coordinate value. */</span>
|
368
|
var mgrs_;
|
369
|
var lat_;
|
370
|
var lon_;
|
371
|
var radlat_ ;
|
372
|
var radlon_ ;
|
373
|
|
374
|
var northing_;
|
375
|
var easting_;
|
376
|
var zone_number_;
|
377
|
var zone_letter_;
|
378
|
|
379
|
<span class="comment">/**
|
380
|
* Conversion of lat/lon to MGRS
|
381
|
*/</span>
|
382
|
<span class="reserved">this</span>.convert = <span class="reserved">function</span>(latitude, longitude) {
|
383
|
lat_ = parseFloat(latitude);
|
384
|
lon_ = parseFloat(longitude);
|
385
|
radlat_ = degToRad(lat_);
|
386
|
radlon_ = degToRad(lon_);
|
387
|
|
388
|
LLtoUTM();
|
389
|
<span class="reserved">return</span> formatMGRS();
|
390
|
}
|
391
|
|
392
|
<span class="reserved">function</span> degToRad(deg) {
|
393
|
<span class="reserved">return</span> (deg * (Math.PI / 180.0));
|
394
|
}
|
395
|
|
396
|
<span class="comment">/**
|
397
|
* Converts a set of Longitude and Latitude co-ordinates to UTM
|
398
|
* given an ellipsoid
|
399
|
*
|
400
|
* <span class="attrib">@param</span> ellip an ellipsoid definition.
|
401
|
* <span class="attrib">@param</span> llpoint the coordinate to be converted
|
402
|
* <span class="attrib">@param</span> utmpoint A UTMPoint instance to put the results in. If
|
403
|
* null, a new UTMPoint will be allocated.
|
404
|
* <span class="attrib">@return</span> A UTM class instance containing the value of
|
405
|
* <code>null</code> if conversion failed. If you pass
|
406
|
* in a UTMPoint, it will be returned as well if
|
407
|
* successful.
|
408
|
*/</span>
|
409
|
<span class="reserved">function</span> LLtoUTM() {
|
410
|
var Lat = lat_;
|
411
|
var Long = lon_;
|
412
|
var a = 6378137.0; //ellip.radius;
|
413
|
var eccSquared = 0.00669438; //ellip.eccsq;
|
414
|
var k0 = 0.9996;
|
415
|
var LongOrigin;
|
416
|
var eccPrimeSquared;
|
417
|
var N, T, C, A, M;
|
418
|
var LatRad = radlat_;
|
419
|
var LongRad = radlon_;
|
420
|
var LongOriginRad;
|
421
|
var ZoneNumber;
|
422
|
<span class="comment"> // (int)</span>
|
423
|
ZoneNumber = Math.floor((Long + 180) / 6) + 1;
|
424
|
<span class="comment">
|
425
|
//Make sure the longitude 180.00 is in Zone 60</span>
|
426
|
<span class="reserved">if</span> (Long == 180) {
|
427
|
ZoneNumber = 60;
|
428
|
}
|
429
|
<span class="comment">
|
430
|
// Special zone for Norway</span>
|
431
|
<span class="reserved">if</span> (Lat >= 56.0 && Lat < 64.0 && Long >= 3.0 && Long < 12.0) {
|
432
|
ZoneNumber = 32;
|
433
|
}
|
434
|
<span class="comment">
|
435
|
// Special zones for Svalbard</span>
|
436
|
<span class="reserved">if</span> (Lat >= 72.0 && Lat < 84.0) {
|
437
|
<span class="reserved">if</span> (Long >= 0.0 && Long < 9.0)
|
438
|
ZoneNumber = 31;
|
439
|
<span class="reserved">else</span> <span class="reserved">if</span> (Long >= 9.0 && Long < 21.0)
|
440
|
ZoneNumber = 33;
|
441
|
<span class="reserved">else</span> <span class="reserved">if</span> (Long >= 21.0 && Long < 33.0)
|
442
|
ZoneNumber = 35;
|
443
|
<span class="reserved">else</span> <span class="reserved">if</span> (Long >= 33.0 && Long < 42.0)
|
444
|
ZoneNumber = 37;
|
445
|
}
|
446
|
|
447
|
LongOrigin = (ZoneNumber - 1) * 6 - 180 + 3; //+3 puts origin
|
448
|
<span class="comment"> // in middle of</span>
|
449
|
<span class="comment"> // zone</span>
|
450
|
LongOriginRad = degToRad(LongOrigin);
|
451
|
|
452
|
eccPrimeSquared = (eccSquared) / (1 - eccSquared);
|
453
|
|
454
|
N = a / Math.sqrt(1 - eccSquared * Math.sin(LatRad) * Math.sin(LatRad));
|
455
|
T = Math.tan(LatRad) * Math.tan(LatRad);
|
456
|
C = eccPrimeSquared * Math.cos(LatRad) * Math.cos(LatRad);
|
457
|
A = Math.cos(LatRad) * (LongRad - LongOriginRad);
|
458
|
|
459
|
M = a
|
460
|
* ((1 - eccSquared / 4 - 3 * eccSquared * eccSquared / 64 - 5
|
461
|
* eccSquared * eccSquared * eccSquared / 256)
|
462
|
* LatRad
|
463
|
- (3 * eccSquared / 8 + 3 * eccSquared * eccSquared
|
464
|
/ 32 + 45 * eccSquared * eccSquared
|
465
|
* eccSquared / 1024)
|
466
|
* Math.sin(2 * LatRad)
|
467
|
+ (15 * eccSquared * eccSquared / 256 + 45 * eccSquared
|
468
|
* eccSquared * eccSquared / 1024)
|
469
|
* Math.sin(4 * LatRad) - (35 * eccSquared * eccSquared
|
470
|
* eccSquared / 3072)
|
471
|
* Math.sin(6 * LatRad));
|
472
|
|
473
|
var UTMEasting = (k0
|
474
|
* N
|
475
|
* (A + (1 - T + C) * A * A * A / 6.0 + (5 - 18 * T + T * T
|
476
|
+ 72 * C - 58 * eccPrimeSquared)
|
477
|
* A * A * A * A * A / 120.0) + 500000.0);
|
478
|
|
479
|
var UTMNorthing = (k0 * (M + N
|
480
|
* Math.tan(LatRad)
|
481
|
* (A * A / 2 + (5 - T + 9 * C + 4 * C * C) * A * A * A * A
|
482
|
/ 24.0 + (61 - 58 * T + T * T + 600 * C - 330 * eccPrimeSquared)
|
483
|
* A * A * A * A * A * A / 720.0)));
|
484
|
<span class="reserved">if</span> (Lat < 0.0) {
|
485
|
UTMNorthing += 10000000.0; //10000000 meter offset <span class="reserved">for</span>
|
486
|
<span class="comment"> // southern hemisphere</span>
|
487
|
}
|
488
|
|
489
|
northing_ = Math.round(UTMNorthing);
|
490
|
easting_ = Math.round(UTMEasting);
|
491
|
zone_number_ = ZoneNumber;
|
492
|
zone_letter_ = getLetterDesignator(Lat);
|
493
|
}
|
494
|
|
495
|
<span class="reserved">function</span> getLetterDesignator(lat) {
|
496
|
<span class="comment"> //This is here as an error flag to show that the Latitude is</span>
|
497
|
<span class="comment"> //outside MGRS limits</span>
|
498
|
var LetterDesignator = <span class="literal">'Z'</span>;
|
499
|
|
500
|
<span class="reserved">if</span> ((84 >= lat) && (lat >= 72))
|
501
|
LetterDesignator = <span class="literal">'X'</span>;
|
502
|
<span class="reserved">else</span> <span class="reserved">if</span> ((72 > lat) && (lat >= 64))
|
503
|
LetterDesignator = <span class="literal">'W'</span>;
|
504
|
<span class="reserved">else</span> <span class="reserved">if</span> ((64 > lat) && (lat >= 56))
|
505
|
LetterDesignator = <span class="literal">'V'</span>;
|
506
|
<span class="reserved">else</span> <span class="reserved">if</span> ((56 > lat) && (lat >= 48))
|
507
|
LetterDesignator = <span class="literal">'U'</span>;
|
508
|
<span class="reserved">else</span> <span class="reserved">if</span> ((48 > lat) && (lat >= 40))
|
509
|
LetterDesignator = <span class="literal">'T'</span>;
|
510
|
<span class="reserved">else</span> <span class="reserved">if</span> ((40 > lat) && (lat >= 32))
|
511
|
LetterDesignator = <span class="literal">'S'</span>;
|
512
|
<span class="reserved">else</span> <span class="reserved">if</span> ((32 > lat) && (lat >= 24))
|
513
|
LetterDesignator = <span class="literal">'R'</span>;
|
514
|
<span class="reserved">else</span> <span class="reserved">if</span> ((24 > lat) && (lat >= 16))
|
515
|
LetterDesignator = <span class="literal">'Q'</span>;
|
516
|
<span class="reserved">else</span> <span class="reserved">if</span> ((16 > lat) && (lat >= 8))
|
517
|
LetterDesignator = <span class="literal">'P'</span>;
|
518
|
<span class="reserved">else</span> <span class="reserved">if</span> ((8 > lat) && (lat >= 0))
|
519
|
LetterDesignator = <span class="literal">'N'</span>;
|
520
|
<span class="reserved">else</span> <span class="reserved">if</span> ((0 > lat) && (lat >= -8))
|
521
|
LetterDesignator = <span class="literal">'M'</span>;
|
522
|
<span class="reserved">else</span> <span class="reserved">if</span> ((-8 > lat) && (lat >= -16))
|
523
|
LetterDesignator = <span class="literal">'L'</span>;
|
524
|
<span class="reserved">else</span> <span class="reserved">if</span> ((-16 > lat) && (lat >= -24))
|
525
|
LetterDesignator = <span class="literal">'K'</span>;
|
526
|
<span class="reserved">else</span> <span class="reserved">if</span> ((-24 > lat) && (lat >= -32))
|
527
|
LetterDesignator = <span class="literal">'J'</span>;
|
528
|
<span class="reserved">else</span> <span class="reserved">if</span> ((-32 > lat) && (lat >= -40))
|
529
|
LetterDesignator = <span class="literal">'H'</span>;
|
530
|
<span class="reserved">else</span> <span class="reserved">if</span> ((-40 > lat) && (lat >= -48))
|
531
|
LetterDesignator = <span class="literal">'G'</span>;
|
532
|
<span class="reserved">else</span> <span class="reserved">if</span> ((-48 > lat) && (lat >= -56))
|
533
|
LetterDesignator = <span class="literal">'F'</span>;
|
534
|
<span class="reserved">else</span> <span class="reserved">if</span> ((-56 > lat) && (lat >= -64))
|
535
|
LetterDesignator = <span class="literal">'E'</span>;
|
536
|
<span class="reserved">else</span> <span class="reserved">if</span> ((-64 > lat) && (lat >= -72))
|
537
|
LetterDesignator = <span class="literal">'D'</span>;
|
538
|
<span class="reserved">else</span> <span class="reserved">if</span> ((-72 > lat) && (lat >= -80))
|
539
|
LetterDesignator = <span class="literal">'C'</span>;
|
540
|
<span class="reserved">return</span> LetterDesignator;
|
541
|
}
|
542
|
|
543
|
<span class="reserved">function</span> formatMGRS() {
|
544
|
var seasting = <span class="literal">""</span> + easting_;
|
545
|
var snorthing = <span class="literal">""</span>+ northing_;
|
546
|
<span class="reserved">while</span>( snorthing.length > 6 )
|
547
|
snorthing = snorthing.substr(1,snorthing.length-1);
|
548
|
|
549
|
var str= zone_number_ + <span class="literal">""</span> + zone_letter_ +
|
550
|
get100kID(easting_, northing_, zone_number_) +
|
551
|
seasting.substr(1,4) + snorthing.substr(1,4);
|
552
|
|
553
|
<span class="reserved">return</span> str;
|
554
|
}
|
555
|
|
556
|
<span class="comment">/**
|
557
|
* Get the two letter 100k designator for a given UTM easting,
|
558
|
* northing and zone number value.
|
559
|
*/</span>
|
560
|
<span class="reserved">function</span> get100kID( easting, northing, zone_number) {
|
561
|
var setParm = get100kSetForZone(zone_number);
|
562
|
var setColumn = Math.floor( easting / 100000);
|
563
|
var setRow = Math.floor( northing / 100000) % 20;
|
564
|
<span class="comment"> //trace("get100kID:"+setParm+" "+setColumn+" "+setRow);</span>
|
565
|
<span class="reserved">return</span> getLetter100kID(setColumn, setRow, setParm);
|
566
|
}
|
567
|
|
568
|
<span class="comment">/**
|
569
|
* Given a UTM zone number, figure out the MGRS 100K set it is in.
|
570
|
*/</span>
|
571
|
<span class="reserved">function</span> get100kSetForZone(i) {
|
572
|
var setParm = i % NUM_100K_SETS;
|
573
|
<span class="reserved">if</span> (setParm == 0)
|
574
|
setParm = NUM_100K_SETS;
|
575
|
|
576
|
<span class="reserved">return</span> setParm;
|
577
|
}
|
578
|
|
579
|
<span class="comment">/**
|
580
|
* Get the two-letter MGRS 100k designator given information
|
581
|
* translated from the UTM northing, easting and zone number.
|
582
|
*
|
583
|
* <span class="attrib">@param</span> setColumn the column index as it relates to the MGRS
|
584
|
* 100k set spreadsheet, created from the UTM easting.
|
585
|
* Values are 1-8.
|
586
|
* <span class="attrib">@param</span> setRow the row index as it relates to the MGRS 100k set
|
587
|
* spreadsheet, created from the UTM northing value. Values
|
588
|
* are from 0-19.
|
589
|
* <span class="attrib">@param</span> setParm the set block, as it relates to the MGRS 100k set
|
590
|
* spreadsheet, created from the UTM zone. Values are from
|
591
|
* 1-60.
|
592
|
* <span class="attrib">@return</span> two letter MGRS 100k code.
|
593
|
*/</span>
|
594
|
|
595
|
<span class="reserved">function</span> getLetter100kID( column, row, parm) {
|
596
|
<span class="comment"> // colOrigin and rowOrigin are the letters at the origin of the set</span>
|
597
|
var index = parm-1;
|
598
|
var colOrigin = AsciiToNum(SET_ORIGIN_COLUMN_LETTERS[index]);
|
599
|
var rowOrigin = AsciiToNum(SET_ORIGIN_ROW_LETTERS[index]);
|
600
|
<span class="comment">
|
601
|
// colInt and rowInt are the letters to build to return</span>
|
602
|
var colInt = colOrigin + column - 1;
|
603
|
var rowInt = rowOrigin + row;
|
604
|
var rollover = false;
|
605
|
|
606
|
<span class="reserved">if</span> ( colInt > Z ) {
|
607
|
colInt = colInt - Z + A - 1;
|
608
|
rollover = true;
|
609
|
}
|
610
|
|
611
|
<span class="reserved">if</span> (colInt == I || (colOrigin < I && colInt > I)
|
612
|
|| ((colInt > I || colOrigin < I) && rollover)) {
|
613
|
colInt++;
|
614
|
}
|
615
|
|
616
|
<span class="reserved">if</span> (colInt == O || (colOrigin < O && colInt > O)
|
617
|
|| ((colInt > O || colOrigin < O) && rollover)) {
|
618
|
colInt++;
|
619
|
|
620
|
<span class="reserved">if</span> (colInt == I) {
|
621
|
colInt++;
|
622
|
}
|
623
|
}
|
624
|
|
625
|
<span class="reserved">if</span> (colInt > Z) {
|
626
|
colInt = colInt - Z + A - 1;
|
627
|
}
|
628
|
|
629
|
<span class="reserved">if</span> (rowInt > V) {
|
630
|
rowInt = rowInt - V + A - 1;
|
631
|
rollover = true;
|
632
|
} <span class="reserved">else</span> {
|
633
|
rollover = false;
|
634
|
}
|
635
|
|
636
|
<span class="reserved">if</span>( ((rowInt == I) || ((rowOrigin < I) && (rowInt > I)))
|
637
|
|| (((rowInt > I)||(rowOrigin < I)) && rollover)) {
|
638
|
rowInt++;
|
639
|
}
|
640
|
|
641
|
<span class="reserved">if</span>( ((rowInt == O) || ((rowOrigin < O) && (rowInt > O)))
|
642
|
|| (((rowInt > O)|| (rowOrigin < O)) && rollover)) {
|
643
|
rowInt++;
|
644
|
|
645
|
<span class="reserved">if</span> (rowInt == I) {
|
646
|
rowInt++;
|
647
|
}
|
648
|
}
|
649
|
|
650
|
<span class="reserved">if</span> (rowInt > V) {
|
651
|
rowInt = rowInt - V + A - 1;
|
652
|
}
|
653
|
|
654
|
var twoLetter = NumToAscii(colInt) + <span class="literal">""</span> + NumToAscii(rowInt);
|
655
|
<span class="reserved">return</span> twoLetter;
|
656
|
}
|
657
|
|
658
|
|
659
|
<span class="reserved">function</span> AsciiToNum( ascii ) {
|
660
|
switch( ascii ) {
|
661
|
case <span class="literal">'A'</span>:
|
662
|
<span class="reserved">return</span> 65;
|
663
|
case <span class="literal">'B'</span>:
|
664
|
<span class="reserved">return</span> 66;
|
665
|
case <span class="literal">'C'</span>:
|
666
|
<span class="reserved">return</span> 67;
|
667
|
case <span class="literal">'D'</span>:
|
668
|
<span class="reserved">return</span> 68;
|
669
|
case <span class="literal">'E'</span>:
|
670
|
<span class="reserved">return</span> 69;
|
671
|
case <span class="literal">'F'</span>:
|
672
|
<span class="reserved">return</span> 70;
|
673
|
case <span class="literal">'G'</span>:
|
674
|
<span class="reserved">return</span> 71;
|
675
|
case <span class="literal">'H'</span>:
|
676
|
<span class="reserved">return</span> 72;
|
677
|
case <span class="literal">'I'</span>:
|
678
|
<span class="reserved">return</span> 73;
|
679
|
case <span class="literal">'J'</span>:
|
680
|
<span class="reserved">return</span> 74;
|
681
|
case <span class="literal">'K'</span>:
|
682
|
<span class="reserved">return</span> 75;
|
683
|
case <span class="literal">'L'</span>:
|
684
|
<span class="reserved">return</span> 76;
|
685
|
case <span class="literal">'M'</span>:
|
686
|
<span class="reserved">return</span> 77;
|
687
|
case <span class="literal">'N'</span>:
|
688
|
<span class="reserved">return</span> 78;
|
689
|
case <span class="literal">'O'</span>:
|
690
|
<span class="reserved">return</span> 79;
|
691
|
case <span class="literal">'P'</span>:
|
692
|
<span class="reserved">return</span> 80;
|
693
|
case <span class="literal">'Q'</span>:
|
694
|
<span class="reserved">return</span> 81;
|
695
|
case <span class="literal">'R'</span>:
|
696
|
<span class="reserved">return</span> 82;
|
697
|
case <span class="literal">'S'</span>:
|
698
|
<span class="reserved">return</span> 83;
|
699
|
case <span class="literal">'T'</span>:
|
700
|
<span class="reserved">return</span> 84;
|
701
|
case <span class="literal">'U'</span>:
|
702
|
<span class="reserved">return</span> 85;
|
703
|
case <span class="literal">'V'</span>:
|
704
|
<span class="reserved">return</span> 86;
|
705
|
case <span class="literal">'W'</span>:
|
706
|
<span class="reserved">return</span> 87;
|
707
|
case <span class="literal">'X'</span>:
|
708
|
<span class="reserved">return</span> 88;
|
709
|
case <span class="literal">'Y'</span>:
|
710
|
<span class="reserved">return</span> 89;
|
711
|
case <span class="literal">'Z'</span>:
|
712
|
<span class="reserved">return</span> 90;
|
713
|
}
|
714
|
}
|
715
|
|
716
|
<span class="reserved">function</span> NumToAscii( num ) {
|
717
|
switch( num ) {
|
718
|
case 65:
|
719
|
<span class="reserved">return</span> <span class="literal">'A'</span>;
|
720
|
case 66:
|
721
|
<span class="reserved">return</span> <span class="literal">'B'</span>;
|
722
|
case 67:
|
723
|
<span class="reserved">return</span> <span class="literal">'C'</span>;
|
724
|
case 68:
|
725
|
<span class="reserved">return</span> <span class="literal">'D'</span>;
|
726
|
case 69:
|
727
|
<span class="reserved">return</span> <span class="literal">'E'</span>;
|
728
|
case 70:
|
729
|
<span class="reserved">return</span> <span class="literal">'F'</span>;
|
730
|
case 71:
|
731
|
<span class="reserved">return</span> <span class="literal">'G'</span>;
|
732
|
case 72:
|
733
|
<span class="reserved">return</span> <span class="literal">'H'</span>;
|
734
|
case 73:
|
735
|
<span class="reserved">return</span> <span class="literal">'I'</span>;
|
736
|
case 74:
|
737
|
<span class="reserved">return</span> <span class="literal">'J'</span>;
|
738
|
case 75 :
|
739
|
<span class="reserved">return</span> <span class="literal">'K'</span>;
|
740
|
case 76:
|
741
|
<span class="reserved">return</span> <span class="literal">'L'</span>;
|
742
|
case 77:
|
743
|
<span class="reserved">return</span> <span class="literal">'M'</span>;
|
744
|
case 78:
|
745
|
<span class="reserved">return</span> <span class="literal">'N'</span>;
|
746
|
case 79:
|
747
|
<span class="reserved">return</span> <span class="literal">'O'</span>;
|
748
|
case 80:
|
749
|
<span class="reserved">return</span> <span class="literal">'P'</span>;
|
750
|
case 81:
|
751
|
<span class="reserved">return</span> <span class="literal">'Q'</span>;
|
752
|
case 82:
|
753
|
<span class="reserved">return</span> <span class="literal">'R'</span>;
|
754
|
case 83:
|
755
|
<span class="reserved">return</span> <span class="literal">'S'</span>;
|
756
|
case 84:
|
757
|
<span class="reserved">return</span> <span class="literal">'T'</span>;
|
758
|
case 85:
|
759
|
<span class="reserved">return</span> <span class="literal">'U'</span>;
|
760
|
case 86:
|
761
|
<span class="reserved">return</span> <span class="literal">'V'</span>;
|
762
|
case 87:
|
763
|
<span class="reserved">return</span> <span class="literal">'W'</span>;
|
764
|
case 88:
|
765
|
<span class="reserved">return</span> <span class="literal">'X'</span>;
|
766
|
case 89:
|
767
|
<span class="reserved">return</span> <span class="literal">'Y'</span>;
|
768
|
case 90:
|
769
|
<span class="reserved">return</span> <span class="literal">'Z'</span>;
|
770
|
}
|
771
|
}
|
772
|
}</pre>
|
773
|
<hr>
|
774
|
|
775
|
|
776
|
|
777
|
<!-- ========== START OF NAVBAR ========== -->
|
778
|
<a name="navbar_top"><!-- --></a>
|
779
|
<table border="0" width="100%" cellpadding="1" cellspacing="0">
|
780
|
<tr>
|
781
|
<td colspan=2 bgcolor="#EEEEFF" class="NavBarCell1">
|
782
|
<a name="navbar_top_firstrow"><!-- --></a>
|
783
|
<table border="0" cellpadding="0" cellspacing="3">
|
784
|
<tr align="center" valign="top">
|
785
|
|
786
|
|
787
|
<td bgcolor="#EEEEFF" class="NavBarCell1"> <a href="overview-summary.html"><font class="NavBarFont1"><b>Overview</b></font></a> </td>
|
788
|
<td bgcolor="#FFFFFF" class="NavBarCell1Rev"> <font class="NavBarFont1Rev"><b>File</b></font> </td>
|
789
|
|
790
|
|
791
|
<td bgcolor="#FFFFFF" class="NavBarCell1"> <font class="NavBarFont1">Class</font> </td>
|
792
|
<td bgcolor="#EEEEFF" class="NavBarCell1"> <a href="overview-tree.html"><font class="NavBarFont1"><b>Tree</b></font></a> </td>
|
793
|
<td bgcolor="#EEEEFF" class="NavBarCell1"> <a href="index-all.html"--><font class="NavBarFont1"><b>Index</b></font></a> </td>
|
794
|
<td bgcolor="#EEEEFF" class="NavBarCell1"> <a href="help-doc.html"><font class="NavBarFont1"><b>Help</b></font></a> </td>
|
795
|
</tr>
|
796
|
</table>
|
797
|
</td>
|
798
|
<td bgcolor="#EEEEFF" align="right" valign="top"><em>
|
799
|
<b><a href='http://mapbuilder.sourceforge.net'>Community Map Builder</a> 27 Apr 2008</b></em>
|
800
|
</td>
|
801
|
</tr>
|
802
|
|
803
|
<tr>
|
804
|
<td bgcolor="white" class="NavBarCell2"><font size="-2">
|
805
|
PREV
|
806
|
NEXT</font></td>
|
807
|
<td bgcolor="white" class="NavBarCell2"><font size="-2">
|
808
|
<a href="index.html" target="_top"><b>FRAMES</b></a>
|
809
|
<a href="overview-summary.html" target="_top"><b>NO FRAMES</b></a>
|
810
|
|
811
|
<script>
|
812
|
<!--
|
813
|
if(window==top) {
|
814
|
document.writeln('<A HREF="allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
|
815
|
}
|
816
|
//-->
|
817
|
</script>
|
818
|
<noscript>
|
819
|
<a href="allclasses-noframe.html" target=""><b>All Classes</b></a>
|
820
|
</noscript>
|
821
|
</font></td>
|
822
|
</tr>
|
823
|
</table>
|
824
|
<!-- =========== END OF NAVBAR =========== -->
|
825
|
|
826
|
<hr>
|
827
|
<font size="-1">
|
828
|
|
829
|
</font>
|
830
|
<div class="jsdoc_ctime">Documentation generated by <a href="http://jsdoc.sourceforge.net/" target="_parent">JSDoc</a> on Sun Apr 27 20:30:54 2008</div>
|
831
|
</body>
|
832
|
</html>
|