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

GIS编程

开发平台:

ASP/ASPX

  1. // aimsLayers.js
  2. /*
  3. *  JavaScript template file for ArcIMS HTML Viewer
  4. * dependent on aimsXML.js, ArcIMSparam.js, aimsCommon.js, aimsMap.js,
  5. * aimsDHTML.js
  6. */
  7. aimsLayersPresent=true;
  8. var LayerName = new Array();
  9. var LayerID = new Array();
  10. var LayerVisible = new Array();
  11. var LayerType = new Array();
  12. var LayerIsFeature = new Array();
  13. var LayerExtent = new Array();
  14. var LayerMinScale = new Array();
  15. var LayerMaxScale = new Array();
  16. var LayerRenderString = new Array();
  17. var LayerShapeField = new Array();
  18. var LayerIDField = new Array();
  19. var LayerFieldList = new Array();
  20. var LayerFieldTypeList = new Array();
  21. var LayerFieldSizeList = new Array();
  22. var LayerFieldPrecisionList = new Array();
  23. var LayerFields = new Array();
  24. var LayerFieldType = new Array();
  25. var LayerFieldPrecision = new Array(); 
  26. // 
  27. var serverLayerCount = 0;
  28. var LayerFieldCount=0;
  29. var ActiveLayer="";
  30. var ActiveLayerType="";
  31. var layerCount = 0;
  32. var layerLeft = 0;
  33. var layerRight = 0;
  34. var layerTop = 0;
  35. var layerBottom = 0;
  36. var fieldIndex = 0;
  37. var FeatureLayerCount = 0;
  38. // field aliases arrays
  39. var AliasFieldName = new Array();
  40. var AliasFieldAlias = new Array();
  41. var LayerListOpen=false;
  42. var queryOpen = false;
  43. var displayLayerInfoButton=false;
  44. var setLayerVisible = new Array();
  45. // check for query form. . . if present, update field list
  46. function setActiveLayer(i) {
  47. fieldIndex=0;
  48. selectCount=0;
  49. showBuffer=false;
  50. ActiveLayer=LayerID[i];
  51. ActiveLayerType=LayerType[i];
  52. ActiveLayerIndex=i;
  53. //CustomLayer===================================================
  54. if (i < serverLayerCount){
  55. mCustomLayer.setActiveLayer(-1);
  56. mCustomLayer.setActiveLayerString('');
  57. setLayerFields(i);
  58. if (useGeocode) {
  59. // if active layer is geocodeable - set current geocode layer to active layer
  60. if (GCLayerCount>0) {
  61. var j =-1;
  62. for (var k=0;k<GCLayerId.length;k++) {
  63. if (ActiveLayer==GCLayerId[k]) j=k;
  64. }
  65. if (j!=-1) {
  66. GCActiveLayer=j;
  67. }
  68. }
  69. }
  70. }else{
  71. mCustomLayer.setActiveLayer(i);
  72. mCustomLayer.setActiveLayerString(getCustonmsWorkSpace() + LayerList[i]);
  73. //alert(mCustomLayer.getActiveLayerString());
  74. //alert(mCustomLayer.getActiveLayer()+'n'+mCustomLayer.getCustomLayer());
  75. //alert('存在自定义图层,加载在aimsLayers.js->setActiveLayer');
  76. }
  77. //CustomLayer===================================================
  78. if (queryOpen) {
  79. queryForm();
  80. } else {
  81. if ((useExternalWindow) || (!useTextFrame)) {
  82. Win1 = window.open("","QueryWindow","width=575,height=120,scrollbars=yes,resizable=yes");
  83. theFrame = "opener";
  84. if (parent.MapFrame!=null) theFrame = "opener.parent.MapFrame";
  85. } else {
  86. Win1 = parent.TextFrame;
  87. Win1.document.open();
  88. }
  89. Win1.document.open();
  90. Win1.document.writeln('<html><meta http-equiv="Content-Type" content="text/html; charset=' + charSet + '"><head><title>' + titleList[1] + '</title></head>');
  91. Win1.document.writeln('<body bgcolor="' + tableBackColor + '" text="Black" link="Blue" vlink="Gray" LEFTMARGIN=0 onload="window.focus()">');
  92. Win1.document.writeln('<center><FONT FACE="Arial" SIZE="-1"><b>' + LayerName[ActiveLayerIndex] + msgList[20] + '</b>');
  93. Win1.document.writeln('</font></center></body></html>');
  94. Win1.document.close();
  95. }
  96. }
  97. // write out form for layerList in separate window
  98. function writeLayerListForm() {
  99. var Win1 = open(appDir + "toc.htm","LayerListWindow","width=190,height=300,scrollbars=yes,resizable=yes");
  100. Win1.focus();
  101. Win1=null;
  102. }
  103. // set up the LayerVisible array for map display
  104. function setupLayerVisible() {
  105. //alert("setupLayerVisible");
  106. var toggleCount = LayerVisible.length;
  107. if (setLayerVisible.length<toggleCount) toggleCount = setLayerVisible.length;
  108. for (var i=0;i<toggleCount;i++) {
  109. LayerVisible[i] = setLayerVisible[i];
  110. }
  111. }
  112. // get list of layers, id/shape fields, scalefactors, etc.
  113. function getLayers(theReply) {
  114. //alert("LayerInfo:n" + theReply.length);
  115. var theReplyUC = theReply.toUpperCase();
  116. LayerFields.length = 1;
  117. var startpos = 0;
  118. var endpos = 0;
  119. var pos = -1;
  120. var lpos = 1;
  121. var epos = 1;
  122. var zpos=1;
  123. var zpos2 = 1;
  124. var tempString="";
  125. var visString = "";
  126. var typeString="";
  127. var fieldString = "";
  128. var testString = "";
  129. var testString2 = "";
  130. var minString = "";
  131. var maxString = "";
  132. if (LayerID.length>0) {
  133. //layerCount = LayerID.length;
  134. //alert("Already got layer parameters");
  135. } else {
  136. //alert("Getting layer parameters");
  137. var fieldCount = 0;
  138. layerCount = 0;
  139. LayerName.length=1;
  140. LayerType.length=1;
  141. LayerVisible.length=1;
  142. LayerExtent.length=1;
  143. LayerIsFeature.length=1;
  144. LayerID.length=1;
  145. LayerIDField.length=1;
  146. LayerShapeField.length=1;
  147. LayerMinScale.length=1;
  148. LayerMaxScale.length=1;
  149. LayerFieldTypeList.length=1;
  150. LayerFieldList.length=1;
  151. LayerRenderString.length=1;
  152. LayerFieldSizeList.length=1;
  153. LayerFieldPrecisionList.length=1;
  154. layerCount = 0;
  155. var layerMinX=0;
  156. var layerMinY=0;
  157. var layerMaxX=0;
  158. var layerMaxY=0;
  159. //alert("Processing LayerInfo");
  160. lpos = theReplyUC.indexOf("<LAYERINFO",zpos);
  161. while (lpos > -1) {
  162. //alert("<LAYERINFO - pos " + lpos );
  163. if (lpos != -1) {
  164. zpos = theReplyUC.indexOf("</LAYERINFO",lpos);
  165. //alert("</LAYERINFO - pos " +  zpos);
  166. if (zpos!=-1) {
  167. pos = theReplyUC.indexOf("NAME=",lpos);
  168. if (pos != -1) {
  169. startpos = pos + 6;
  170. endpos = theReply.indexOf(dQuote, startpos);
  171. tempString = theReply.substring(startpos,endpos);
  172. tempString = tempString.replace(/&apos;/g, "'");
  173. LayerName[layerCount] = tempString;
  174. testString2 = 'TYPE="FEATURECLASS"';
  175. pos = theReplyUC.indexOf(testString2,lpos);
  176. if ((pos != -1) && (pos<zpos)) 
  177. LayerIsFeature[layerCount]=true;
  178. else LayerIsFeature[layerCount]=false;
  179. //startpos = theReplyUC.indexOf("VISIBLE=",endpos);
  180. startpos = theReplyUC.indexOf("VISIBLE=",lpos);
  181. if (startpos != -1) {
  182. startpos = startpos + 9;
  183. endpos = startpos + 4;
  184. visString = theReply.substring(startpos,endpos);
  185. }
  186. startpos = theReplyUC.indexOf("ID=",lpos);
  187. if ((startpos != -1) && (startpos<zpos)) {
  188. startpos = startpos + 4;
  189. endpos = theReply.indexOf(dQuote, startpos);
  190. tempString = theReply.substring(startpos,endpos);
  191. tempString = tempString.replace(/&apos;/g, "'");
  192. LayerID[layerCount] = tempString;
  193. } else {
  194. LayerID[layerCount] = LayerName[layerCount];
  195. }
  196. //alert(LayerID[layerCount]);
  197. if (visString=="true") {LayerVisible[layerCount] = 1} else {LayerVisible[layerCount] = 0};
  198. //alert(startpos + "/" + LayerName[layerCount] + ":" + visString);
  199. startpos = theReplyUC.indexOf("MINSCALE=",lpos);
  200. if ((startpos != -1) && (startpos<zpos)) {
  201. startpos += 10;
  202. endpos = theReply.indexOf(dQuote, startpos);
  203. minString = theReply.substring(startpos,endpos);
  204. minString = setDecimalString(minString);
  205. LayerMinScale[layerCount] = parseFloat(minString);
  206. } else {
  207. LayerMinScale[layerCount] = 0;
  208. }
  209. startpos = theReplyUC.indexOf("MAXSCALE=",lpos);
  210. if ((startpos != -1) && (startpos<zpos)) {
  211. startpos += 10;
  212. endpos = theReply.indexOf(dQuote, startpos);
  213. maxString = theReply.substring(startpos,endpos);
  214. maxString = setDecimalString(maxString);
  215. LayerMaxScale[layerCount] = parseFloat(maxString);
  216. } else {
  217. LayerMaxScale[layerCount] = 1.7976931348623157E308;
  218. }
  219. //alert("MinScale:" + LayerMinScale[layerCount] + "nMaxScale:" + LayerMaxScale[layerCount]);
  220. if (LayerIsFeature[layerCount]) {
  221. startpos = theReplyUC.indexOf("<FCLASS TYPE=",lpos);
  222. zpos2= theReplyUC.indexOf("</FCLASS",lpos);
  223. if (startpos != -1) {
  224. startpos = startpos+14;
  225. endpos = theReply.indexOf(dQuote, startpos);
  226. typeString = theReply.substring(startpos,endpos);
  227. } else {
  228. typeString = "image";
  229. }
  230. } else {
  231. typeString = "image";
  232. }
  233. LayerType[layerCount] = typeString;
  234. var theXYs = getEnvelopeXYs(theReply, lpos);
  235. tempString = theXYs[0] + "|" + theXYs[1] + "|" + theXYs[2] + "|" + theXYs[3];
  236. endpos = xmlEndPos;
  237. theXYs=null;
  238. LayerExtent[layerCount] = tempString;
  239. LayerFieldList[layerCount] = "";
  240. LayerFieldTypeList[layerCount] = "";
  241. LayerFieldSizeList[layerCount] = "";
  242. LayerFieldPrecisionList[layerCount] = "";
  243. LayerIDField[layerCount] = "";
  244. LayerShapeField[layerCount] = "";
  245. if (LayerIsFeature[layerCount]) {
  246. var jpos = 1;
  247. var fldCount = 0;
  248. FeatureLayerCount += 1;
  249. while ((jpos<zpos) && (jpos!=-1)) {
  250. jpos = theReply.indexOf("<FIELD name=",endpos);
  251. if (zpos2 > jpos) {
  252. if (jpos != -1) {
  253. startpos = jpos + 13
  254. endpos = theReply.indexOf(dQuote, startpos);
  255. tempString = theReply.substring(startpos,endpos);
  256. startpos = theReply.indexOf("type=",endpos);
  257. startpos= startpos + 6;
  258. endpos = theReply.indexOf(dQuote, startpos);
  259. testString = theReply.substring(startpos,endpos);
  260. if (testString=="-99") LayerIDField[layerCount] = tempString;
  261. if (testString=="-98") LayerShapeField[layerCount] = tempString;
  262. if (fldCount>0) {
  263. LayerFieldList[layerCount] = LayerFieldList[layerCount] + ",";
  264. LayerFieldTypeList[layerCount] = LayerFieldTypeList[layerCount] + ",";
  265. LayerFieldSizeList[layerCount] = LayerFieldSizeList[layerCount] + ",";
  266. LayerFieldPrecisionList[layerCount] = LayerFieldPrecisionList[layerCount] + ",";
  267. }
  268. LayerFieldList[layerCount] = LayerFieldList[layerCount] + tempString ;
  269. LayerFieldTypeList[layerCount] = LayerFieldTypeList[layerCount] +  testString;
  270. startpos = theReply.indexOf("size=",jpos);
  271. startpos= startpos + 6;
  272. endpos = theReply.indexOf(dQuote, startpos);
  273. testString = theReply.substring(startpos,endpos);
  274. LayerFieldSizeList[layerCount] = LayerFieldSizeList[layerCount] +  testString;
  275. startpos = theReply.indexOf("precision=",jpos);
  276. startpos += 11;
  277. endpos = theReply.indexOf(dQuote, startpos);
  278. testString = theReply.substring(startpos,endpos);
  279. LayerFieldPrecisionList[layerCount] = LayerFieldPrecisionList[layerCount] +  testString;
  280. fldCount += 1;
  281. }
  282. }
  283. else {
  284. // search for next Layer
  285. endpos = zpos;
  286. jpos = -1;
  287. }
  288. }
  289. if (ClassRenderLayer.length>0) {
  290. var sr1 = -1
  291. for (var u=0;u<ClassRenderLayer.length;u++) {
  292. if (ClassRenderLayer[u]==LayerName[layerCount]) sr1=u;
  293. }
  294. if (sr1>-1) {
  295. LayerRenderString[layerCount] = ClassRenderString[sr1];
  296. //alert(ClassRenderLayer[sr1]);
  297. } else {
  298. LayerRenderString[layerCount]="";
  299. }
  300. }
  301. } else {
  302. LayerRenderString[layerCount]="";
  303. }
  304. //alert("Layer " + layerCount + ": " + LayerName[layerCount]);
  305. layerCount += 1;
  306. endpos = zpos;
  307. }
  308. lpos = theReplyUC.indexOf("<LAYERINFO",zpos);
  309. } else {
  310. lpos = -1;
  311. }
  312. }
  313. }
  314. //alert("LayerInfo processed");
  315. LayerName.reverse();
  316. LayerVisible.reverse();
  317. LayerType.reverse();
  318. LayerIDField.reverse();
  319. LayerShapeField.reverse();
  320. LayerExtent.reverse();
  321. LayerIsFeature.reverse();
  322. LayerMinScale.reverse();
  323. LayerMaxScale.reverse();
  324. LayerFieldTypeList.reverse();
  325. LayerFieldList.reverse();
  326. LayerFieldSizeList.reverse();
  327. LayerFieldPrecisionList.reverse();
  328. LayerID.reverse();
  329. LayerRenderString.reverse();
  330. }
  331. if (ActiveLayerIndex>=layerCount) ActiveLayerIndex = 0;
  332. if (!LayerIsFeature[ActiveLayerIndex]) {
  333. var chk = 0;
  334. for (var i=layerCount-1;i>=0;i--) {
  335. if (LayerIsFeature[i]) chk = i;
  336. }
  337. ActiveLayerIndex = chk;
  338. }
  339. ActiveLayer = LayerID[ActiveLayerIndex];
  340. ActiveLayerType = LayerType[ActiveLayerIndex];
  341. checkHyperLinkLayer(ActiveLayerIndex);
  342. if (FeatureLayerCount==0) {
  343. //alert("No Feature Layers");
  344. canQuery=false;
  345. useZoomActive=false;
  346. useIdentify=false;
  347.   useSelect=false;
  348. useQuery=false;
  349. useFind=false;
  350. useBuffer=false;
  351. useStoredQuery=false;
  352. useHyperLink=false;
  353. queryZoom=false;
  354. }
  355. if (noListLayer.length<LayerName.length) {
  356. noListLayer.length = LayerName.length;
  357. for (var i=0;i<LayerName.length;i++) {
  358. if (noListLayer[i]==null) {
  359. noListLayer[i]=false;
  360. }
  361. }
  362. }
  363. //alert(layerCount + " layers");
  364. mCustomLayer.CustonmsStartId = LayerName.length;
  365. // alert('ok')
  366. serverLayerCount = LayerName.length;
  367. }
  368. // set the Layer Field array using the current Active Layer's fields
  369. function setLayerFields(layerIndex) {
  370. //alert(LayerFieldList.join('n'));
  371. LayerFields.length=1;
  372. LayerFieldType.length=1;
  373. LayerFieldPrecision.length=1;
  374. var tempList = new Array();
  375. if (swapSelectFields) {
  376. selectFields=selFieldList[layerIndex];
  377. }
  378. // alert(layerIndex)
  379. // alert(LayerFieldList.join('nn')+'n======n'+layerIndex+'n'+LayerFieldList[layerIndex]);
  380. if (LayerFieldList[layerIndex]!="") {
  381. if (useFieldAlias) {
  382. AliasFieldName.length=0;
  383. AliasFieldAlias.length=0;
  384. var msg = LayerName[layerIndex] + " - aliases: ";
  385. if (fieldAliasList[layerIndex]!=null) {
  386. if (fieldAliasList[layerIndex]!="") {
  387. if (fieldAliasList[layerIndex].indexOf("|")==-1) {
  388. var tempPair = fieldAliasList[layerIndex].split(":");
  389. AliasFieldName[0] = tempPair[0];
  390. AliasFieldAlias[0] = tempPair[1];
  391. msg += fieldAliasList[layerIndex];
  392. tempPair=null;
  393. } else {
  394. tempList = fieldAliasList[layerIndex].split("|");
  395. for (var i=0;i<tempList.length;i++) {
  396. var tempPair = tempList[i].split(":");
  397. AliasFieldName[i] = tempPair[0];
  398. AliasFieldAlias[i] = tempPair[1];
  399. msg += tempList[i] + " ";
  400. }
  401. }
  402. } else {
  403. AliasFieldName[0] = "";
  404. AliasFieldAlias[0] = "";
  405. }
  406. } else {
  407. AliasFieldName[0] = "";
  408. AliasFieldAlias[0] = "";
  409. }
  410. //alert(msg);
  411. }
  412. var fList = LayerFieldList[layerIndex].split(",");
  413. var ftList = LayerFieldTypeList[layerIndex].split(",");
  414. var fpList = LayerFieldPrecisionList[layerIndex].split(",");
  415. var fieldCount = 0;
  416. for (var i=0;i<fList.length;i++) {
  417. var useIt = selectFields.toUpperCase().indexOf(fList[i].toUpperCase());
  418. if ((useIt!=-1) || (selectFields=="#ALL#")) {
  419. if (fList[i].toUpperCase()!=LayerShapeField[layerIndex].toUpperCase()) {
  420. LayerFields[fieldCount] = fList[i];
  421. LayerFieldType[fieldCount] = ftList[i];
  422. LayerFieldPrecision[fieldCount] = fpList[i];
  423. fieldCount += 1;
  424. }
  425. }
  426. }
  427. LayerFieldCount=fieldCount;
  428. canQuery=true;
  429. fList=null;
  430. ftList=null;
  431. } else {
  432. alert(msgList[21]);
  433. canQuery=false;
  434. }
  435. }
  436. // get the Field names from the LayerFieldList array
  437. function getLayerFieldNames(layerIndex) {
  438. if (LayerFieldList[layerIndex]!="") {
  439. var fList = LayerFieldList[layerIndex].split(",");
  440. } else {
  441. var fList=null;
  442. return fList;
  443. }
  444. // get the Field types from the LayerFieldTypeList array
  445. function getLayerFieldTypes(layerIndex) {
  446. if (LayerFieldList[layerIndex]!="") {
  447. var ftList = LayerFieldTypeList[layerIndex].split(",");
  448. } else {
  449. var ftList=null;
  450. return ftList;
  451. }
  452. // get the Field types from the LayerFieldTypeList array
  453. function getLayerFieldSizes(layerIndex) {
  454. if (LayerFieldList[layerIndex]!="") {
  455. var ftList = LayerFieldSizeList[layerIndex].split(",");
  456. } else {
  457. var ftList=null;
  458. return ftList;
  459. }
  460. // get the Field types from the LayerFieldTypeList array
  461. function getLayerFieldPrecisions(layerIndex) {
  462. if (LayerFieldList[layerIndex]!="") {
  463. var ftList = LayerFieldPrecisionList[layerIndex].split(",");
  464. } else {
  465. var ftList=null;
  466. return ftList;
  467. }
  468. // display layer information
  469. function showLayerInfo(layerIndex) {
  470. var url = appDir + "showlayerinfo.htm?" + layerIndex;
  471. if (useTextFrame) {
  472. parent.TextFrame.document.location = url;
  473. } else {
  474. Win1 = open(url,"LayerInfoWindow","width=575,height=250,scrollbars=yes,resizable=yes");
  475. }
  476. }