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

GIS编程

开发平台:

ASP/ASPX

  1. // aimsCommon.js
  2. /*
  3. *  JavaScript template file for ArcIMS HTML Viewer
  4. * dependent on aimsXML.js, ArcIMSparam.js, aimsMap.js
  5. */
  6. aimsCommonPresent=true;
  7. var legendImage="";
  8. var modeBlurb = modeList[0];
  9. // delimiter to be used between coordinates in strings in ArcXML request
  10. var coordsDelimiter = " ";
  11. // delimiter to be used between pairs of coordinates in strings in ArcXML request
  12. var pairsDelimiter = ";";
  13. var chkUnits=false;
  14. var legendTemp = false;
  15. var ovIsVisible=false;
  16. var showBuffer = false;
  17. var chkGeocodeLayers = false;
  18. var isArcMapService = false;
  19. // character used by browser in decimals - either point or comma
  20. var decimalChar = ((("theChar is" + (10/100)).indexOf("."))==-1) ? "," : ".";
  21. //alert("Decimal character: " + decimalChar);
  22. /*
  23. ***************************************************************************************
  24. Common functions
  25. ***************************************************************************************
  26. */
  27. // when there is a mapservice to load, it proceeds from here
  28. function startUp() {
  29. if (imsURL != "") {
  30. //alert(imsURL);
  31. iWidth = parseInt(document.theImage.width);
  32. iHeight = parseInt(document.theImage.height);
  33. if (imsURL!=imsOVURL) toggleOVVisible = false;
  34. getStartExtent();
  35. }
  36. }
  37. // get the starting extent
  38. function getStartExtent() {
  39. if (parent.PostFrame.document.forms[0]!=null) {
  40. var theString = '<ARCXML version="1.1">n<REQUEST>n<GET_SERVICE_INFO renderer="false" extensions="true" ';
  41. if (aimsLayersPresent) {
  42. if (LayerID.length>0) {
  43. theString += 'fields="false" ';
  44. } else {
  45. theString += 'fields="true" ';
  46. }
  47. } else {
  48. theString += 'fields="false" ';
  49. }
  50. theString += '/>n</REQUEST>n</ARCXML>';
  51. var theReply="";
  52. if (hasOVMap) {
  53. theString = '<ARCXML version="1.1">n<REQUEST>n<GET_IMAGE><PROPERTIES>n';
  54. theString += '<IMAGESIZE height="' + i2Height + '" width="' + i2Width + '" />n';
  55. if (mapBackColor!="") {
  56. theString += '<BACKGROUND color="' + mapBackColor + '" />n';
  57. }
  58. theString += '</PROPERTIES>n';
  59. theString += '</GET_IMAGE>n</REQUEST>n</ARCXML>';
  60. sendToServer(imsOVURL,theString,902);
  61. } else {
  62. sendToServer(imsURL,theString,3);
  63. }
  64. } else {
  65. alert(msgList[2]);
  66. }
  67. }
  68. // process the start extent and set up layers
  69. function processStartExtent(theReply) {
  70. //alert(theReply);
  71. checkForForbiddenTags(theReply);
  72. // check for separators in serviceinfo
  73. var endpos = 0;
  74. var startpos = 0;
  75. var pos = theReply.indexOf("<SEPARATORS");
  76. if (pos!=-1) {
  77. startpos = theReply.indexOf("ts=",pos);
  78. if (startpos!=-1) {
  79. startpos += 4;
  80. endpos = theReply.indexOf(dQuote,startpos);
  81. pairsDelimiter = theReply.substring(startpos,endpos);
  82. }
  83. startpos = theReply.indexOf("cs=",pos);
  84. if (startpos!=-1) {
  85. startpos += 4;
  86. endpos = theReply.indexOf(dQuote,startpos);
  87. coordsDelimiter = theReply.substring(startpos,endpos);
  88. }
  89. //alert("pairsDelimiter="+pairsDelimiter+"ncoordsDelimiter="+coordsDelimiter);
  90. checkCoords();
  91. }
  92. isArcMapService = (theReply.indexOf("<LAYOUTINFO")!=-1);
  93. //alert("isArcMapService=" + isArcMapService); 
  94. if (isArcMapService) {
  95. if (autoAdjustForArcMapServer) {
  96. // adjust sizes when displayed by ArcMap Server
  97. var nasize = parseInt(NorthArrowSize)*2;
  98. NorthArrowSize = new String(nasize);
  99. }
  100. }
  101. //alert("NorthArrowSize=" + NorthArrowSize);
  102. pos = theReply.indexOf("<MAPUNITS");
  103. if (pos!=-1) {
  104. startpos = theReply.indexOf("units=",pos);
  105. if (startpos!=-1) {
  106. startpos += 7;
  107. endpos = theReply.indexOf(dQuote,startpos);
  108. MapUnits = theReply.substring(startpos,endpos);
  109. }
  110. } else {
  111. // if the serviceinfo did not have MAPUNITS tag and units are set to Degrees
  112.  if (MapUnits=="DEGREES") {
  113.   // if it is too big for the world. . . allow for oversize extent
  114. // default to Feet
  115.   if ((eRight > 250) || (eTop > 150) || (eLeft < -250) || (eBottom < -150)) MapUnits="FEET";
  116. // alert(MapUnits);
  117.  } 
  118.  // if the serviceinfo doesn't have the info, allow the user to set Map Units.
  119.  setMapUnits=true;
  120. }
  121. MapUnits = MapUnits.toUpperCase();
  122. if (MapUnits=="DECIMAL_DEGREES") MapUnits = "DEGREES";
  123. if (getStartingExtent) {
  124. pos = theReply.indexOf("<PROPERTIES");
  125. var theXYs =  getEnvelopeXYs(theReply, pos)
  126. eLeft = theXYs[0];
  127. eBottom = theXYs[1];
  128. eRight = theXYs[2];
  129. eTop = theXYs[3];
  130. startLeft=eLeft;
  131. startRight=eRight;
  132. startTop=eTop;
  133. startBottom=eBottom;
  134. } else {
  135. eLeft=startLeft;
  136. eRight=startRight;
  137. eTop=startTop;
  138. eBottom=startBottom;
  139. xDistance = Math.abs(eRight-eLeft);
  140. var sFactor = xDistance / iWidth
  141.     var aspectRatio = iWidth / iHeight;
  142.     var extentRatio = (eRight-eLeft) / (eTop-eBottom);
  143.     if (extentRatio < aspectRatio) sFactor = (eTop-eBottom) / iHeight;
  144. mapScaleFactor = sFactor;
  145. }
  146. // alert(aimsLayersPresent);
  147. if (aimsLayersPresent) {
  148. getLayers(theReply);
  149. if (setLayerVisible.length>0) setupLayerVisible();
  150. }
  151. // alert(aimsQueryPresent);
  152. if (aimsQueryPresent) {
  153. if (useStoredQuery) checkStoredQueries(theReply);
  154. } else {
  155. useStoredQuery=false;
  156. }
  157. // alert('okl');
  158.  xDistance = Math.abs(eRight-eLeft);
  159.  yDistance = Math.abs(eTop-eBottom);
  160.  xHalf = xDistance/2;
  161.  yHalf = yDistance/2;
  162.  panX = xDistance * panFactor;
  163.  panY = yDistance * panFactor;
  164.  mouseX = 0;
  165.  mouseY = 0;
  166.  pixelX = xDistance/iWidth;
  167.  pixelY = yDistance/iHeight;
  168.  mapX = eLeft;
  169.  mayY = eTop;
  170.  lastLeft = eLeft;
  171.  lastRight = eRight;
  172.  lastTop = eTop;
  173.  lastBottom = eBottom;
  174.  if (hasOVMap == false) {
  175.  fullLeft = limitLeft;
  176.  fullRight = limitRight;
  177.  fullTop = limitTop;
  178.  fullBottom = limitBottom;
  179.  fullWidth = Math.abs(fullRight - fullLeft);
  180.  fullHeight = Math.abs(fullTop - fullBottom);
  181.  
  182.  }
  183. if (aimsLayersPresent) {
  184.   if ((hasTOC) && (showTOC)) {
  185.   parent.TOCFrame.document.location=appDir+"toc.htm";
  186. }
  187. }
  188. if (aimsGeocodePresent) {
  189. if (aimsRoutePresent) {
  190. if ((useRoute) || (useReverseGeocode)) chkGeocodeLayers = true;
  191. } else {
  192. if (theReply.indexOf('<EXTENSION type="Geocode"')!=-1) {
  193. //alert("Has Geocode extension");
  194. if (useGeocode) {
  195. chkGeocodeLayers = true;
  196. useReverseGeocode=false;
  197. useRoute=false;
  198. } else {
  199. useGeocode=false;
  200. useReverseGeocode=false;
  201. chkGeocodeLayers = false;
  202. useRoute=false;
  203. }
  204. } else {
  205. //alert("Main Map Service not Geocodeable");
  206. if (imsGeocodeURL!=imsURL+"&CustomService=Geocode") {
  207. useGeocode=true;
  208. chkGeocodeLayers = true;
  209. //alert("imsGeocodeURL is not imsURL");
  210. } else {
  211. useGeocode=false;
  212. chkGeocodeLayers = false;
  213. }
  214. useReverseGeocode=false;
  215. useRoute=false;
  216. }
  217. }
  218. } else {
  219. //alert("Geocode not available");
  220. useGeocode=false;
  221. useReverseGeocode=false;
  222. chkGeocodeLayers = false;
  223. }
  224. //alert("chkGeocodeLayers=" + chkGeocodeLayers);
  225. //alert("useRoute=" + useRoute + "nuseReverseGeocode=" + useReverseGeocode);
  226. if (parent.ToolFrame!=null) {
  227. //alert("Refreshing toolbar");
  228. parent.ToolFrame.document.location= appDir + "toolbar.htm";
  229. hideRetrieveData();
  230. if ((ovIsVisible) && (aimsDHTMLPresent)) {
  231. ovIsVisible = false;
  232. toggleOVMap();
  233. }
  234. if (chkGeocodeLayers) {
  235. getGeocodeLayers();
  236. } else {
  237. if ((aimsQueryPresent) && (highlightedOne!="") && (queryZoom)) {
  238. setStartQuery();
  239. } else {
  240. sendMapXML();
  241. }
  242. }
  243. //alert('okl');
  244. setCustomlayerAttribute();
  245. }
  246. // request a list of available Image MapServices
  247. function startMap() {
  248. showRetrieveData();
  249. if (aimsGenericPresent) {
  250. // only if aimsGeneric.js is loaded - for generic sample
  251. getDefaultParams()
  252. var theText = "<GETCLIENTSERVICES/>";
  253. sendToServer(catURL,theText,5);
  254. } else {
  255. startUp();
  256. }
  257. }
  258. /*  ************************
  259. * Extent functions
  260. * ************************
  261. */
  262. // get the Map Image width
  263. function getMapWidth () {
  264. var mapFrameWidth = thePageWin.innerWidth;
  265. if (mapFrameWidth == null) {
  266. mapFrameWidth = thePageDoc.body.clientWidth;
  267. }
  268. return mapFrameWidth;
  269. }
  270.  //get the Map Image height
  271. function getMapHeight () {
  272. var mapFrameHeight = thePageWin.innerHeight;
  273. if (mapFrameHeight == null) {
  274. mapFrameHeight = thePageDoc.body.clientHeight;
  275. }
  276. return mapFrameHeight;
  277. }
  278. function checkCurrentExtent() {
  279. var msg = msgList[3] + eLeft + msgList[4] + eBottom + msgList[5] + eRight + msgList[6] + eTop;
  280. var ratio1 = xDistance/fullWidth;
  281. msg += msgList[7] + ratio1;
  282. alert(msg);
  283. }
  284. /*  ************************
  285. * Mode display functions
  286. * ************************
  287. */
  288. // write out ModeFrame page
  289. function writeModeFrame(currentMode) {
  290. parent.ModeFrame.document.location= appDir + "ModeFrame.htm";
  291. }
  292. // write out Mode on dynamic layer
  293. function writeModeLayers(currentMode) {
  294. var content = '<font face="' + modeLayerFont + '"color="' +  modeLayerShadowColor + '"size=' + modeLayerSize + '><b>' + currentMode + '</b></font>';
  295. replaceLayerContent("theMode1",content);
  296. content = '<font face="' + modeLayerFont + '"color="' +  modeLayerColor + '"size=' + modeLayerSize + '><b>' + currentMode + '</b></font>';
  297. replaceLayerContent("theMode2",content);
  298. }
  299. /*  *****************************************************
  300. * Various String manipulation Functions
  301. * *****************************************************
  302. */
  303. // swap out double quotes for single
  304. function swapQuotes2(inText) {
  305. var doubleQuote = dQuote;
  306. var singleQuote = "'";
  307. var preTemp = "";
  308. var posTemp = "";
  309. var nextPos = 0;
  310. var ePos = inText.length;
  311. var pos=9;
  312. while (pos != -1) {
  313. pos = inText.indexOf(dQuote);
  314. if (pos!=-1) {
  315. nextPos=pos+1;
  316. preTemp = inText.substring(0,pos);
  317. posTemp = inText.substring(nextPos,ePos);
  318. inText = preTemp + sQuote + posTemp;
  319. }
  320. }
  321. return inText;
  322. }
  323. // make quotes into single quote ... used against strings inside a where expression
  324. function swapQuotes(inText) {
  325. inText = inText.replace(/"/g, "'");
  326. inText = inText.replace(/&quote;/g, "&apos;");
  327. return inText;
  328. }
  329. // convert hexidecimal rgb number to delimited decimal rgb
  330. function convertHexToDec(hexColor) {
  331. var pos = hexColor.indexOf(",");
  332. var decString = hexColor;
  333. if (pos==-1) {
  334. pos = hexColor.indexOf("#");
  335. if (pos!=-1) {
  336. hexColor = hexColor.substring((pos + 1),(pos + 7));
  337. }
  338. //alert(hexColor);
  339. var redHex = hexColor.substring(0,2);
  340. var greenHex = hexColor.substring(2,4);
  341. var blueHex = hexColor.substring(4,6);
  342. decString = parseInt(redHex,16) + "," + parseInt(greenHex,16) + "," + parseInt(blueHex,16);
  343. //alert(decString);
  344. return decString;
  345. }
  346. // swap out one interior string with another
  347. function swapStuff(oldString,oldStuff,newStuff) {
  348. var pos = 0;
  349. var rpos = 0;
  350. var epos = 0;
  351. var leftString = "";
  352. var rightString = "";
  353. pos = oldString.indexOf(oldStuff);
  354. while (pos!=-1) {
  355. epos = oldString.length;
  356. rpos = pos + oldStuff.length;
  357. leftString = oldString.substring(0,pos);
  358. rightString = oldString.substring(rpos,epos);
  359. oldString = leftString + newStuff + rightString;
  360. pos = oldString.indexOf(oldStuff);
  361. }
  362. leftString=null;
  363. rightString=null;
  364. return oldString;
  365. }
  366. /*  *****************************************************
  367. * Various utility Functions
  368. * *****************************************************
  369. */
  370. // disables error checking
  371. function clearError() {
  372. return true;
  373. }
  374. // reset error checking to default
  375. function resetError() {
  376. return false;
  377. }
  378. function reloadApp() {
  379. if (isNav) {
  380. document.location = "default.htm";
  381. }
  382. }
  383. // clear out leading spaces in field value list
  384. function clearLeadingSpace(inText) {
  385. var pos=9;
  386. while (pos != -1) {
  387. pos = inText.indexOf('=" ');
  388. if (pos!=-1) {
  389. var lastpos = inText.length;
  390. var midend = pos + 2;
  391. var midstart = pos + 3;
  392. var leftSide = inText.substring(0,midend);
  393. var rightSide = inText.substring(midstart,lastpos);
  394. inText = leftSide + rightSide;
  395. }
  396. }
  397. return inText;
  398. }
  399. // replace < and > in string with [ and ] to allow display in html page
  400. function untag(inputString) {
  401. var outString = inputString.replace(/</g,"[");
  402. outString = outString.replace(/>/g, "]");
  403. return outString;
  404. }
  405. // replace single quotes with double single quotes
  406. // set up interior single qoutes and apostrophes for queries
  407. function fixSingleQuotes(inputString) {
  408. var outString = inputString.replace(/'/g, "''");
  409. return outString;
  410. }
  411. // parse out record data from XML stream
  412. function parseRecordString(theReply, startpos) {
  413. var inData = "";
  414. var pos = theReply.indexOf("<FIELDS ",startpos);
  415. if (pos!=-1) {
  416. startpos = pos + 8;
  417. xmlEndPos = theReply.indexOf('" />',startpos);
  418. inData = theReply.substring(startpos,xmlEndPos);
  419. }
  420. return inData;
  421. }
  422. // get a list of field names from the returned record
  423. function getFieldNames(recordString) {
  424. var theStuff = new String(recordString);
  425. var theList = theStuff.split('" ');
  426. var fName1 = new Array();
  427. for (var f=0;f<theList.length;f++) {
  428. var v = theList[f].split('="');
  429. fName1[f] = v[0];
  430. }
  431. return fName1;
  432. }
  433. // get a list field values from the returned record
  434. function getFieldValues(recordString) {
  435. var theStuff = new String(recordString);
  436. var theList = theStuff.split('" ');
  437. var fValue1 = new Array();
  438. for (var f=0;f<theList.length;f++) {
  439. var v = theList[f].split('="');
  440. if ((v[1]=="") || (v[1]==null)) v[1] = "&nbsp;";
  441. if (v[0]==LayerShapeField[ActiveLayerIndex]) v[1]="[" + ActiveLayerType + "]";
  442. fValue1[f] = v[1];
  443. }
  444. return fValue1;
  445. }
  446. // just get the field value from the lists of fieldnames and fieldvalues
  447. function getIdValue(fieldNameArray, fieldValueArray) {
  448. var theValue = 0;
  449. for (var f=0;f<fieldNameArray.length;f++) {
  450. if (fieldNameArray[f]==LayerIDField[ActiveLayerIndex]) {
  451. theValue = fieldValueArray[f];
  452. }
  453. return theValue;
  454. }
  455. // just get the interior string from the theReply between preString and postString
  456. // starting from startpos
  457. function justGetValue(theReply,preString,postString,startpos) {
  458. var theValue = "";
  459. var pos = theReply.indexOf(preString,startpos);
  460. if (pos!=-1) {
  461. pos = pos + preString.length;
  462. var endpos = theReply.indexOf(postString,(pos));
  463. if (endpos!=-1) {
  464. theValue = theReply.substring(pos,endpos);
  465. xmlEndPos = endpos;
  466. }
  467. }
  468. return theValue;
  469. }
  470. // get one field value from theReply starting from startpos
  471. function justGetFieldValue(theReply,theField,startpos) {
  472. var preString = theField + '="';
  473. var returnString = justGetValue(theReply, preString, dQuote, startpos);
  474. return returnString;
  475. }
  476. // get the number of features returned in xml response
  477. function justGetFeatureCount(theReply) {
  478. var theCount = 0;
  479. var pos = theReply.indexOf("<FEATURECOUNT");
  480. if (pos!=-1) {
  481. var theValue = justGetValue(theReply,'count="',dQuote,pos);
  482. //alert(theValue);
  483. theCount = parseInt(theValue);
  484. }
  485. return theCount;
  486. }
  487. // get all the field values and return a list
  488. function getAllFieldValues(theReply,theField,recCount) {
  489. var vList = new Array();
  490. xmlEndPos = 0;
  491. for (var i=0;i<recCount;i++) {
  492. vList[i] = parseFloat(justGetFieldValue(theReply,theField,xmlEndPos));
  493. }
  494. return vList;
  495. }
  496. // reset order to numeric
  497. function numberorder(a,b) { return a - b; }
  498. // replace common HTML entitys with the characters they represent
  499. function parseEntity(oldString) {
  500. //alert(oldString);
  501. oldString = oldString.replace(/&apos;/g, "'");
  502. oldString = oldString.replace(/&gt;/g, ">");
  503. oldString = oldString.replace(/&lt;/g, "<");
  504. oldString = oldString.replace(/&quot;/g, '"');
  505. oldString = oldString.replace(/&amp;/g, "&");
  506. //alert(oldString);
  507. /*
  508. oldString = swapStuff(oldString,"&apos;","'");
  509. oldString = swapStuff(oldString,"&divide;","/");
  510. oldString = swapStuff(oldString,"&ge;",">=");
  511. oldString = swapStuff(oldString,"&gt;",">");
  512. oldString = swapStuff(oldString,"&le;","<=");
  513. oldString = swapStuff(oldString,"&lt;","<");
  514. oldString = swapStuff(oldString,"&ne;","<>");
  515. oldString = swapStuff(oldString,"&quot;",'"');
  516. oldString = swapStuff(oldString,"&amp;","&");
  517. */
  518. return oldString;
  519. }
  520. function hideQuotes(oldString) {
  521. }
  522. // replace the five problem characters for the server's XML parser
  523. function makeXMLsafe(oldString) {
  524. //alert(oldString);
  525. oldString = oldString.replace(/&/g, "&amp;");
  526. oldString = oldString.replace(/'/g, "&apos;");
  527. oldString = oldString.replace(/>/g, "&gt;");
  528. oldString = oldString.replace(/</g, "&lt;");
  529. oldString = oldString.replace(/"/g, "&quot;");
  530. /*
  531. oldString = swapStuff(oldString,"'","&apos;");
  532. oldString = swapStuff(oldString,">","&gt;");
  533. oldString = swapStuff(oldString,"<","&lt;");
  534. oldString = swapStuff(oldString,'"',"&quot;");
  535. */
  536. //alert(oldString);
  537. return oldString;
  538. }
  539. // replace +  in string with space to allow parsing of unescaped xml response
  540. function replacePlus(inText) {
  541.      var re = /+/g;
  542.       inText = inText.replace(re," ");
  543.      return inText;
  544. }
  545. // replaces comas or spaces in these variables to coordsDelimiter value
  546. // the variables checked are used for image coords and should be integer
  547. function checkCoords() {
  548. var re = /,|s||/g;
  549. NorthArrowCoords = NorthArrowCoords.replace(re,coordsDelimiter);
  550. CopyrightCoords = CopyrightCoords.replace(re,coordsDelimiter);
  551. }
  552. // get the substring between beforeString and afterString, starting at startpos
  553. //  must be found before limitpos (0 for no limit) 
  554. //  caseSensitive = true or false
  555. function getInsideString(inString,beforeString,afterString,startpos,limitpos,caseSensitive) {
  556. var returnString = "";
  557. var ucInString = inString;
  558. var ucBefore = beforeString;
  559. var ucAfter = afterString;
  560. if (limitpos==0) limitpos = inString.length;
  561. if (!caseSensitive) {
  562. ucInString = inString.toUpperCase();
  563. ucBefore = beforeString.toUpperCase();;
  564. ucAfter = afterString.toUpperCase();;
  565. }
  566. pos = ucInString.indexOf(ucBefore,startpos);
  567. //alert(startpos);
  568. if ((pos != -1) && (pos<limitpos)) {
  569. pos = pos + ucBefore.length;
  570. var endpos = ucInString.indexOf(ucAfter,pos);
  571. returnString = inString.substring(pos,endpos);
  572. }
  573. return returnString;
  574. }
  575. // formats date string to "yyyy-mm-dd hh:mm:ss"
  576. function formatDate(theDateString) {
  577. //if (theDateString.toUpperCase().indexOf("UTC")==-1) theDateString + " UTC";
  578. var v = new Date(theDateString);
  579. //alert(v);
  580. var dateString = "";
  581. if (!isNaN(v.valueOf())) {
  582. var y = v.getFullYear();
  583. var mo = v.getMonth() + 1;
  584. if (mo<10) mo = "0" + mo;
  585. var d = v.getDate();
  586. if (d<10) d = "0" + d;
  587. var h = v.getHours();
  588. if (h<10) h = "0" + h;
  589. var mi = v.getMinutes();
  590. if (mi<10) mi = "0" + mi;
  591. var s = v.getSeconds();
  592. if (s<10) s = "0" + s;
  593. dateString =  y + "-" + mo + "-" + d;
  594. if (theDateString.indexOf(":")!=-1) {
  595. if (v.getHours() + v.getMinutes() + v.getSeconds()>0)
  596. dateString += " " + h + ":" + mi + ":" + s;
  597. }
  598. }
  599. return dateString;
  600. }
  601. // format decimal numerics from comma to point
  602. //  SQL format requires English notation
  603. function convertDecimal(theNumString) {
  604. var replacer = "."
  605. var re = /,/g;
  606. var newString = theNumString.replace(re,replacer);
  607. return newString;
  608. }
  609. // test for forbidden tags for this service
  610. function checkForForbiddenTags(theReply) {
  611. var startpos = theReply.indexOf("CAPABILITIES forbidden=");
  612. if (startpos!=-1) {
  613. startpos = startpos + 24;
  614. endpos = theReply.indexOf(dQuote,startpos);
  615. var forbiddenTags = theReply.substring(startpos,endpos);
  616. //alert(forbiddenTags);
  617. if (forbiddenTags.indexOf("GET_IMAGE")!=-1) {
  618. // No image requests!!!! Abort viewer
  619. parent.document.location = "Abort.htm";
  620. }
  621. if (forbiddenTags.indexOf("GET_FEATURES")!=-1) {
  622. // No id/query requests!!!! Kill buttons
  623. aimsSelectPresent=false;
  624. aimsQueryPresent=false;
  625. aimsBufferPresent=false;
  626. aimsIdentifyPresent=false;
  627. canQuery=false;
  628. useIdentify=false;
  629.   useSelect=false;
  630. useQuery=false;
  631. useFind=false;
  632. useBuffer=false;
  633. useStoredQuery=false;
  634. useHyperLink=false;
  635. useHyperLinkAny=false;
  636. useIdentifyAll=false;
  637. useBufferShape=false; 
  638. }
  639. if (forbiddenTags.indexOf("GET_GEOCODE")!=-1) {
  640. // No geocode requests!!!! Kill buttons
  641. aimsGeocodePresent=false;
  642. useGeocode=false;
  643. useReverseGeocode=false;
  644. }
  645. if (forbiddenTags.indexOf("GET_EXTRACT")!=-1) {
  646. // No geocode requests!!!! Kill buttons
  647. useExtract=false;
  648. }
  649. }
  650. }