aimsMap.js
上传用户:gzuoyue
上传日期:2022-07-08
资源大小:177k
文件大小:22k
源码类别:

GIS编程

开发平台:

ASP/ASPX

  1. // aimsMap.js
  2. /*
  3. *  JavaScript template file for ArcIMS HTML Viewer
  4. * dependent on aimsXML.js, ArcIMSparam.js, aimsCommon.js
  5. */
  6. aimsMapPresent=true;
  7. // global variables
  8. // show xml responses
  9. var debugOn = 0;
  10.   // can debug be toggled?
  11. var setDebug = true;
  12. var useLimitExtent=false;
  13. var getStartingExtent=true;
  14. var getLimitExtent=true;
  15. var enforceFullExtent=false;
  16. // map extents. . . dynamically updated
  17. var eLeft = -180.0;
  18. var eRight = 180.0;
  19. var eTop = 90.0;
  20. var eBottom = -90.0;
  21. var fullLeft = eLeft;
  22. var fullRight = eRight;
  23. var fullTop = eTop;
  24. var fullBottom = eBottom;
  25. // map size . . . dynamically updated
  26. var iWidth = 630;
  27. var iHeight = 512;
  28. // location map size . . . dynamically updated
  29. var i2Width = 150;
  30. var i2Height = 120;
  31. var imageLimitLeft = limitLeft;
  32. var imageLimitTop = limitTop;
  33. var imageLimitRight = limitRight;
  34. var imageLimitBottom = limitBottom;
  35. var appDir = "";
  36. var xDistance = Math.abs(eRight-eLeft);
  37. var yDistance = Math.abs(eTop-eBottom);
  38. var panX = xDistance * panFactor;
  39. var panY = yDistance * panFactor;
  40. var pixelX = xDistance/iWidth;
  41. var pixelY = yDistance/iHeight;
  42. var mapX = eLeft;
  43. var mapY = eTop;
  44. var lastLeft = eLeft;
  45. var lastRight = eRight;
  46. var lastTop = eTop;
  47. var lastBottom = eBottom;
  48. var fullOVLeft = eLeft;
  49. var fullOVRight = eRight;
  50. var fullOVTop = eTop;
  51. var fullOVBottom = eBottom;
  52. var theCursor = "crosshair";
  53. var canLoad=false;
  54. //if (imsURL!="") canLoad=false;
  55. var fullWidth = Math.abs(fullRight - fullLeft);
  56. var fullHeight = Math.abs(fullTop - fullBottom);
  57. var fullOVWidth = Math.abs(fullOVRight - fullOVLeft);
  58. var fullOVHeight = Math.abs(fullOVTop - fullOVBottom);
  59. var mapScaleFactor = xDistance / iWidth;
  60. var geocodeX = 0;
  61. var geocodeY = 0;
  62. var showGeocode = false;
  63. var geocodeLabel = "";
  64. var queryZoom=false;
  65. var sQuote = "'";
  66. var dQuote = '"';
  67. var toolMode = 1;
  68. var legendVisible=false;
  69. // set legend visible at service load... showTOC=false & hasTOC=true
  70. if ((hasTOC) && (!showTOC)) legendVisible=true;
  71. MapUnits = MapUnits.toUpperCase();
  72. ScaleBarUnits = ScaleBarUnits.toUpperCase();
  73. if (drawScaleBar2) {
  74. switch (ScaleBarUnits) {
  75. case "MILES":
  76. ScaleBar2Units = "KILOMETERS";
  77. break;
  78. case "KILOMETERS":
  79. ScaleBar2Units = "MILES";
  80. break;
  81. case "FEET":
  82. ScaleBar2Units = "METERS";
  83. break;
  84. case "METERS":
  85. ScaleBar2Units = "FEET";
  86. break;
  87. }
  88. }
  89. // save the extent 
  90. function saveLastExtent() {
  91. lastLeft = eLeft;
  92. lastRight = eRight;
  93. lastTop = eTop;
  94. lastBottom = eBottom;
  95. }
  96. // zoom out to full extent
  97. function fullExtent() {
  98. if (aimsDHTMLPresent) moveLayer("theMap",hspc,vspc);
  99. window.scrollTo(0,0);
  100. saveLastExtent();
  101. eLeft = fullLeft;
  102. eRight = fullRight;
  103. eTop = fullTop;
  104. eBottom = fullBottom;
  105. //var theString = writeXML();
  106. sendMapXML();
  107. }
  108. function startExtent() {
  109. if (aimsDHTMLPresent) moveLayer("theMap",hspc,vspc);
  110. window.scrollTo(0,0);
  111. saveLastExtent();
  112. eLeft = startLeft;
  113. eRight = startRight;
  114. eTop = startTop;
  115. eBottom = startBottom;
  116. //var theString = writeXML();
  117. sendMapXML();
  118. }
  119. // zoom back to last extent
  120. function zoomBack() {
  121. if (aimsDHTMLPresent) moveLayer("theMap",hspc,vspc);
  122. var left1 = eLeft;
  123. var right1 = eRight;
  124. var top1 = eTop;
  125. var bottom1 = eBottom;
  126. eLeft = lastLeft;
  127. eRight = lastRight;
  128. eTop = lastTop;
  129. eBottom = lastBottom;
  130. lastLeft = left1;
  131. lastRight = right1;
  132. lastTop = top1;
  133. lastBottom = bottom1;
  134. //var theString = writeXML();
  135. sendMapXML();
  136. }
  137. function zoomToPoint(xIn, yIn, drawIt,theLabel) {
  138. //alert(xIn + "," + yIn); 
  139. var mWMargin = 0;
  140. var mHMargin = 0;
  141. mWMargin = Math.abs(limitRight-limitLeft) * selectPointMargin;
  142. mHMargin = Math.abs(limitTop-limitBottom) * selectPointMargin;
  143. var xNum = parseFloat(xIn);
  144. var yNum = parseFloat(yIn);
  145. saveLastExtent();
  146. eLeft = xNum - mWMargin;
  147. eRight = xNum + mWMargin;
  148. eTop = yNum + mHMargin;
  149. eBottom = yNum - mHMargin;
  150. if (drawIt) {
  151. showGeocode=true;
  152. geocodeX=xNum;
  153. geocodeY=yNum;
  154. geocodeLabel=theLabel;
  155. }
  156. sendMapXML();
  157. }
  158. function zoomToEnvelope(minXin,minYin,maxXin,maxYin) {
  159. saveLastExtent();
  160. eLeft=minXin;
  161. eBottom=minYin;
  162. eRight=maxXin;
  163. eTop=maxYin;
  164. checkFullExtent();
  165. sendMapXML()
  166. }
  167. // zoom to center of fullextent at set scale
  168. function zoomScale(inScale) {
  169. // inScale is scale factor where 1.0 = 100% of fullWidth and fullHeight
  170. var halfWidth = fullWidth / 2;
  171. var halfHeight = fullHeight / 2
  172. var midX = eRight - (xDistance / 2);
  173. var midY = eTop - (yDistance / 2);
  174. var newWidth = halfWidth * inScale;
  175. var newHeight = halfHeight * inScale;
  176. saveLastExtent();
  177. eLeft = midX - newWidth;
  178. eRight = midX + newWidth;
  179. eTop = midY + newHeight;
  180. eBottom = midY - newHeight;
  181. sendMapXML();
  182. }
  183. // get URLs and extents from URL
  184. function getCommandLineParams(cmdString) {
  185. // Parse out from URL querystring parameters 
  186. // to pass to the viewer.
  187. // Syntax:
  188. // Host=Hostmachine name of Host, if not default
  189. // Service=MapService name of MapService, if not default
  190. // OVMap=OvMapService name of Overview MapService, if not default
  191. // Box=minX:minY:maxX:maxY extent to be displayed
  192. // Layers=0101101 visible layers,starting from topmost: 0=not visible;1=visible
  193. // ActiveLayer=layerIndex index of layer to be active, if not default
  194. // Query=queryExpression query expression to be send on load - expression must be escaped in URL
  195. // QueryZoom=Yes zoom to above query?
  196. // StartLeft,StartTop,
  197. // StartRight,StartBottom starting coords - alternative to Box
  198. // LimitLeft,LimitTop,
  199. // LimitRight,LimitBottom limit coords
  200. // DebugOn=Yes Show all requests, responses
  201. //
  202. setLayerVisible.length=0;
  203. var cmdString2 = cmdString.toUpperCase();
  204. var startpos = 0;
  205. var endpos = 0;
  206. var pos = cmdString2.indexOf("HOST=");
  207. if (pos!=-1) {
  208. startpos = pos + 5;
  209. endpos = cmdString.indexOf("&",startpos);
  210. if (endpos==-1) endpos = cmdString.length;
  211. hostName = cmdString.substring(startpos,endpos);
  212. serverURL  = "http://" + hostName + "/servlet/com.esri.esrimap.Esrimap?ServiceName=";
  213. }
  214. pos = cmdString2.indexOf("SERVICE="); // formally was MAPSERVICE=
  215. if (pos!=-1) {
  216. startpos = pos + 8;
  217. endpos = cmdString.indexOf("&",startpos);
  218. if (endpos==-1) endpos = cmdString.length;
  219. imsURL = serverURL + cmdString.substring(startpos,endpos);
  220. }
  221. pos = cmdString2.indexOf("OVMAP="); // formally was OVMAPSERVICE=
  222. if (pos!=-1) {
  223. startpos = pos + 6;
  224. endpos = cmdString.indexOf("&",startpos);
  225. if (endpos==-1) endpos = cmdString.length;
  226. imsOVURL = serverURL + cmdString.substring(startpos,endpos);
  227. }
  228. pos = cmdString2.indexOf("BOX=");
  229. if (pos!=-1) {
  230. startpos = pos + 4;
  231. endpos = cmdString.indexOf("&",startpos);
  232. if (endpos==-1) endpos = cmdString.length;
  233. var boxString = cmdString.substring(startpos,endpos);
  234. //alert(boxString);
  235. var xyBox = boxString.split(":");
  236. if (xyBox.length==4) {
  237. startLeft = parseFloat(xyBox[0]);
  238. startBottom = parseFloat(xyBox[1]);
  239. startRight = parseFloat(xyBox[2]);
  240. startTop = parseFloat(xyBox[3]);
  241. eLeft=startLeft;
  242. eBottom=startBottom;
  243. eRight=startRight;
  244. eTop = startTop;
  245. }
  246. //xyBox=null;
  247. }
  248. pos = cmdString2.indexOf("MAXRECT=");
  249. if (pos!=-1) {
  250. startpos = pos + 8;
  251. endpos = cmdString.indexOf("&",startpos);
  252. if (endpos==-1) endpos = cmdString.length;
  253. var boxString = cmdString.substring(startpos,endpos);
  254. //alert(boxString);
  255. var xyBox = boxString.split(":");
  256. if (xyBox.length==4) {
  257. limitLeft = xyBox[0];
  258. limitBottom = xyBox[1];
  259. limitRight = xyBox[2];
  260. limitTop = xyBox[3];
  261. }
  262. //xyBox=null;
  263. }
  264. if (aimsLayersPresent) {
  265. // you need to have aimsLayers.js loaded
  266. pos = cmdString2.indexOf("LAYERS=");
  267. if (pos!=-1) {
  268. startpos = pos + 7;
  269. endpos = cmdString.indexOf("&",startpos);
  270. if (endpos==-1) endpos = cmdString.length;
  271. var layers = cmdString.substring(startpos,endpos);
  272. //"0" means the layer should be turned off, and "1" means
  273. //the layer should be visible.  For example, "1001" means there
  274. //are 4 layers.  The first and last layer are visible, and the
  275. //middle two layers are turned off. The first number represents
  276. //the top-most layer.
  277. //Parse the layers string
  278. var numLayers=layers.length;
  279. icount=0;
  280. //alert(layers);
  281. while (icount<=numLayers-1) {
  282.   onoff=layers.substring(icount,icount+1);
  283.   if (onoff=='0') {
  284.    setLayerVisible[icount]=false;
  285.   }
  286.   else if (onoff=='1') {
  287.     setLayerVisible[icount]=true;
  288.   }
  289.   icount=icount+1;
  290. }
  291. layers="";
  292. }
  293. pos = cmdString2.indexOf("ACTIVELAYER=");
  294. if (pos!=-1) {
  295. startpos = pos + 12;
  296. endpos = cmdString.indexOf("&",startpos);
  297. if (endpos==-1) endpos = cmdString.length;
  298. var actlyr = cmdString.substring(startpos,endpos);
  299. //alert(actlyr);
  300. ActiveLayerIndex = parseInt(actlyr);
  301. //selectType = LayerType[ActiveLayerIndex];
  302. actlyr = "";
  303. }
  304. if (aimsQueryPresent) {
  305. // you need to have aimsQuery.js loaded
  306. pos = cmdString2.indexOf("QUERY=");
  307. if (pos!=-1) {
  308. startpos = pos + 6;
  309. endpos = cmdString.indexOf("&",startpos);
  310. if (endpos==-1) endpos = cmdString.length;
  311. var escQuery = cmdString.substring(startpos,endpos);
  312. escQuery = replacePlus(escQuery);
  313. escQuery = unescape(escQuery);
  314. highlightedOne = makeXMLsafe(escQuery);
  315. escQuery="";
  316. }
  317. if (highlightedOne!="") {
  318. pos = cmdString2.indexOf("QUERYZOOM=YES");
  319. if (pos!=-1) queryZoom = true;
  320. }
  321. }
  322. }
  323. pos = cmdString2.indexOf("STARTLEFT=");
  324. if (pos!=-1) {
  325. startpos = pos + 10;
  326. endpos = cmdString.indexOf("&",startpos);
  327. if (endpos==-1) endpos = cmdString.length;
  328. startLeft = cmdString.substring(startpos,endpos);
  329. }
  330. pos = cmdString2.indexOf("STARTTOP=");
  331. if (pos!=-1) {
  332. startpos = pos + 9;
  333. endpos = cmdString.indexOf("&",startpos);
  334. if (endpos==-1) endpos = cmdString.length;
  335. startTop = cmdString.substring(startpos,endpos);
  336. }
  337. pos = cmdString2.indexOf("STARTRIGHT=");
  338. if (pos!=-1) {
  339. startpos = pos + 11;
  340. endpos = cmdString.indexOf("&",startpos);
  341. if (endpos==-1) endpos = cmdString.length;
  342. startRight = cmdString.substring(startpos,endpos);
  343. }
  344. pos = cmdString2.indexOf("STARTBOTTOM=");
  345. if (pos!=-1) {
  346. startpos = pos + 12;
  347. endpos = cmdString.indexOf("&",startpos);
  348. if (endpos==-1) endpos = cmdString.length;
  349. startBottom = cmdString.substring(startpos,endpos);
  350. }
  351. pos = cmdString2.indexOf("LIMITLEFT=");
  352. if (pos!=-1) {
  353. startpos = pos + 10;
  354. endpos = cmdString.indexOf("&",startpos);
  355. if (endpos==-1) endpos = cmdString.length;
  356. limitLeft = cmdString.substring(startpos,endpos);
  357. }
  358. pos = cmdString2.indexOf("LIMITTOP=");
  359. if (pos!=-1) {
  360. startpos = pos + 9;
  361. endpos = cmdString.indexOf("&",startpos);
  362. if (endpos==-1) endpos = cmdString.length;
  363. limitTop = cmdString.substring(startpos,endpos);
  364. }
  365. pos = cmdString2.indexOf("LIMITRIGHT=");
  366. if (pos!=-1) {
  367. startpos = pos + 11;
  368. endpos = cmdString.indexOf("&",startpos);
  369. if (endpos==-1) endpos = cmdString.length;
  370. limitRight = cmdString.substring(startpos,endpos);
  371. }
  372. pos = cmdString2.indexOf("LIMITBOTTOM=");
  373. if (pos!=-1) {
  374. startpos = pos + 12;
  375. endpos = cmdString.indexOf("&",startpos);
  376. if (endpos==-1) endpos = cmdString.length;
  377. limitBottom = cmdString.substring(startpos,endpos);
  378. }
  379. pos = cmdString2.indexOf("EXTENT=AUTO");
  380. if (pos!=-1) {
  381. startLeft=0;
  382. startRight=0;
  383. startTop=0;
  384. startBottom=0;
  385. limitLeft=0;
  386. limitRight=0;
  387. limitTop=0;
  388. limitBottom=0;
  389. getStartingExtent=true;
  390. getLimitExtent=true;
  391. }
  392. pos = cmdString2.indexOf("DEBUG=YES");
  393. if (pos==-1) pos = cmdString2.indexOf("DEBUG=TRUE");
  394. if (pos!=-1) {
  395. debugOn=3;
  396. }
  397. //alert("imsURL=" + imsURL + "nimsOVURL=" + imsOVURL);
  398. if (imsURL!="") {
  399. imsQueryURL= imsURL + "&CustomService=Query";
  400. imsGeocodeURL = imsURL + "&CustomService=Geocode";
  401. //canLoad=false;
  402. // if starting extents zero'd then flag to get start from mapservice
  403. if ((startLeft!=0) && (startRight!=0)) getStartingExtent=false;
  404. // if limit extents zero'd then flag to get max from mapservice
  405. if ((limitLeft!=0) && (limitRight!=0)) {
  406. getLimitExtent=false;
  407. enforceFullExtent=true;
  408. }
  409. }
  410. // get directory path of URL
  411. function getPath(theFullPath) {
  412. var theSlash = theFullPath.lastIndexOf("/");
  413. var theDir = theFullPath.substring(0,theSlash);
  414. if (theDir==null) theDir="";
  415. theDir = theDir + "/";
  416. return theDir;
  417. }
  418. // check for existance of layer
  419. function hasLayer(name) {
  420. var result = false;
  421. if (isNav4) {
  422. if (document.layers[name]!=null) result=true;
  423. }  else if (isIE) {
  424. if (eval('document.all.' + name)!=null) result=true;
  425. } else if (isNav) {
  426. var theElements = document.getElementsByTagName("DIV");
  427. var theObj;
  428. var j = -1;
  429. for (i=0;i<theElements.length;i++) {
  430. if (theElements[i].id==name) result=true;
  431. }
  432.     }
  433. return result;
  434. }
  435. // put up the "RetriveData" image
  436. function showRetrieveData() {
  437. if (hasLayer("LoadData")) {
  438. showLayer("LoadData");
  439. }
  440. }
  441. // hide the "RetriveData" image
  442. function hideRetrieveData() {
  443. if (hasLayer("LoadData")) {
  444. hideLayer("LoadData");
  445. }
  446. }
  447. // put up the "RetriveMap" image
  448. function showRetrieveMap() {
  449. if (hasLayer("LoadMap")) {
  450. showLayer("LoadMap");
  451. }
  452. }
  453. // hide the "RetriveMap" image
  454. function hideRetrieveMap() {
  455. if (hasLayer("LoadMap")) {
  456. hideLayer("LoadMap");
  457. }
  458. }
  459. /*  *****************************************************
  460. * Various Distance Conversion Functions
  461. * *****************************************************
  462. */
  463. // get scale bar distance
  464. function getScaleBarDistance() {
  465. // get distance from left and right values in map units
  466. // convert to ScaleBar units then clip to ScaleBar size
  467. // Note: decimal are not hard coded to allow use with locales using commas instead of points.
  468. var mUnits = MapUnits;
  469. var mDistance = eRight - eLeft;
  470. var sbDistance = 0
  471. if (MapUnits=="DEGREES") {
  472. // if DEGREES then convert to feet
  473. // first get mid y point
  474. var midY = eBottom + (eTop-eBottom)/2;
  475. var tempL = eLeft;
  476. var tempR = eRight;
  477. if (tempL<-180) tempL = (-1799999 /10000);
  478. if (tempR>180) tempL = (1799999/10000);
  479. var Lon1 = tempL * Math.PI / 180;
  480. var Lon2 = tempR * Math.PI / 180;
  481. var Lat1 = midY * Math.PI / 180;
  482. var Lat2 = midY * Math.PI / 180;
  483. var LonDist = Math.abs(Lon2-Lon1);
  484. var LatDist = Math.abs(Lat1-Lat2);
  485. var A = Math.pow(Math.sin(LatDist / 2),2) + Math.cos(Lat1) * Math.cos(Lat2) * Math.pow(Math.sin(LonDist /2),2);
  486. //var A = Math.cos(Lat1) * Math.cos(Lat2) * Math.pow(Math.sin(LonDist /2),2);
  487. var C = 2 * Math.asin(Math.min(1, Math.sqrt(A)));
  488. var D = (3963 - 13 * Math.sin((Lat1 + Lat2) / 2)) * C
  489. mDistance = D * 5280;
  490. mUnits = "FEET";
  491. }
  492. if (mUnits != ScaleBarUnits) {
  493. theDist = mDistance
  494. mDistance = convertUnits(theDist,mUnits,ScaleBarUnits);
  495. }
  496. sbDistance = mDistance/5;
  497. // /*
  498. var num1 = 0;
  499. var num2 = sbDistance;
  500. if (sbDistance>10000000) {
  501. num1 = parseInt(sbDistance/5000000);
  502. num2 = num1 * 5000000;
  503. } else if (sbDistance>1000000) {
  504. num1 = parseInt(sbDistance/500000);
  505. num2 = num1 * 500000;
  506. } else if (sbDistance>100000) {
  507. num1 = parseInt(sbDistance/50000);
  508. num2 = num1 * 50000;
  509. } else if (sbDistance>10000) {
  510. num1 = parseInt(sbDistance/5000);
  511. num2 = num1 * 5000;
  512. } else if (sbDistance>1000) {
  513. num1 = parseInt(sbDistance/500);
  514. num2 = num1 * 500;
  515. } else if (sbDistance>100) {
  516. num1 = parseInt(sbDistance/50);
  517. num2 = num1 * 50;
  518. } else if (sbDistance>10) {
  519. num1 = parseInt(sbDistance/5);
  520. num2 = num1 * 5;
  521. } else if (sbDistance>1) {
  522. num1 = parseInt(sbDistance/(25/100));
  523. num2 = num1 * (25/100);
  524. } else if (sbDistance>0.1) {
  525. num1 = parseInt(sbDistance/(25/1000));
  526. num2 = num1 * (25/1000);
  527. }
  528. sbDistance = num2;
  529. // */
  530. if (sbDistance > 2) {
  531. ScaleBarPrecision = "0";
  532. } else if (sbDistance > 1) {
  533. ScaleBarPrecision = "1";
  534. } else if (sbDistance > 1/10) {
  535. ScaleBarPrecision = "2";
  536. } else if (sbDistance > 1/100) {
  537. ScaleBarPrecision = "3";
  538. } else {
  539. ScaleBarPrecision = "4";
  540. }
  541. //alert(mDistance);
  542. return sbDistance;
  543. }
  544. // calculate distance to current scalebarunits
  545. function calcDistance(mX,mY) {
  546. // Note: decimal are not hard coded to allow use with locales using commas instead of points.
  547. if (clickCount>0) {
  548. var mUnits = MapUnits;
  549. var mDistance = 0;
  550. var p = clickCount-1;
  551. var Lon1 = clickPointX[p] * Math.PI / 180;
  552. var Lon2 = mX * Math.PI / 180;
  553. var Lat1 = clickPointY[p] * Math.PI / 180;
  554. var Lat2 = mY * Math.PI / 180;
  555. var LonDist = Lon1-Lon2;
  556. var LatDist = Lat1-Lat2;
  557. if (MapUnits=="DEGREES") {
  558. var A = Math.pow(Math.sin(LatDist / 2),2) + Math.cos(Lat1) * Math.cos(Lat2) * Math.pow(Math.sin(LonDist /2),2);
  559. //var A = Math.cos(Lat1) * Math.cos(Lat2) * Math.pow(Math.sin(LonDist /2),2);
  560. var C = 2 * Math.asin(Math.min(1, Math.sqrt(A)));
  561. var D = (3963 - 13 * Math.sin((Lat1 + Lat2) / 2)) * C
  562. mDistance = D * 5280;
  563. mUnits = "FEET";
  564. } else {
  565. var xD = Math.abs(mX - clickPointX[p]);
  566. var yD = Math.abs(mY - clickPointY[p]);
  567. mDistance = Math.sqrt(Math.pow(xD,2) + Math.pow(yD,2));
  568. }
  569. var theDist = convertUnits(mDistance,mUnits,ScaleBarUnits);
  570. var u = Math.pow(10,numDecimals);
  571. currentMeasure = parseInt(theDist*u+(5/10))/u;
  572. updateMeasureBox();
  573. }
  574. }
  575. // convert the amounts to new units
  576. function convertUnits(theDist1,mUnits,sUnits) {
  577. // Note: decimal are not hard coded to allow use with locales using commas instead of points.
  578. var theDist = parseFloat(theDist1);
  579. var mDistance = theDist;
  580. //alert(theDist);
  581. if (mUnits == "FEET") {
  582. if (sUnits=="MILES") {
  583. mDistance = theDist / 5280;
  584. } else if (sUnits == "METERS") {
  585. mDistance = theDist * (3048/10000);
  586. } else if (sUnits == "KILOMETERS") {
  587. mDistance = theDist * (3048/10000000);
  588. }
  589. } else {
  590. if (sUnits=="MILES") {
  591. mDistance = theDist * (6213711922/10000000000000);
  592. } else if (sUnits == "FEET") {
  593. mDistance = theDist * (3280839895/1000000000);
  594. } else if (sUnits == "KILOMETERS") {
  595. mDistance = theDist / 1000;
  596. }
  597. }
  598. var u = Math.pow(10,numDecimals);
  599. //alert(u);
  600. if (!isNav) mDistance = parseInt(mDistance * u + (5/10)) / u
  601. //alert(mDistance);
  602. return mDistance;
  603. }
  604. // set new map extent 
  605. function setExtent(newLeft, newTop, newRight, newBottom) {
  606. eLeft = newLeft;
  607. eTop = newTop;
  608. eRight = newRight;
  609. eBottom = newBottom;
  610. }
  611. //  set new full extent 
  612. function setFullExtent(maxLeft, maxTop, maxRight, maxBottom) {
  613. fullLeft = maxLeft;
  614. fullTop = maxTop;
  615. fullRight = maxRight;
  616. fullBottom = maxBottom;
  617. fullWidth = Math.abs(fullRight-fullLeft);
  618. fullHeight = Math.abs(fullTop-fullBottom);
  619. }
  620. function beforeMapRefresh() {
  621.  // add any code for checking parameters before map update
  622.  // called by sendXML() before writing XML request
  623.  //alert("Yup. It works.[1]");
  624. }
  625.  
  626. function afterMapRefresh() {
  627.  // add any code for checking parameters after map update
  628.  // called by processXML() if XMMmode=1 after image and extent is updated
  629.  //alert("Yup. It works.[1]"); 
  630. }
  631. // zoom using button.
  632. // zoomType: 1=in; 2=out
  633. function zoomButton(zoomType) {
  634. saveLastExtent();
  635. if (zoomType == 1) {
  636. // zoom in
  637. eLeft = eLeft + (xHalf/2);
  638. eRight = eRight - (xHalf/2);
  639. eTop = eTop - (yHalf/2);
  640. eBottom = eBottom + (yHalf/2);
  641. }
  642. else {
  643. // zoom out
  644. eLeft = eLeft - xHalf;
  645. eRight = eRight + xHalf;
  646. eTop = eTop + yHalf;
  647. eBottom = eBottom - yHalf;
  648. }
  649. checkFullExtent();
  650. //var theString = writeXML();
  651. sendMapXML();
  652. }
  653. // pan using arrow buttons
  654. function panButton(panType) {
  655. //alert("Left:" + left + "nTop:" + top + "nRight:" + right + "nBottom:" + bottom + "nWidth:" + xDistance + "nHeight:" + yDistance + "nPanX:" + panX + "nPanY:" + panY);
  656. saveLastExtent();
  657. xDistance = Math.abs(eRight-eLeft);
  658. yDistance = Math.abs(eTop-eBottom);
  659. panX = xDistance * panFactor;
  660. panY = yDistance * panFactor;
  661. switch(panType) {
  662. //if (panType == 1) {
  663. case 1:
  664. //west
  665. eLeft = eLeft - panX;
  666. eRight = eLeft + xDistance;
  667. break
  668. case 2:
  669. // north
  670. eTop = eTop + panY;
  671. eBottom = eTop - yDistance;
  672. break
  673. case 3:
  674. // east
  675. eRight = eRight + panX;
  676. eLeft = eRight - xDistance;
  677. break
  678. case 4:
  679. // south
  680. eBottom = eBottom - panY;
  681. eTop = eBottom + yDistance;
  682. break
  683. case 5:
  684. // southwest
  685. eTop = eTop - panY;
  686. eLeft = eLeft - panX;
  687. eBottom = eTop - yDistance;
  688. eRight = eLeft + xDistance;
  689. break
  690. case 6:
  691. // northwest
  692. eTop = eTop + panY;
  693. eLeft = eLeft - panX;
  694. eBottom = eTop - yDistance;
  695. eRight = eLeft + xDistance;
  696. break
  697. case 7:
  698. // northeast
  699. eTop = eTop + panY;
  700. eLeft = eLeft + panX;
  701. eBottom = eTop - yDistance;
  702. eRight = eLeft + xDistance;
  703. break
  704. case 8:
  705. // southeast
  706. eTop = eTop - panY;
  707. eLeft = eLeft + panX;
  708. eBottom = eTop - yDistance;
  709. eRight = eLeft + xDistance;
  710. }
  711. checkFullExtent();
  712. //alert("Left:" + left + "nTop:" + top + "nRight:" + right + "nBottom:" + bottom + "nWidth:" + xDistance + "nHeight:" + yDistance + "nPanX:" + panX + "nPanY:" + panY);
  713. //var theString = writeXML();
  714. sendMapXML();
  715. }
  716. function checkFullExtent() {
  717. if (enforceFullExtent) {
  718. var xDistance1 = eRight - eLeft;
  719. var yDistance1 = eTop - eBottom;
  720. if (xDistance1>fullWidth) xDistance1 = fullWidth;
  721. if (yDistance1>fullHeight) yDistance1 = fullHeight;
  722. //alert("Adjusting extent to image proportions");
  723. if ((eLeft < limitLeft) && (eTop > limitTop)) {
  724. eLeft = limitLeft;
  725. eRight = limitRight;
  726. } else {
  727. if (eLeft < limitLeft) {
  728. eLeft = limitLeft;
  729. eRight = eLeft + xDistance1;
  730. } else if (eRight > limitRight) {
  731. eRight = limitRight;
  732. eLeft = eRight - xDistance1;
  733. }
  734. }
  735. if ((eLeft < limitLeft) && (eTop > limitTop)) {
  736. eTop = limitTop;
  737. eBottom = limitBottom;
  738. } else {
  739. if (eTop > limitTop) {
  740. eTop = limitTop;
  741. eBottom = eTop - yDistance1;
  742. } else if (eBottom < limitBottom) {
  743. eBottom = limitBottom;
  744. eTop = eBottom + yDistance1;
  745. }
  746. }
  747. }
  748. }