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

GIS编程

开发平台:

ASP/ASPX

  1. // aimsSelect.js
  2. /*
  3. *  JavaScript template file for ArcIMS HTML Viewer
  4. * dependent on aimsXML.js, ArcIMSparam.js, aimsCommon.js, aimsMap.js, aimsIdentify, and aimsLayers.js
  5. * To be interactive, dependent also on aimsDHTML.js, aimsClick.js, and aimsNavigation.js
  6. */
  7. aimsSelectPresent=true;
  8. var selectData = new Array();
  9. var selectLeft = new Array();
  10. var selectRight = new Array();
  11. var selectTop = new Array();
  12. var selectBottom = new Array();
  13. var selMaxEnvelope = new Array();
  14. var selectLayer="";
  15. var selectType = "";
  16. var selectCount = 0;
  17. var selectBlurb = "";
  18. var selectEnvelope="";
  19. var highlightedOne = "";
  20. //mode - 0=selection; 1=query
  21. var queryMode=1;
  22. //mode - 1=query; 2=box,point; 3=line,polygon
  23. var selectionMode=1;
  24. var setQueryString="";
  25. var shapeBufferDistance = 0;
  26. /*
  27. ***************************************************************************************
  28. Selection functions 
  29. ***************************************************************************************
  30. */
  31. // select feature
  32. function select(e) {
  33. //getImageXY(e);
  34. getMapXY(mouseX,mouseY);
  35. searchTolerance = (xDistance/iWidth) * pixelTolerance;
  36. var tempWest = mapX - searchTolerance;
  37. var tempNorth = mapY + searchTolerance;
  38. var tempEast = mapX + searchTolerance;
  39. var tempSouth = mapY - searchTolerance;
  40. queryStartRecord=1;
  41. selectEnvelope='maxy="' + forceComma(tempNorth) + '" maxx="' + forceComma(tempEast) + '" miny="' + forceComma(tempSouth) + '" minx="' + forceComma(tempWest) + '"';
  42. selectionMode=2;
  43. showRetrieveData();
  44. var theString = writeGetFeatures2(tempWest,tempSouth,tempEast,tempNorth);
  45. sendToServer(imsQueryURL,theString,selectXMLMode);
  46. }
  47. // start select box display
  48. function startSelectBox(e) {
  49. if (checkIfActiveLayerAvailable()) {
  50. moveLayer("theMap",hspc,vspc);
  51. getImageXY(e);
  52. // keep it within the MapImage
  53. if ((mouseX<iWidth) && (mouseY<iHeight)) {
  54. if (selectBox) {
  55. stopSelectBox(e);
  56. } else {
  57. x1=mouseX;
  58. y1=mouseY
  59. x2=x1+1;
  60. y2=y1+1;
  61. zleft=x1;
  62. ztop=y1;
  63. zbottom=y1;
  64. zright=x1
  65. boxIt(x1,y1,x2,y2);
  66. selectBox=true;
  67. }
  68. highlightedOne="";
  69. }
  70. return false;
  71. }
  72. }
  73. // stop select box display..... select
  74. function stopSelectBox(e) {
  75. selectBox=false;
  76. hideLayer("zoomBoxTop");
  77. hideLayer("zoomBoxLeft");
  78. hideLayer("zoomBoxRight");
  79. hideLayer("zoomBoxBottom");
  80. if ((zright <zleft+2) && (zbottom < ztop+2)) {
  81. getMapXY(mouseX,mouseY);
  82. searchTolerance = (xDistance/iWidth) * pixelTolerance;
  83. tempLeft = mapX-searchTolerance;
  84. tempTop = mapY-searchTolerance;
  85. tempRight = mapX+searchTolerance;
  86. tempBottom = mapY+searchTolerance;
  87. } else {
  88. pixelX = xDistance / iWidth;
  89. var theY = iHeight - ztop;
  90. pixelY = yDistance / iHeight;
  91. tempTop = pixelY * theY + eBottom;
  92. tempRight = pixelX * zright + eLeft;
  93. tempLeft = pixelX * zleft + eLeft;
  94. theY = iHeight - zbottom;
  95. pixelY = yDistance / iHeight;
  96. tempBottom = pixelY * theY + eBottom;
  97. }
  98. window.scrollTo(0,0);
  99. queryStartRecord=1;
  100. var theString = writeGetFeatures2(tempLeft,tempBottom,tempRight,tempTop);
  101. selectEnvelope='maxy="' + forceComma(tempTop) + '" maxx="' + forceComma(tempRight) + '" miny="' + forceComma(tempBottom) + '" minx="' + forceComma(tempLeft) + '"';
  102. drawSelectBoundary=true;
  103. showBuffer=false;
  104. selectionMode=2;
  105. sendToServer(imsQueryURL,theString,selectXMLMode);
  106. return true;
  107. }
  108. // write out XML request to select features
  109. function writeGetFeatures2(west1,south1,east1,north1) {
  110. if (swapSelectFields) {
  111. selectFields=selFieldList[ActiveLayerIndex];
  112. //alert(selectFields);
  113. }
  114. var theEnvelope = 'maxy="' + forceComma(north1) + '" maxx="' + forceComma(east1) + '" miny="' + forceComma(south1) + '" minx="' + forceComma(west1 )+ '"';
  115. var theString = writeEnvelopeXML(ActiveLayer,ActiveLayerType,selectFields,maxFeaturesReturned,queryStartRecord,theEnvelope,useLimitExtent);
  116. //alert(theString);
  117. selectLayer=ActiveLayer;
  118. selectType=ActiveLayerType;
  119. selectCount=0;
  120. hightlightedOne="";
  121. selectPoints.length=1;
  122. selectLeft.length=1;
  123. selectRight.length=1;
  124. selectTop.length=1;
  125. selectBottom.length=1;
  126. return theString;
  127. }
  128. function writeGetFeatures3() {
  129. if (swapSelectFields) {
  130. selectFields=selFieldList[ActiveLayerIndex];
  131. }
  132. var theString = writeEnvelopeXML(ActiveLayer,ActiveLayerType,selectFields,maxFeaturesReturned,queryStartRecord,selectEnvelope,useLimitExtent);
  133. //alert(theString);
  134. selectLayer=ActiveLayer;
  135. selectType=ActiveLayerType;
  136. selectCount=0;
  137. hightlightedOne="";
  138. selectPoints.length=1;
  139. selectLeft.length=1;
  140. selectRight.length=1;
  141. selectTop.length=1;
  142. selectBottom.length=1;
  143. return theString;
  144. }
  145.  // generic envelope select xml write routine
  146. function writeEnvelopeXML(theLayer,theLayerType,theFields,maxReturned,startRec,theEnvelope,hasLimit) {
  147. var theString = '<ARCXML version="1.1">n<REQUEST>n<GET_FEATURES outputmode="xml" envelope="true" geometry="false" checkesc ="true"';
  148. theString += ' featurelimit="' + maxReturned + '" beginrecord="' + startRec + '">n';
  149. //CustomLayer===================================================
  150. if (mCustomLayer.getActiveLayer()>-1){
  151. theString += mCustomLayer.getActiveLayerString();
  152. }else{
  153. theString += '<LAYER id="' + theLayer + '" />';
  154. }
  155. //CustomLayer===================================================
  156. theString += '<SPATIALQUERY subfields="' + theFields + '">';
  157. theString += '<SPATIALFILTER relation="area_intersection" >';
  158. theString += '<ENVELOPE ' + theEnvelope + ' />';
  159. theString += '</SPATIALFILTER>';
  160. if (hasLimit) {
  161. // keep this within the limitExtent
  162. theString += '<SPATIALFILTER relation="area_intersection">n';
  163. theString += '<ENVELOPE maxx="' + forceComma(limitRight) + '" maxy="' + forceComma(limitTop) + '" minx="' + forceComma(limitLeft) + '" miny="' + forceComma(limitBottom) + '" />n';
  164. theString += '</SPATIALFILTER>n';
  165. }
  166. theString += '</SPATIALQUERY>';
  167. theString += '</GET_FEATURES>';
  168. theString += '</REQUEST>';
  169. theString += '</ARCXML>';
  170. return theString;
  171. }
  172. // write out xml request for selection by shape
  173. function writeShapeSelect(theType) {
  174. if (swapSelectFields) {
  175. selectFields=selFieldList[ActiveLayerIndex];
  176. }
  177. var theString = '<ARCXML version="1.1">n<REQUEST>n<GET_FEATURES outputmode="xml" envelope="true" geometry="false" checkesc ="true"';
  178. theString += ' featurelimit="' + maxFeaturesReturned + '" beginrecord="' + queryStartRecord + '">n';
  179. //CustomLayer===================================================
  180. if (mCustomLayer.getActiveLayer()>-1){
  181. theString += mCustomLayer.getActiveLayerString();
  182. }else{
  183. theString += '<LAYER id="' + ActiveLayer + '" />';
  184. }
  185. //CustomLayer===================================================
  186. theString += '<SPATIALQUERY subfields="' + selectFields + '">';
  187. theString += '<SPATIALFILTER relation="area_intersection" >';
  188. if ((shapeSelectBuffer) && (shapeBufferDistance>0)) {
  189. // do a buffer around the shape before selecting
  190. theString += '<BUFFER distance="' + forceComma(shapeBufferDistance) + '" ';
  191. theString += ' bufferunits="' + ScaleBarUnits + '"';
  192. theString += ' />n';
  193. }
  194. if (theType==1) {
  195. theString += '<POLYLINE>n<PATH>n';
  196. } else if (theType==2) {
  197. theString += '<POLYGON>n<RING>n';
  198. } else {
  199. theString += '<MULTIPOINT>n';
  200. }
  201. if (theType==0) {
  202. theString += '<POINT x="' + forceComma(clickPointX[clickCount-1]) + '" y="' + forceComma(clickPointY[clickCount-1]) + '" />n';
  203. } else {
  204. for (var i=0;i<clickCount;i++) {
  205. theString += '<POINT x="' + forceComma(clickPointX[i]) + '" y="' + forceComma(clickPointY[i])+ '" />n'; 
  206. }
  207. }
  208. if (theType==0) {
  209. theString += '</MULTIPOINT>n';
  210. } else if (theType==2) {
  211. theString += '</RING>n</POLYGON>n';
  212. } else {
  213. theString += '</PATH>n</POLYLINE>n';
  214. }
  215. theString += '</SPATIALFILTER>';
  216. if (useLimitExtent) {
  217. // keep this within the limitExtent
  218. theString += '<SPATIALFILTER relation="area_intersection">n';
  219. theString += '<ENVELOPE maxx="' + forceComma(limitRight) + '" maxy="' + forceComma(limitTop) + '" minx="' + forceComma(limitLeft) + '" miny="' + forceComma(limitBottom) + '" />n';
  220. theString += '</SPATIALFILTER>n';
  221. }
  222. theString += '</SPATIALQUERY>';
  223. theString += '</GET_FEATURES>';
  224. theString += '</REQUEST>';
  225. theString += '</ARCXML>';
  226. //alert(theString);
  227. selectLayer=ActiveLayer;
  228. selectType=ActiveLayerType;
  229. selectCount=0;
  230. hightlightedOne="";
  231. selectPoints.length=1;
  232. selectLeft.length=1;
  233. selectRight.length=1;
  234. selectTop.length=1;
  235. selectBottom.length=1;
  236. return theString;
  237. }
  238. // request a selection using a shape
  239. function sendShapeSelect(theType) {
  240. queryStartRecord=1;
  241. selectionMode=3;
  242. showBuffer=false;
  243. if (theType==2) {
  244. if ((clickPointX[0]!=clickPointX[clickCount-1]) && (clickPointY[0]!=clickPointY[clickCount-1])) {
  245. clickPointX[clickCount]=clickPointX[0];
  246. clickPointY[clickCount]=clickPointY[0];
  247. clickCount=clickCount+1;
  248. }
  249. }
  250. showRetrieveData();
  251. var theString = writeShapeSelect(theType);
  252. sendToServer(imsQueryURL,theString,selectXMLMode);
  253. }
  254. // request more records to display
  255. function getMoreData(startRecord) {
  256. var theString = "";
  257. queryStartRecord = startRecord;
  258. if (selectionMode==1) {
  259. //query
  260. theString = writeQueryXML(setQueryString);
  261. } else if (selectionMode==2) {
  262. theString = writeGetFeatures3();
  263. } else {
  264. var theType = clickType-1;
  265. theString = writeShapeSelect(theType);
  266. }
  267. showRetrieveData();
  268. sendToServer(imsQueryURL,theString,selectXMLMode);
  269. }
  270. // refresh map with hightlighted selection
  271. function showHighlight(selNum) {
  272. highlightedOne = LayerIDField[ActiveLayerIndex] + " = " + selectPoints[selNum];
  273. //alert(selectLeft[selNum] + "," + selectRight[selNum]);
  274. var fWidth = selectRight[selNum] - selectLeft[selNum];
  275. var fHeight = selectTop[selNum] - selectBottom[selNum];
  276. var mWMargin = 0;
  277. var mHMargin = 0;
  278. if (selectType=="point") {
  279. mWMargin = fullWidth * selectPointMargin;
  280. mHMargin = fullHeight * selectPointMargin;
  281. if (mWMargin > xDistance/2) {
  282. mWMargin = xDistance/2;
  283. mHMargin = yDistance/2;
  284. }
  285. } else {
  286. mWMargin = fWidth * selectMargin;
  287. mHMargin = fHeight * selectMargin; 
  288. }
  289. saveLastExtent();
  290. eLeft = selectLeft[selNum] - mWMargin;
  291. eRight = selectRight[selNum] + mWMargin;
  292. eTop = selectTop[selNum] + mHMargin;
  293. eBottom = selectBottom[selNum] - mHMargin;
  294. //alert(highlightedOne);
  295. legendTemp=legendVisible;
  296. legendVisible=false;
  297. sendMapXML();
  298. }
  299. // calculate max envelope for returned records
  300. function calcSelectEnvelope() {
  301. //alert(selectCount);
  302. if (selectCount>0) {
  303. selMaxEnvelope[0] = parseFloat(selectLeft[0]);
  304. selMaxEnvelope[1] = parseFloat(selectBottom[0]);
  305. selMaxEnvelope[2] = parseFloat(selectRight[0]);
  306. selMaxEnvelope[3] = parseFloat(selectTop[0]);
  307. //alert("0 - " + selMaxEnvelope[0] + "," + selMaxEnvelope[1] + "," + selMaxEnvelope[2] + "," + selMaxEnvelope[3]);
  308. if (selectCount>1) {
  309. for (var i=1;i<selectCount;i++) {
  310. if (parseFloat(selectLeft[i])<selMaxEnvelope[0]) selMaxEnvelope[0] = parseFloat(selectLeft[i]);
  311. if (parseFloat(selectBottom[i])<selMaxEnvelope[1]) selMaxEnvelope[1] = parseFloat(selectBottom[i]);
  312. if (parseFloat(selectRight[i])>selMaxEnvelope[2]) selMaxEnvelope[2] = parseFloat(selectRight[i]);
  313. if (parseFloat(selectTop[i])>selMaxEnvelope[3]) selMaxEnvelope[3] = parseFloat(selectTop[i]);
  314. //alert(i + " - " + selMaxEnvelope[0] + "," + selMaxEnvelope[1] + "," + selMaxEnvelope[2] + "," + selMaxEnvelope[3]);
  315. }
  316. }
  317. }
  318. }
  319. function zoomToReturnedRecords() {
  320. calcSelectEnvelope();
  321. var fWidth = selMaxEnvelope[2] - selMaxEnvelope[0];
  322. var fHeight = selMaxEnvelope[3] - selMaxEnvelope[1];
  323. var mWMargin = 0;
  324. var mHMargin = 0;
  325. if ((fWidth==0) && (fHeight==0)) {
  326. mWMargin = fullWidth * selectPointMargin;
  327. mHMargin = fullHeight * selectPointMargin;
  328. if (mWMargin > xDistance/2) {
  329. mWMargin = xDistance/2;
  330. mHMargin = yDistance/2;
  331. }
  332. } else {
  333. mWMargin = fWidth * selectMargin;
  334. mHMargin = fHeight * selectMargin; 
  335. }
  336. saveLastExtent();
  337. eLeft = selMaxEnvelope[0] - mWMargin;
  338. eRight = selMaxEnvelope[2] + mWMargin;
  339. eTop = selMaxEnvelope[3] + mHMargin;
  340. eBottom = selMaxEnvelope[1] - mHMargin;
  341. sendMapXML();
  342. }
  343. // clear current selection
  344. function clearSelection() {
  345. var theCount = selectCount;
  346. var theHL = highlightedOne;
  347. selectCount=0;
  348. showBuffer=false;
  349. highlightedOne="";
  350. selectPoints.length=0;
  351. selectLeft.length=0;
  352. selectRight.length=0;
  353. selectTop.length=0;
  354. selectBottom.length=0;
  355. drawSelectBoundary=false;
  356. showGeocode=false;
  357. clickCount=0;
  358. totalMeasure=0;
  359. currentMeasure=0;
  360. if (useTextFrame) {
  361. parent.TextFrame.document.open();
  362. parent.TextFrame.document.writeln('<meta http-equiv="Content-Type" content="text/html; charset=' + charSet + '"><html>');
  363. parent.TextFrame.document.writeln('<body bgcolor="White" text="Black" link="Blue" vlink="Blue">');
  364. parent.TextFrame.document.writeln('<FONT FACE="Arial" SIZE="-1"><b>' + LayerName[ActiveLayerIndex] + '</b><br>');
  365. if (toolMode==20) {
  366. parent.TextFrame.document.writeln(msgList[70]);
  367. updateMeasureBox()
  368. }
  369. else 
  370. parent.TextFrame.document.writeln(msgList[71]);
  371. parent.TextFrame.document.writeln('</body></html>');
  372. parent.TextFrame.document.close()
  373. } else {
  374. if (toolMode==20) {
  375. showLayer("measureBox");
  376. updateMeasureBox()
  377. alert(msgList[70]);
  378. } else {
  379. alert(msgList[71]);
  380. }
  381. }
  382. sendMapXML();
  383. }
  384. // add Draw Selected Features to Map XML request
  385. function addSelectToMap(){
  386. var selString = "";
  387. var sFactor = (eRight-eLeft) / iWidth;
  388.     var aspectRatio = iWidth / iHeight;
  389.     var extentRatio = (eRight-eLeft) / (eTop-eBottom);
  390.     if (extentRatio < aspectRatio) sFactor = (eTop-eBottom) / iHeight;
  391. selectType = LayerType[ActiveLayerIndex];
  392. if (((sFactor>=LayerMinScale[ActiveLayerIndex]) && (sFactor<=LayerMaxScale[ActiveLayerIndex]) && (LayerVisible[ActiveLayerIndex]==1)) || (canSelectInvisible)) {
  393. if ((selectCount>0) && (showSelectedFeatures)) {
  394. selString +='<LAYER type="featureclass" name="' + titleList[22] + '" visible="true">n';
  395. selString +='<DATASET fromlayer="' + LayerID[ActiveLayerIndex] + '" />n';
  396. if (selectionMode==1) {
  397. selString +='<SPATIALQUERY  where="' + setQueryString + '"';
  398. if (useLimitExtent) {
  399. // keep this within the limitExtent
  400. selString +='>n<SPATIALFILTER relation="area_intersection">n';
  401. selString +='<ENVELOPE maxx="' + forceComma(limitRight) + '" maxy="' + forceComma(limitTop) + '" minx="' + forceComma(limitLeft) + '" miny="' + forceComma(limitBottom) + '" />n';
  402. selString +='</SPATIALFILTER>n';
  403. selString +='</SPATIALQUERY>n';
  404. } else {
  405. selString +='/>n';
  406. }
  407. } else {
  408. selString +='<SPATIALQUERY>n';
  409. selString +='<SPATIALFILTER relation="area_intersection" >n';
  410. if (selectionMode==2) {
  411. selString +='<ENVELOPE ' + selectEnvelope + ' />n';
  412. } else {
  413. if ((shapeSelectBuffer) && (shapeBufferDistance>0)) {
  414. // do a buffer around the shape before selecting
  415. selString += '<BUFFER distance="' + forceComma(shapeBufferDistance) + '" ';
  416. selString += ' bufferunits="' + ScaleBarUnits + '"';
  417. selString += ' />n';
  418. }
  419. if (clickType==2) {
  420. selString +='<POLYLINE>n<PATH>n';
  421. } else if (clickType==3) {
  422. selString +='<POLYGON>n<RING>n';
  423. } else {
  424. selString +='<MULTIPOINT>n';
  425. }
  426. if (clickType==1) {
  427. selString +='<POINT x="' + forceComma(clickPointX[clickCount-1]) + '" y="' + forceComma(clickPointY[clickCount-1]) + '" />n';
  428. } else {
  429. for (var i=0;i<clickCount;i++) {
  430. selString +='<POINT x="' + forceComma(clickPointX[i]) + '" y="' + forceComma(clickPointY[i]) + '" />n'; 
  431. }
  432. }
  433. if (clickType==3) {
  434. selString +='</RING>n</POLYGON>n';
  435. } else if (clickType==2) {
  436. selString +='</PATH>n</POLYLINE>n';
  437. } else {
  438. selString +='</MULTIPOINT>n';
  439. }
  440. }
  441. selString +='</SPATIALFILTER>n';
  442. if (useLimitExtent) {
  443. // keep this within the limitExtent
  444. selString +='<SPATIALFILTER relation="area_intersection">n';
  445. selString +='<ENVELOPE maxx="' + forceComma(limitRight) + '" maxy="' + forceComma(limitTop) + '" minx="' + forceComma(limitLeft) + '" miny="' + forceComma(limitBottom) + '" />n';
  446. selString +='</SPATIALFILTER>n';
  447. selString +='</SPATIALQUERY>n';
  448. }
  449. selString +='<SIMPLERENDERER>n';
  450. if (selectType=="point") {
  451. selString +='<SIMPLEMARKERSYMBOL color="' + selectColor + '" type="Circle" width="10" />n';
  452. } else if (selectType=="line") {
  453. selString +='<SIMPLELINESYMBOL type="SOLID" color="' + selectColor + '" width="3" />n';
  454. } else {
  455. selString +='<SIMPLEPOLYGONSYMBOL fillcolor="' + selectColor + '" filltype="solid" transparency="' + forceComma(transparentLevel) + '" boundarycolor="255,255,255" />n';
  456. }
  457. selString +='</SIMPLERENDERER>n';
  458. selString +='</LAYER>n';
  459. }
  460. if (selectBlurb!="") {
  461. // add SelectBlurb to Map XML request
  462. selString +='<LAYER type="featureclass" name="' + titleList[22] + '" visible="true">n';
  463. selString +='<DATASET fromlayer="' + LayerID[ActiveLayerIndex] + '" />n';
  464. selString +='<QUERY where="' + selectBlurb + '" />n';
  465. selString +='<SIMPLERENDERER>n';
  466. if (selectType=="point") {
  467. selString +='<SIMPLEMARKERSYMBOL color="' + selectColor + '" type="Circle" width="10" />n';
  468. } else if (selectType=="line") {
  469. selString +='<SIMPLELINESYMBOL type="SOLID" color="' + selectColor + '" width="3" />n';
  470. } else {
  471. selString +='<SIMPLEPOLYGONSYMBOL fillcolor="' + selectColor + '" filltype="solid" transparency="' + forceComma(transparentLevel) + '" boundarycolor="255,255,255" />n';
  472. }
  473. selString +='</SIMPLERENDERER>n';
  474. selString +='</LAYER>n';
  475. }
  476. if (!isArcMapService) {
  477. if (highlightedOne!="") {
  478. // add Draw Highlighed Feature to Map XML request
  479. selString +='<LAYER type="featureclass" name="' + titleList[23] + '" visible="true">n';
  480. selString +='<DATASET fromlayer="' + LayerID[ActiveLayerIndex] + '" />n';
  481. selString +='<QUERY where="' + highlightedOne + '" />n';
  482. selString +='<SIMPLERENDERER>n';
  483. if (selectType=="point") {
  484. selString +='<SIMPLEMARKERSYMBOL color="' + highlightColor + '" type="Circle" width="10" />n';
  485. } else if (selectType=="line") {
  486. selString +='<SIMPLELINESYMBOL type="SOLID" color="' + highlightColor + '" width="3" />n';
  487. } else {
  488. selString +='<SIMPLEPOLYGONSYMBOL fillcolor="' + highlightColor + '" filltype="solid" transparency="' + forceComma(transparentLevel) + '" boundarycolor="255,255,255" />n';
  489. }
  490. selString +='</SIMPLERENDERER>n';
  491. selString +='</LAYER>n';
  492. //alert(selString);
  493. }
  494. }
  495. }
  496. return selString;
  497. }