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

GIS编程

开发平台:

ASP/ASPX

  1. // aimsNavigation.js
  2. /*
  3. *  JavaScript template file for ArcIMS HTML Viewer
  4. * dependent on aimsXML.js, ArcIMSparam.js, aimsCommon.js, aimsMap.js,
  5. * aimsLayers.js, aimsDHTML.js
  6. * aimsClick.js
  7. */
  8. aimsNavigationPresent=true;
  9. /*
  10. ***************************************************************************************
  11. Map Navigation functions - Zoom , Pan, etc.
  12. ***************************************************************************************
  13. */
  14. // convert mouse click xy's into map coordinates
  15. function getMapXY(xIn,yIn) {
  16. mouseX = xIn;
  17. pixelX = xDistance / iWidth;
  18. mapX = pixelX * mouseX + eLeft;
  19. mouseY = iHeight - yIn;
  20. pixelY = yDistance / iHeight;
  21. mapY = pixelY * mouseY + eBottom;
  22. }
  23. function getImageXY(e) {
  24. if (isNav) {
  25. mouseX=e.pageX;
  26. mouseY=e.pageY;
  27. } else {
  28. mouseX=event.clientX + document.body.scrollLeft;
  29. mouseY=event.clientY + document.body.scrollTop;
  30. }
  31. // subtract offsets from page left and top
  32. mouseX = mouseX-hspc;
  33. mouseY = mouseY-vspc;
  34. }
  35. function getOVImageXY(e) {
  36. if (isNav) {
  37. mouseX=e.pageX;
  38. mouseY=e.pageY;
  39. } else {
  40. mouseX=event.clientX + document.body.scrollLeft;
  41. mouseY=event.clientY + document.body.scrollTop;
  42. }
  43. // subtract offsets from page left and top
  44. mouseX = mouseX-ovHspc;
  45. mouseY = mouseY-ovVspc;
  46. }
  47. // get coordinates on ov map and reset display
  48. function ovMapClick(x,y) {
  49. var ovWidth = i2Width;
  50. var ovHeight = i2Height;
  51. var ovXincre = fullOVWidth / ovWidth;
  52. var ovYincre = fullOVHeight / ovHeight;
  53. var ovX = x;
  54. var ovY = ovHeight - y;
  55. var ovmapX = ovX * ovXincre + fullOVLeft;
  56. var ovmapY = ovY * ovYincre + fullOVBottom;
  57. saveLastExtent();
  58. eLeft = ovmapX - xHalf;
  59. eRight = ovmapX + xHalf;
  60. eTop = ovmapY + yHalf;
  61. eBottom = ovmapY - yHalf;
  62. sendMapXML();
  63. }
  64. // get click on OVmap and move display there
  65. function ovMap2Click(e) {
  66. getOVImageXY(e);
  67. mouseY = mouseY - ovBorderWidth;
  68. zooming=false;
  69. panning=false;
  70. selectBox=false;
  71. ovMapClick(mouseX,mouseY);
  72. }
  73. // zoom in around mouse click
  74. function zoomin(e) {
  75. getMapXY(mouseX,mouseY);
  76. var tempLeft=lastLeft;
  77. var tempRight=lastRight;
  78. var tempTop=lastTop;
  79. var tempBottom=lastBottom;
  80. saveLastExtent();
  81. eLeft = mapX - (xHalf/zoomFactor);
  82. eRight = mapX + (xHalf/zoomFactor);
  83. eTop = mapY + (yHalf/zoomFactor);
  84. eBottom = mapY - (yHalf/zoomFactor);
  85. sendMapXML();
  86. }
  87. // zoom out from mouse click
  88. function zoomout(e) {
  89. getMapXY(mouseX,mouseY);
  90. var tempLeft=lastLeft;
  91. var tempRight=lastRight;
  92. var tempTop=lastTop;
  93. var tempBottom=lastBottom;
  94. saveLastExtent();
  95. eLeft = mapX - (xDistance*zoomFactor/2);
  96. eRight = mapX + (xDistance*zoomFactor/2);
  97. eTop = mapY + (yDistance*zoomFactor/2);
  98. eBottom = mapY - (yDistance*zoomFactor/2);
  99. if (enforceFullExtent) {
  100. if ((eRight-eLeft)>fullWidth) {
  101. eLeft = fullLeft;
  102. eRight = fullRight;
  103. eTop = fullTop;
  104. eBottom = fullBottom;
  105. lastLeft=tempLeft;
  106. lastRight=tempRight;
  107. lastTop=tempTop;
  108. lastBottom=tempBottom;
  109. }
  110. }
  111. sendMapXML();
  112. }
  113. // get the coords at mouse position
  114. function getMouse(e) {
  115. window.status="";
  116. getImageXY(e);
  117. if (isIE) {
  118. if ((hasOVMap) && (ovIsVisible) && (ovMapIsLayer)) {
  119.   if ((mouseX<i2Width+2) && (mouseY<i2Height)) {
  120.  
  121. document.all.theTop.style.cursor = "default";
  122.   } else {
  123.   document.all.theTop.style.cursor = theCursor;
  124.   }
  125. }
  126. }
  127. if ((mouseX>iWidth) || (mouseY>iHeight) || (mouseX<=0) ||(mouseY<=0) || ((hasOVMap) && (ovIsVisible) && (mouseX<i2Width+ovBoxSize) && (mouseY<i2Height+ovBoxSize) && (ovMapIsLayer))) {
  128. chkMouseUp(e);
  129. } else {
  130. mouseStuff();
  131.   
  132. }
  133. return false;
  134. }
  135. function mouseStuff() {
  136. if ((zooming) || (selectBox)) {
  137. x2=mouseX;
  138. y2=mouseY;
  139. setClip();
  140. } else if (panning) {
  141. x2=mouseX;
  142. y2=mouseY;
  143. panMouse();
  144. }
  145. pixelX = xDistance / iWidth;
  146. mapX = pixelX * mouseX + eLeft;
  147. var theY = iHeight - mouseY;
  148. pixelY = yDistance / iHeight;
  149. mapY = pixelY * theY + eBottom;
  150. if (toolMode==20) {
  151. calcDistance(mapX,mapY);
  152. else if (showXYs) {
  153. var u = Math.pow(10,numDecimals);
  154. var uX = Math.round(mapX * u) / u
  155. var uY= Math.round(mapY * u) / u
  156. var mouseString = msgList[52] + uX + " , " + uY + " -- " + msgList[53] + mouseX + " , " + mouseY;
  157. if (showScalePercent) mouseString = mouseString + " -- " + msgList[54] + mapScaleFactor;
  158. window.status = mouseString;
  159. }
  160. }
  161. // start zoom in.... box displayed
  162. function startZoomBox(e) {
  163. moveLayer("theMap",hspc,vspc);
  164. getImageXY(e);
  165. // keep it within the MapImage
  166. if ((mouseX<iWidth) && (mouseY<iHeight)) {
  167. if (zooming) {
  168. stopZoomBox(e);
  169. } else {
  170. x1=mouseX;
  171. y1=mouseY
  172. x2=x1+1;
  173. y2=y1+1;
  174. zleft=x1;
  175. ztop=y1;
  176. zbottom=y1;
  177. zright=x1
  178. boxIt(x1,y1,x2,y2);
  179. zooming=true;
  180. }
  181. }
  182. return false;
  183. }
  184. // stop zoom box display... zoom in
  185. function stopZoomBox(e) {
  186. zooming=false;
  187. hideLayer("zoomBoxTop");
  188. hideLayer("zoomBoxLeft");
  189. hideLayer("zoomBoxRight");
  190. hideLayer("zoomBoxBottom");
  191. if ((zright <zleft+2) && (zbottom < ztop+2)) {
  192. zoomin(e);
  193. } else {
  194. var tempLeft=lastLeft;
  195. var tempRight=lastRight;
  196. var tempTop=lastTop;
  197. var tempBottom=lastBottom;
  198. saveLastExtent();
  199. pixelX = xDistance / iWidth;
  200. var theY = iHeight - ztop;
  201. pixelY = yDistance / iHeight;
  202. eTop = pixelY * theY + eBottom;
  203. eRight = pixelX * zright + eLeft;
  204. eLeft = pixelX * zleft + eLeft;
  205. theY = iHeight - zbottom;
  206. pixelY = yDistance / iHeight;
  207. eBottom = pixelY * theY + eBottom;
  208. window.scrollTo(0,0);
  209. sendMapXML();
  210. }
  211. return true;
  212. }
  213. // start zoom out... box displayed
  214. function startZoomOutBox(e) {
  215. moveLayer("theMap",hspc,vspc);
  216. getImageXY(e);
  217. // keep it within the MapImage
  218. if ((mouseX<iWidth) && (mouseY<iHeight)) {
  219. if (zooming) {
  220. stopZoomOutBox(e);
  221. } else {
  222. x1=mouseX;
  223. y1=mouseY
  224. x2=x1+1;
  225. y2=y1+1;
  226. zleft=x1;
  227. ztop=y1;
  228. zbottom=y1;
  229. zright=x1
  230. boxIt(x1,y1,x2,y2);
  231. zooming=true;
  232. }
  233. }
  234. return false;
  235. }
  236. // stop zoom out box. . . zoom out
  237. function stopZoomOutBox(e) {
  238. zooming=false;
  239. hideLayer("zoomBoxTop");
  240. hideLayer("zoomBoxLeft");
  241. hideLayer("zoomBoxRight");
  242. hideLayer("zoomBoxBottom");
  243. if ((zright <zleft+2) && (zbottom < ztop+2)) {
  244. zoomout(e);
  245. } else {
  246. var tempLeft=eLeft;
  247. var tempRight=eRight;
  248. var tempTop=eTop;
  249. var tempBottom=eBottom;
  250. saveLastExtent();
  251. var zWidth = Math.abs(zright-zleft);
  252. var zHeight = Math.abs(ztop-zbottom);
  253. var xRatio = iWidth / zWidth;
  254. var yRatio = iHeight / zHeight;
  255. var xAdd = xRatio * xDistance / 2;
  256. var yAdd = yRatio * yDistance / 2;
  257. eLeft = eLeft - xAdd;
  258. eRight = eRight + xAdd;
  259. eTop = eTop + yAdd;
  260. eBottom = eBottom - yAdd;
  261. window.scrollTo(0,0);
  262. if (enforceFullExtent) {
  263. if ((eRight-eLeft)>fullWidth) {
  264. eLeft = fullLeft;
  265. eRight = fullRight;
  266. eTop = fullTop;
  267. eBottom = fullBottom;
  268. lastLeft=tempLeft;
  269. lastRight=tempRight;
  270. lastTop=tempTop;
  271. lastBottom=tempBottom;
  272. }
  273. }
  274. sendMapXML();
  275. }
  276. return true;
  277. }
  278. // clip zoom box layer to mouse coords
  279. function setClip() {
  280. var tempX=x1;
  281. var tempY=y1;
  282. if (x1>x2) {
  283. zright=x1;
  284. zleft=x2;
  285. } else {
  286. zleft=x1;
  287. zright=x2;
  288. }
  289. if (y1>y2) {
  290. zbottom=y1;
  291. ztop=y2;
  292. } else {
  293. ztop=y1;
  294. zbottom=y2;
  295. }
  296. if ((x1 != x2) && (y1 != y2)) {
  297. boxIt(zleft,ztop,zright,zbottom);
  298. }
  299. }
  300. // start pan.... image will move
  301. function startPan(e) {
  302. moveLayer("theMap",hspc,vspc);
  303. getImageXY(e);
  304. // keep it within the MapImage
  305. if ((mouseX<iWidth) && (mouseY<iHeight)) {
  306. if (panning) {
  307. stopPan(e);
  308. } else {
  309. x1=mouseX;
  310. y1=mouseY
  311. x2=x1+1;
  312. y2=y1+1;
  313. panning=true;
  314. }
  315. }
  316. return false;
  317. }
  318. // stop moving image.... pan 
  319. function stopPan(e) {
  320. window.scrollTo(0,0);
  321. panning=false;
  322. var tempLeft=eLeft;
  323. var tempRight=eRight;
  324. var tempTop=eTop;
  325. var tempBottom=eBottom;
  326. //saveLastExtent();
  327. var ixOffset = x2-x1;
  328. var iyOffset = y1-y2;
  329. pixelX = xDistance / iWidth;
  330. var theY = iHeight - ztop;
  331. pixelY = yDistance / iHeight;
  332. var xOffset = pixelX * ixOffset;
  333. var yOffset = pixelY * iyOffset;
  334. eTop = eTop - yOffset;
  335. eRight = eRight - xOffset;
  336. eLeft = eLeft - xOffset;
  337. eBottom = eBottom - yOffset;
  338. if (enforceFullExtent) {
  339. if (eLeft < limitLeft) {
  340. eLeft = limitLeft;
  341. eRight = eLeft + xDistance;
  342. }
  343. if (eTop > limitTop) {
  344. eTop = limitTop;
  345. eBottom = eTop - yDistance;
  346. }
  347. if (eRight > limitRight) {
  348. eRight = limitRight;
  349. eLeft = eRight - xDistance;
  350. }
  351. if (eBottom < limitBottom) {
  352. eBottom = limitBottom;
  353. eTop = eBottom + yDistance;
  354. }
  355. }
  356. lastLeft = tempLeft;
  357. lastRight = tempRight;
  358. lastTop = tempTop;
  359. lastBottom = tempBottom;
  360. //hideLayer("theMap");
  361. if (hasLayer("theMapClicks")) {
  362. document.theClickImage.src = blankImage;
  363. }
  364. document.theImage.onload = resetPanImage;
  365. sendMapXML();
  366. return true;
  367. }
  368. // move map image with mouse
  369. function panMouse() {
  370. var xMove = x2-x1;
  371. var yMove = y2-y1;
  372. var cLeft = -xMove;
  373. var cTop = -yMove;
  374. var cRight = iWidth;
  375. var cBottom = iHeight;
  376. if (xMove>0) {
  377. cLeft = 0;
  378. cRight = iWidth - xMove;
  379. }
  380. if (yMove>0) {
  381. cTop = 0;
  382. cBottom = iHeight - yMove;
  383. }
  384. clipLayer2("theMap",cLeft,cTop,cRight,cBottom);
  385. moveLayer("theMap",xMove+hspc,yMove+vspc);
  386. if (hasLayer("theMapClicks")) {
  387. clipLayer2("theMapClicks",cLeft,cTop,cRight,cBottom);
  388. moveLayer("theMapClicks",xMove+hspc,yMove+vspc);
  389. }
  390. }
  391. // pan to mouse click
  392. function pan(e) {
  393. getMapXY(mouseX,mouseY);
  394. var tempLeft=lastLeft;
  395. var tempRight=lastRight;
  396. var tempTop=lastTop;
  397. var tempBottom=lastBottom;
  398. saveLastExtent();
  399. eLeft = mapX - xHalf;
  400. eRight = mapX + xHalf;
  401. eTop = mapY + yHalf;
  402. eBottom = mapY - yHalf;
  403. sendMapXML();
  404. }
  405. function setZoomColor() {
  406. setLayerBackgroundColor("zoomBoxTop", zoomBoxColor);
  407. setLayerBackgroundColor("zoomBoxLeft", zoomBoxColor);
  408. setLayerBackgroundColor("zoomBoxRight", zoomBoxColor);
  409. setLayerBackgroundColor("zoomBoxBottom", zoomBoxColor);
  410. setLayerBackgroundColor("zoomOVBoxTop", zoomBoxColor);
  411. setLayerBackgroundColor("zoomOVBoxLeft", zoomBoxColor);
  412. setLayerBackgroundColor("zoomOVBoxRight", zoomBoxColor);
  413. setLayerBackgroundColor("zoomOVBoxBottom", zoomBoxColor);
  414. }