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

GIS编程

开发平台:

ASP/ASPX

  1. // aimsQuery.js
  2. /*
  3. *  JavaScript template file for ArcIMS HTML Viewer
  4. * dependent on aimsXML.js, ArcIMSparam.js, aimsCommon.js, aimsMap.js, aimsIdentify.js, aimsSelect.js, and aimsLayers.js
  5. * To be interactive, dependent also on aimsDHTML.js, aimsClick.js, and aimsNavigation.js
  6. */
  7. aimsQueryPresent=true;
  8. var showSampleValues=false;
  9. var storedQueryCount = 0;
  10. var storedQueryName = new Array();
  11. var storedQueryString = new Array();
  12. var storedQueryVariable = new Array();
  13. var storedQueryVarCount = new Array();
  14. var storedQueryFieldList = new Array();
  15. var storedQueryIndex = 0;
  16. /*
  17. ***************************************************************************************
  18. Querying functions 
  19. ***************************************************************************************
  20. */
  21. // query form
  22. function queryForm() {
  23. if (checkIfActiveLayerAvailable()) {
  24. fieldIndex=0;
  25. showSampleValues=false;
  26. setLayerFields(ActiveLayerIndex);
  27. if (showSampleValues) {
  28. var theText = writeFieldSample(LayerFields[fieldIndex]);
  29. sendToServer(imsQueryURL,theText,40);
  30. } else {
  31. writeQueryForm();
  32. }
  33. }
  34. }
  35. // find Form
  36. function findForm() {
  37. if (checkIfActiveLayerAvailable()) {
  38. setLayerFields(ActiveLayerIndex);
  39. if (useTextFrame) {
  40. parent.TextFrame.document.location= appDir + "findForm.htm";
  41. } else {
  42. var Win1 = open(appDir + "findForm.htm","QueryWindow","width=575,height=150,scrollbars=yes,resizable=yes");
  43. }
  44. }
  45. }
  46. // process query
  47. function sendQueryString(newString) {
  48. newString = parseEntity(newString);
  49. //if (LayerIDField[ActiveLayerIndex]!="#ID#") {
  50. newString = fixSingleQuotes(newString);
  51. newString = swapQuotes(newString);
  52. //}
  53. //alert(newString);
  54. newString = makeXMLsafe(newString);
  55. setQueryString=newString;
  56. selectionMode=1;
  57. selectData.length=0;
  58. LayerFields.length=0;
  59. LayerFieldType.length=0;
  60. LayerFieldCount=0;
  61. highlightedOne="";
  62. showBuffer=false;
  63. showRetrieveData();
  64. var theString = writeQueryXML(newString);
  65. sendToServer(imsQueryURL,theString,queryXMLMode);
  66. }
  67. // write out XML request to query attributes
  68. function writeQueryXML(queryString) {
  69. if (swapSelectFields) {
  70. selectFields=selFieldList[ActiveLayerIndex];
  71. }
  72. var theString = '<ARCXML version="1.1">n<REQUEST>n<GET_FEATURES outputmode="xml" geometry="false" envelope="true" checkesc ="true"';
  73. theString += ' featurelimit="' + maxFeaturesReturned + '" beginrecord="' + queryStartRecord + '">n';
  74. //CustomLayer===================================================
  75. if (mCustomLayer.getActiveLayer()>-1){
  76. theString += mCustomLayer.getActiveLayerString();
  77. }else{
  78. theString += '<LAYER id="' + ActiveLayer + '" />';
  79. }
  80. //CustomLayer===================================================
  81. if (useLimitExtent) {
  82. // keep this within the limitExtent
  83. theString += '<SPATIALQUERY subfields="' + selectFields + '" where="' + queryString + '">';
  84. theString += '<SPATIALFILTER relation="area_intersection">n';
  85. theString += '<ENVELOPE maxx="' + forceComma(limitRight) + '" maxy="' + forceComma(limitTop) + '" minx="' + forceComma(limitLeft) + '" miny="' + forceComma(limitBottom) + '" />n';
  86. theString += '</SPATIALFILTER>n';
  87. theString += '</SPATIALQUERY>n';
  88. } else {
  89. //theString += '<QUERY subfields="' + selectFields + '" where="' + queryString + '" />';
  90. theString += '<SPATIALQUERY subfields="' + selectFields + '" where="' + queryString + '" />';
  91. }
  92. theString += '</GET_FEATURES>';
  93. theString += '</REQUEST>';
  94. theString += '</ARCXML>';
  95. //alert("writeQueryXML()nQuery XML Request:n" + theString);
  96. selectLayer=ActiveLayer;
  97. selectType=ActiveLayerType;
  98. selectCount=0;
  99. hightlightedOne="";
  100. selectPoints.length=1;
  101. selectLeft.length=1;
  102. selectRight.length=1;
  103. selectTop.length=1;
  104. selectBottom.length=1;
  105. return theString;
  106. }
  107. // write out XML request to get field value samples
  108. function writeFieldSample(theField) {
  109. var theFields = theField;
  110. var theString = '<ARCXML version="1.1">n<REQUEST>n<GET_FEATURES outputmode="xml" geometry="false" envelope="false" checkesc ="true"';
  111. theString += ' featurelimit="' + numberDataSamples + '">n';
  112. //CustomLayer===================================================
  113. if (mCustomLayer.getActiveLayer()>-1){
  114. theString += mCustomLayer.getActiveLayerString();
  115. }else{
  116. theString += '<LAYER id="' + ActiveLayer + '" />';
  117. }
  118. //CustomLayer===================================================
  119. //theString += '<QUERY subfields="' + theFields + '" where="' + LayerIDField[ActiveLayerIndex] + ' GT 0" />';
  120. theString += '<QUERY subfields="' + theFields + '" />';
  121. theString += '</GET_FEATURES>';
  122. theString += '</REQUEST>';
  123. theString += '</ARCXML>';
  124. //alert(theString);
  125. selectLayer=ActiveLayer;
  126. selectType=ActiveLayerType;
  127. selectCount=0;
  128. hightlightedOne="";
  129. selectPoints.length=1;
  130. selectLeft.length=1;
  131. selectRight.length=1;
  132. selectTop.length=1;
  133. selectBottom.length=1;
  134. //alert(theString);
  135. return theString;
  136. }
  137. // send find request
  138. function getFind(theValue) {
  139. //alert(theValue);
  140. selectCount=0;
  141. showBuffer=false;
  142. highlightedOne="";
  143. selectPoints.length=0;
  144. selectLeft.length=0;
  145. selectRight.length=0;
  146. selectTop.length=0;
  147. selectBottom.length=0;
  148. drawSelectBoundary=false;
  149. showGeocode=false;
  150. clickCount=0;
  151. totalMeasure=0;
  152. currentMeasure=0;
  153. selectionMode=1;
  154. var theNewQueryString = "";
  155. var theTempString = "";
  156. var fieldListString = LayerIDField[ActiveLayerIndex] + " " + LayerShapeField[ActiveLayerIndex];
  157. var elemCount = 0;
  158. for (var i=0;i<LayerFields.length;i++) {
  159. var ftval = parseInt(LayerFieldType[i]);
  160. if ((ftval>=12) && (ftval<=15)) {
  161. //if ((LayerFieldType[i].indexOf("12",0)!=-1) || (LayerFieldType[i].indexOf("13",0)!=-1) || (LayerFieldType[i].indexOf("13",0)!=-1) || (LayerFieldType[i].indexOf("15",0)!=-1)){
  162. if (queryCaseInsensitive) {
  163. theTempString = "UPPER(" + LayerFields[i] + ") LIKE '%" + theValue.toUpperCase() + "%'";
  164. } else {
  165. theTempString = LayerFields[i] + " LIKE '%" + theValue + "%'";
  166. }
  167. if (elemCount>0) theTempString = " OR " + theTempString;
  168. //if (theNewQueryString.length + theTempString.length < 1024) {
  169. theNewQueryString = theNewQueryString + theTempString;
  170. fieldListString = fieldListString + " " + LayerFields[i];
  171. elemCount += 1;
  172. //}
  173. }
  174. }
  175. if (theNewQueryString!="") {
  176. showRetrieveData();
  177. showBuffer=false;
  178. theNewQueryString=makeXMLsafe(theNewQueryString);
  179. //alert(theNewQueryString);
  180. setQueryString = theNewQueryString;
  181. var theString = writeFindRequest(theNewQueryString,fieldListString);
  182. //alert(theString);
  183. sendToServer(imsQueryURL,theString,findXMLMode);
  184. } else {
  185. alert(msgList[80]);
  186. }
  187. }
  188. // write out find form
  189. function writeFindRequest(findQuery,fieldList) {
  190. var theString = '<ARCXML version="1.1">n<REQUEST>n<GET_FEATURES outputmode="xml" geometry="false" envelope="true" checkesc ="true"';
  191. theString += ' featurelimit="' + maxFeaturesReturned + '" beginrecord="' + queryStartRecord + '">n';
  192. //CustomLayer===================================================
  193. if (mCustomLayer.getActiveLayer()>-1){
  194. theString += mCustomLayer.getActiveLayerString();
  195. }else{
  196. theString += '<LAYER id="' + ActiveLayer + '" />';
  197. }
  198. //CustomLayer===================================================
  199. if (useLimitExtent) {
  200. // keep this within the limitExtent
  201. theString += '<SPATIALQUERY subfields="' + fieldList + '" where="' + findQuery + '" >';
  202. theString += '<SPATIALFILTER relation="area_intersection">n';
  203. theString += '<ENVELOPE maxx="' + forceComma(limitRight) + '" maxy="' + forceComma(limitTop) + '" minx="' + forceComma(limitLeft) + '" miny="' + forceComma(limitBottom) + '" />n';
  204. theString += '</SPATIALFILTER>n';
  205. theString += '</SPATIALQUERY>n';
  206. } else {
  207. theString += '<QUERY subfields="' + fieldList + '" where="' + findQuery + '" />';
  208. }
  209. theString += '</GET_FEATURES>n';
  210. theString += '</REQUEST>n';
  211. theString += '</ARCXML>';
  212. //alert(theString);
  213. selectLayer=ActiveLayer;
  214. selectType=ActiveLayerType;
  215. selectCount=0;
  216. hightlightedOne="";
  217. selectPoints.length=1;
  218. selectLeft.length=1;
  219. selectRight.length=1;
  220. selectTop.length=1;
  221. selectBottom.length=1;
  222. return theString;
  223. }
  224. // parse layer field value samples
  225. function parseFieldSamples(theReply) {
  226. if (onlyUniqueSamples) { 
  227. parseFieldSamplesUnique(theReply);
  228. } else {
  229. //alert("Reply Length: " + theReply.length);
  230. //alert(theReply);
  231. var fList="";
  232. var lpos1 = 1;
  233. var lpos2 = 1;
  234. var epos = 1;
  235. var spos = 1;
  236. var morePoints=true;
  237. var moreFeatures=true;
  238. var pos = 0;
  239. var startpos = 0;
  240. var endpos = 0;
  241. var featureCount = justGetFeatureCount(theReply);
  242. var tempString="";
  243. if (featureCount > 0) {
  244. selectData.length=featureCount;
  245. for (var i=0;i<featureCount;i++) {
  246. pos = theReply.indexOf("<FIELDS ",endpos);
  247. startpos = pos + 8;
  248. endpos =theReply.indexOf(' />',startpos);
  249. inData = theReply.substring(startpos,endpos);
  250. //inData = fixSingleQuotes(inData);
  251. //selectData[i] = clearLeadingSpace(inData);
  252. //selectData[i] = escape(inData);
  253. selectData[i] = inData;
  254. }
  255. } else {
  256. selectData.length=0;
  257. }
  258. }
  259. }
  260. //replace the original function parseFieldSamples with this function parseFieldSamples
  261. // parse layer field value samples
  262. function parseFieldSamplesUnique(theReply) {
  263. //alert("Reply Length: " + theReply.length);
  264. //alert(theReply);
  265. var fList="";
  266. var lpos1 = 1;
  267. var lpos2 = 1;
  268. var epos = 1;
  269. var spos = 1;
  270. var morePoints=true;
  271. var moreFeatures=true;
  272. var pos = 0;
  273. var startpos = 0;
  274. var endpos = 0;
  275. var featureCount = justGetFeatureCount(theReply);
  276. //alert(theReply);
  277. var tempString="";
  278. //variables added to original function
  279. var k = 1;
  280. var sdLeng = 0;
  281. var charSort = false;
  282. if (featureCount > 0) {
  283. //Add the first sample value 
  284. for (var i=0;i<1;i++) {
  285. if (selectData.length>0) {
  286. selectData.length=0;
  287. }
  288. pos = theReply.indexOf("<FIELDS ",endpos);
  289. startpos = pos + 8;
  290. endpos =theReply.indexOf(' />',startpos);
  291. inData = theReply.substring(startpos,endpos);
  292. selectData[i] = inData;
  293. }
  294. //Add additional sample values
  295. for (var i=1;i<featureCount;i++) {
  296. pos = theReply.indexOf("<FIELDS ",endpos);
  297. startpos = pos + 8;
  298. endpos =theReply.indexOf(' />',startpos);
  299. inData = theReply.substring(startpos,endpos);
  300. sdLeng = selectData.length;
  301. for (var j=0;j<sdLeng;j++){
  302. if (selectData[j] == inData){
  303. addValue = false;
  304. break;
  305. } else {
  306. addValue = true; 
  307. }
  308. }
  309. if (addValue){
  310. selectData[k] = inData;
  311. k = k + 1;
  312. }
  313. }
  314. } else {
  315. selectData.length=0;
  316. }
  317. //alert(selectData.length);
  318. var testSample = selectData[0];
  319. var testPos = testSample.indexOf('"');
  320. var testStartPos = testPos+1;
  321. var testEndPos = testSample.indexOf('"',testStartPos);
  322. var testValue = testSample.substring(testStartPos,testEndPos);
  323. var testLeng = testValue.length;
  324. ///*
  325. //Test for non-numeric characters in the string
  326. for (l=0;l<testLeng;l++){
  327. testChar = testValue.substring(l+1);
  328. testChar = Number(testChar);
  329. if (isNaN(testChar)) {
  330. charSort = true;
  331. break;
  332. }
  333. //*/
  334. if (charSort) {
  335. selectData.sort();
  336. } else {
  337.   selectData.sort(compare);
  338. }
  339. }
  340. //add this below the new function parseFieldSamples
  341. //function to compare numeric values for function parseFieldSamples numeric sort
  342. function compare(a,b){
  343. var returnVal = 0;
  344. var aPos = a.indexOf('"');
  345. var aStartPos = aPos+1;
  346. var aEndPos = a.indexOf('"',aStartPos);
  347. var aValue = a.substring(aStartPos,aEndPos);
  348. var aNum = Number(aValue);
  349. var bPos = b.indexOf('"');
  350. var bStartPos = bPos+1;
  351. var bEndPos = b.indexOf('"',bStartPos);
  352. var bValue = b.substring(bStartPos,bEndPos);
  353. var bNum = Number(bValue);
  354. var theVal =  aValue - bValue;
  355. if (isNaN(theVal)) {
  356. returnVal = -1;
  357. } else {
  358. returnVal = theVal;
  359. }
  360. return returnVal;
  361. }
  362. // write out a query form
  363. function writeQueryForm() {
  364. var url = appDir + "query.htm";
  365. if (useTextFrame) {
  366. parent.TextFrame.document.location = url;
  367. } else {
  368. var Win1 = open(url,"QueryWindow","width=575,height=150,scrollbars=yes,resizable=yes");
  369. }
  370. }
  371. // temporarily change getSampleValues to true and load queryform
  372. function tempGetSamples(theField) {
  373. showSampleValues=true;
  374. if (useTextFrame) {
  375. var Win1 = parent.TextFrame;
  376. } else {
  377. var Win1 = open("","QueryWindow","width=575,height=150,scrollbars=yes,resizable=yes");
  378. }
  379. Win1.document.open();
  380. Win1.document.writeln('<html><meta http-equiv="Content-Type" content="text/html; charset=' + charSet + '"><HEAD>');
  381. Win1.document.writeln('<body BGCOLOR="' + textFrameBackColor + '" TEXT="Black" size="-1">');
  382. Win1.document.writeln('<div align="center"><font face="Arial"><b>');
  383. Win1.document.writeln(msgList[74] + LayerName[ActiveLayerIndex] + '. . .</b></font><br>');
  384. if (onlyUniqueSamples) {
  385. Win1.document.writeln('<font face="Arial" size="-1">' + msgList[75] + numberDataSamples + msgList[122] + '</font></div></body></html>');
  386. } else {
  387. Win1.document.writeln('<font face="Arial" size="-1">' + msgList[75] + numberDataSamples + msgList[76] + '</font></div></body></html>');
  388. }
  389. Win1.document.close();
  390. Win1=null;
  391. var theText = writeFieldSample(theField);
  392. //alert(theText);
  393. sendToServer(imsQueryURL,theText,40);
  394. }
  395. // get the StoredQueries in the MapService
  396. function getStoredQueries() {
  397. if (checkIfActiveLayerAvailable()) {
  398. var theString = '<ARCXML version="1.1">n<REQUEST>n<GET_SERVICE_INFO renderer="false" extensions="true" fields="false" />n';
  399. theString += '</REQUEST>n</ARCXML>';
  400. sendToServer(imsQueryURL,theString,55);
  401. }
  402. }
  403. // get the StoredQueries in the MapService
  404. function parseStoredQueries(theReply) {
  405. //alert(theReply);
  406. storedQueryCount=0;
  407. storedQueryName.length=1;
  408. storedQueryString.length=1;
  409. storedQueryVariable.length=1;
  410. storedQueryVarCount.length=1;
  411. storedQueryFieldList.length=1;
  412. storedQueryIndex=0;
  413. var endpos = 1;
  414. var pos = -1;
  415. var blurb = 'id="' + ActiveLayer + '"';
  416. var startpos = theReply.indexOf("<LAYERINFO",1);
  417. var thePos = 1;
  418. while (thePos!=-1) {
  419. startpos = theReply.indexOf("<LAYERINFO",1);
  420. endpos = theReply.indexOf(">",startpos);
  421. thePos = theReply.indexOf(blurb,1);
  422. if (thePos!=-1) {
  423. pos = thePos;
  424. thePos=-1;
  425. }
  426. var sqpos = 0;
  427. var sqvpos = 0;
  428. var sqpos2 = 0;
  429. var vCount=0;
  430. if (pos!=-1) {
  431. var fieldCount = 0;
  432. epos = theReply.indexOf("</LAYERINFO>",pos);
  433. startpos=0;
  434. endpos=pos;
  435. sqpos = theReply.indexOf("<STOREDQUERY name=",endpos);
  436. sqpos2 = theReply.indexOf("</STOREDQUERY>",endpos);
  437. while ((epos>sqpos) && (sqpos!=-1)) {
  438. if (sqpos!=-1) {
  439. startpos = sqpos + 19;
  440. endpos = theReply.indexOf(dQuote, startpos);
  441. blurb = theReply.substring(startpos,endpos);
  442. //alert(blurb);
  443. storedQueryName[storedQueryCount] = blurb;
  444. //startpos = theReply.indexOf("<QUERY where=",endpos);
  445. var sp2 = theReply.indexOf("<QUERY ",endpos);
  446. sp2 += 7;
  447. startpos = theReply.indexOf("where=",sp2);
  448. startpos += 7;
  449. endpos = theReply.indexOf(dQuote, startpos);
  450. blurb = theReply.substring(startpos,endpos);
  451. //storedQueryString[storedQueryCount] = blurb;
  452. storedQueryString[storedQueryCount] = parseEntity(blurb);
  453. //alert(storedQueryString[storedQueryCount])
  454. startpos = theReply.indexOf("subfields=",sp2); 
  455. startpos += 11;
  456. endpos = theReply.indexOf(dQuote, startpos);
  457. storedQueryFieldList[storedQueryCount] = theReply.substring(startpos,endpos);
  458. storedQueryVariable[storedQueryCount]="";
  459. sqvpos = theReply.indexOf("<SQVAR",startpos);
  460. vCount = 0;
  461. while ((sqvpos!=-1) && (sqvpos<sqpos2)) {
  462. endpos = sqvpos;
  463. startpos = theReply.indexOf("name=",endpos);
  464. startpos += 6;
  465. endpos = theReply.indexOf(dQuote, startpos);
  466. blurb = theReply.substring(startpos,endpos);
  467. if (vCount > 0) blurb = "|" + blurb;
  468. storedQueryVariable[storedQueryCount] = storedQueryVariable[storedQueryCount] + blurb;
  469. vCount += 1;
  470. sqvpos = theReply.indexOf("<SQVAR",startpos);
  471. }
  472. storedQueryVarCount[storedQueryCount] = vCount;
  473. storedQueryCount += 1;
  474. }
  475. sqpos = theReply.indexOf("<STOREDQUERY name=",endpos);
  476. sqpos2 = theReply.indexOf("</STOREDQUERY>",sqpos);
  477. }
  478. }
  479. blurb=null;
  480. if (storedQueryCount==0) {
  481. alert(LayerName[ActiveLayerIndex] + msgList[77]);
  482. } else {
  483. storedQueryForm();
  484. }
  485. }
  486. // storedQuery Form
  487. function storedQueryForm() {
  488. if (checkIfActiveLayerAvailable()) {
  489. writeStoredQueryForm(storedQueryIndex);
  490. }
  491. }
  492. function writeStoredQueryForm(theIndex) {
  493. storedQueryIndex=theIndex;
  494. var url = appDir + "storedquery.htm";
  495. if (storedQueryVarCount==0) {
  496. sendStoredQuery(theIndex,"");
  497. } else {
  498. if (useTextFrame) {
  499. parent.TextFrame.document.location = url;
  500. } else {
  501. var Win1 = open(url,"QueryWindow","width=575,height=150,scrollbars=yes,resizable=yes");
  502. }
  503. }
  504. }
  505. // create the querystring for storedQuery and send it
  506. function sendStoredQuery(theIndex,theValue) {
  507. showRetrieveData();
  508. var oldString = storedQueryString[theIndex];
  509. if (storedQueryVarCount[theIndex]>0) {
  510. var var1 = storedQueryVariable[theIndex].split("|");
  511. var var2 = theValue.split("|");
  512. for (var i=0;i<var1.length;i++) {
  513. oldString = swapStuff(oldString,var1[i],var2[i]);
  514. }
  515. } else {
  516. oldString = swapStuff(oldString,storedQueryVariable[theIndex],theValue);
  517. }
  518. var newString2 = parseEntity(oldString);
  519. var newString = makeXMLsafe(newString2);
  520. //alert(oldString + "n" + newString);
  521. setQueryString = newString;
  522. selectionMode=1;
  523. var theString = writeQueryXML(newString);
  524. //alert("StoredQuery Request:n" + theString);
  525. sendToServer(imsQueryURL,theString,queryXMLMode);
  526. }
  527. // see if there are storedQueries (Search) 
  528. function checkStoredQueries(theReply) {
  529. var startpos = theReply.indexOf("<STOREDQUERY",1);
  530. if (startpos==-1) {
  531. //no storedqueries. . . do not display button
  532. useStoredQuery=false;
  533. }
  534. }
  535. function writeStartQueryXML(queryString, idAndShapeOnly) {
  536. if (swapSelectFields) {
  537. selectFields=selFieldList[ActiveLayerIndex];
  538. }
  539. var theString = '<ARCXML VERSION="1.1">n<REQUEST>n<GET_FEATURES outputmode="xml" geometry="false" envelope="true" checkesc ="true"';
  540. theString += ' compact="true" featurelimit="' + maxFeaturesReturned + '" beginrecord="0">n';
  541. //CustomLayer===================================================
  542. if (mCustomLayer.getActiveLayer()>-1){
  543. theString += mCustomLayer.getActiveLayerString();
  544. }else{
  545. theString += '<LAYER id="' + LayerID[ActiveLayerIndex] + '" />';
  546. }
  547. //CustomLayer===================================================
  548. if (idAndShapeOnly) {
  549. theString += '<QUERY subfields="#ID# #SHAPE#" where="' + queryString + '" />';
  550. } else {
  551. theString += '<QUERY subfields="' + selectFields + '" where="' + queryString + '" />';
  552. }
  553. theString += '</GET_FEATURES>';
  554. theString += '</REQUEST>';
  555. theString += '</ARCXML>';
  556. //alert(theString);
  557. return theString;
  558. }
  559. function setStartQuery() {
  560. var theString = writeStartQueryXML(highlightedOne,true);
  561. sendToServer(imsQueryURL, theString, 20);
  562. }
  563. function parseStartQuery(theReply) {
  564. //alert(theReply);
  565. var theError = getXMLErrorMessage(theReply);
  566. if (theError=="") {
  567. if (queryZoom && isThereEnvelope(theReply, 0, theReply.length-1)) {
  568. //getXYs(theReply);
  569. getSelectedEnvelope(theReply);
  570. startLeft = eLeft;
  571. startTop = eTop;
  572. startRight = eRight;
  573. startBottom = eBottom;
  574. var fWidth = eRight - eLeft;
  575. var fHeight = eTop - eBottom;
  576. var mWMargin = 0;
  577. var mHMargin = 0;
  578. //alert(LayerType[ActiveLayerIndex]);
  579. if (LayerType[ActiveLayerIndex]=="point" && eLeft==eRight && eTop==eBottom) {
  580. selectType="point";
  581. //alert("fullWidth=" + fullWidth + "nfullHeight=" + fullHeight);
  582. mWMargin = fullWidth * selectPointMargin;
  583. mHMargin = fullHeight * selectPointMargin;
  584. } else {
  585. mWMargin = fWidth * selectMargin;
  586. mHMargin = fHeight * selectMargin; 
  587. }
  588. //alert("mWMargin=" + mWMargin + "nmHMargin=" + mHMargin);
  589. eLeft = eLeft - mWMargin;
  590. eRight = eRight + mWMargin;
  591. eTop = eTop + mHMargin;
  592. eBottom = eBottom - mHMargin;
  593. startLeft = eLeft;
  594. startTop = eTop;
  595. startRight = eRight;
  596. startBottom = eBottom;
  597. }
  598. sendMapXML();
  599. } else {
  600. alert(theError);
  601. }
  602. }
  603. function getSelectedEnvelope(theReply) {
  604. eLeft = 9999999999;
  605. eTop = -9999999999;
  606. eRight = -9999999999;
  607. eBottom = 99999999999;
  608. var pos = theReply.indexOf("<ENVELOPE", pos);
  609. var endpos = 0;
  610. var theXYs;
  611. do  {
  612. theXYs = getEnvelopeXYs(theReply, pos);
  613. if (theXYs[0]<eLeft) eLeft = theXYs[0];
  614. if (theXYs[1]<eBottom) eBottom = theXYs[1];
  615. if (theXYs[2]>eRight) eRight = theXYs[2];
  616. if (theXYs[3]>eTop) eTop = theXYs[3];
  617. endpos = theReply.indexOf("/>", pos);
  618. pos = theReply.indexOf("<ENVELOPE", endpos);
  619. } while (pos!=-1)
  620. }