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

GIS编程

开发平台:

ASP/ASPX

  1. // aimsBuffer.js
  2. /*
  3. *  JavaScript template file for ArcIMS HTML Viewer
  4. * dependent on aimsXML.js, ArcIMSparam.js, aimsCommon.js, aimsMap.js, aimsIdentify.js, 
  5. * aimsSelect.js, aimsQuery.js, and aimsLayers.js
  6. * To be interactive, dependent also on aimsDHTML.js, aimsClick.js, and aimsNavigation.js
  7. */
  8. aimsBufferPresent=true;
  9. var drawTargetLayer = true;
  10. var bufferTargetLayer = "";
  11. var bufferTargetLayerIndex = 0;
  12. var bufferDistance = 5;
  13. var bufferSmoothEdges = 1/100;
  14. var getBufferedData = false;
  15. /*
  16. ***************************************************************************************
  17. Buffer functions 
  18. ***************************************************************************************
  19. */
  20. function writeBufferForm() {
  21. var url = appDir + "buffer.htm";
  22. if (useTextFrame) {
  23. parent.TextFrame.document.location = url;
  24. } else {
  25. Win1 = open(url,"BufferWindow","width=575,height=150,scrollbars=yes,resizable=yes");
  26. }
  27. }
  28. // buffer around selected features
  29. function bufferIt() {
  30. hideLayer("measureBox");
  31. showBuffer=true;
  32. sendMapXML();
  33. }
  34. // add buffer stuff to Map XML request
  35. function addBufferToMap() {
  36. var buffString = "";
  37. if (selectionMode==1) {
  38. if (drawTargetLayer) {
  39. buffString += '<LAYER type="featureclass" name="' + titleList[24] + '" visible="true">n';
  40. buffString += '<DATASET fromlayer="' + LayerID[ActiveLayerIndex] + '" />n';
  41. buffString += '<SPATIALQUERY where="' + setQueryString + '" >n';
  42. buffString += '<BUFFER distance="' + forceComma(bufferDistance) + '" ';
  43. buffString += ' bufferunits="' + ScaleBarUnits.toLowerCase() + '"';
  44. buffString += '>n';
  45. if (useLimitExtent) {
  46. // keep this within the limitExtent
  47. buffString += '<SPATIALQUERY>n';
  48. buffString += '<SPATIALFILTER relation="area_intersection">n';
  49. buffString += '<ENVELOPE maxx="' + forceComma(limitRight) + '" maxy="' + forceComma(limitTop) + '" minx="' + forceComma(limitLeft) + '" miny="' + forceComma(limitBottom) + '" />n';
  50. buffString += '</SPATIALFILTER>n';
  51. buffString += '</SPATIALQUERY>n';
  52. }
  53. buffString += '<TARGETLAYER id="' + LayerID[bufferTargetLayerIndex] + '" />n';
  54. buffString += '</BUFFER>n';
  55. buffString += '</SPATIALQUERY>n';
  56. buffString += '<SIMPLERENDERER>n';
  57. var tlType = LayerType[bufferTargetLayerIndex];
  58. if (tlType=="point") {
  59. buffString += '<SIMPLEMARKERSYMBOL color="' + highlightColor + '" type="Circle" width="10" />n';
  60. } else if (tlType=="line") {
  61. buffString += '<SIMPLELINESYMBOL color="' + highlightColor + '" width="2" />n';
  62. } else {
  63. buffString += '<SIMPLEPOLYGONSYMBOL fillcolor="' + highlightColor + '" filltype="solid" transparency="' + forceComma(5/10) + '" boundarycolor="255,255,255" />n';
  64. }
  65.     buffString += '</SIMPLERENDERER>n';
  66. buffString += '</LAYER>n';
  67. }
  68. buffString += '<LAYER type="featureclass" name="' + titleList[25] + '" visible="true">n';
  69. buffString += '<DATASET fromlayer="' + LayerID[ActiveLayerIndex] + '" />n';
  70. buffString += '<SPATIALQUERY where="' + setQueryString + '" >n';
  71. buffString += '<BUFFER distance="' + forceComma(bufferDistance) + '" bufferunits="' + ScaleBarUnits.toLowerCase() + '" />n';
  72. buffString += '</SPATIALQUERY>n';
  73. buffString += '<SIMPLERENDERER>n';
  74. buffString += '<SIMPLEPOLYGONSYMBOL fillcolor="100,100,100" filltype="solid" transparency="' + forceComma(35/100) + '" boundarycolor="255,255,255" />n';
  75.     buffString += '</SIMPLERENDERER>n';
  76. buffString += '</LAYER>n';
  77. } else if ((selectionMode==2) ||(selectionMode==3)){
  78. if (drawTargetLayer) {
  79. buffString += '<LAYER type="featureclass" name="' + titleList[26] + '" visible="true">n';
  80. buffString += '<DATASET fromlayer="' + LayerID[ActiveLayerIndex] + '" />n';
  81. buffString += '<SPATIALQUERY>n';
  82. buffString += '<BUFFER distance="' + forceComma(bufferDistance) + '" bufferunits="' + ScaleBarUnits.toLowerCase() + '">n';
  83. buffString += '<TARGETLAYER id="' + LayerID[bufferTargetLayerIndex] + '" />n';
  84. if (useLimitExtent) {
  85. // keep this within the limitExtent
  86. buffString += '<SPATIALQUERY>n';
  87. buffString += '<SPATIALFILTER relation="area_intersection">n';
  88. buffString += '<ENVELOPE maxx="' + forceComma(limitRight) + '" maxy="' + forceComma(limitTop) + '" minx="' + forceComma(limitLeft) + '" miny="' + forceComma(limitBottom) + '" />n';
  89. buffString += '</SPATIALFILTER>n';
  90. buffString += '</SPATIALQUERY>n';
  91. }
  92. buffString += '</BUFFER>n';
  93. // select rectangle or shape
  94. buffString += '<SPATIALFILTER relation="area_intersection">n';
  95. if (selectionMode==2) {
  96. buffString += '<ENVELOPE ' + selectEnvelope + ' />n';
  97. } else {
  98. if (clickType==2) {
  99. buffString += '<POLYLINE>n<PATH>n';
  100. } else if (clickType==3) {
  101. buffString += '<POLYGON>n<RING>n';
  102. } else {
  103. buffString += '<MULTIPOINT>n';
  104. }
  105. for (var i=0;i<clickCount;i++) {
  106. buffString += '<POINT x="' + clickPointX[i] + '" y="' + clickPointY[i] + '" />n'; 
  107. }
  108. if (clickType==3) {
  109. buffString += '</RING>n</POLYGON>n';
  110. } else if (clickType==2) {
  111. buffString += '</PATH>n</POLYLINE>n';
  112. } else {
  113. buffString += '</MULTIPOINT>n';
  114. }
  115. }
  116. buffString += '</SPATIALFILTER>n';
  117. buffString += '</SPATIALQUERY>n';
  118. buffString += '<SIMPLERENDERER>n';
  119. var tlType = LayerType[bufferTargetLayerIndex];
  120. if (tlType=="point") {
  121. buffString += '<SIMPLEMARKERSYMBOL color="' + highlightColor + '" type="Circle" width="10" />n';
  122. } else if (tlType=="line") {
  123. buffString += '<SIMPLELINESYMBOL color="' + highlightColor + '" width="2" />n';
  124. } else {
  125. buffString += '<SIMPLEPOLYGONSYMBOL fillcolor="' + highlightColor + '" filltype="solid" transparency="' + forceComma(35/100) + '" boundarycolor="255,255,255" />n';
  126. }
  127.     buffString += '</SIMPLERENDERER>n';
  128. buffString += '</LAYER>n';
  129. }
  130.    buffString += '<LAYER type="featureclass" name="' + titleList[27] + '" visible="true">n';
  131.      buffString += '<DATASET fromlayer="' + LayerID[ActiveLayerIndex] + '" />n';
  132.      buffString += '<SPATIALQUERY>n';
  133.        buffString += '<BUFFER distance="' + forceComma(bufferDistance) + '" bufferunits="' + ScaleBarUnits.toLowerCase() + '" />n';
  134.        buffString += '<SPATIALFILTER relation="area_intersection">n';
  135. if (selectionMode==2) {
  136. buffString += '<ENVELOPE ' + selectEnvelope + ' />n';
  137. } else {
  138. if (clickType==2) {
  139. buffString += '<POLYLINE>n<PATH>n';
  140. } else if (clickType==3) {
  141. buffString += '<POLYGON>n<RING>n';
  142. } else {
  143. buffString += '<MULTIPOINT>n';
  144. }
  145. for (var i=0;i<clickCount;i++) {
  146. buffString += '<POINT x="' + clickPointX[i] + '" y="' + clickPointY[i] + '" />n'; 
  147. }
  148. if (clickType==3) {
  149. buffString += '</RING>n</POLYGON>n';
  150. } else if (clickType==2) {
  151. buffString += '</PATH>n</POLYLINE>n';
  152. } else {
  153. buffString += '</MULTIPOINT>n';
  154. }
  155. }
  156. buffString += '</SPATIALFILTER>n';
  157. if (useLimitExtent) {
  158. // keep this within the limitExtent
  159. buffString += '<SPATIALFILTER relation="area_intersection">n';
  160. buffString += '<ENVELOPE maxx="' + forceComma(limitRight) + '" maxy="' + forceComma(limitTop) + '" minx="' + forceComma(limitLeft) + '" miny="' + forceComma(limitBottom) + '" />n';
  161. buffString += '</SPATIALFILTER>n';
  162. }
  163.      buffString += '</SPATIALQUERY>n';
  164.      buffString += '<SIMPLERENDERER>n';
  165.        buffString += '<SIMPLEPOLYGONSYMBOL fillcolor="100,100,100" filltype="solid" transparency="' + forceComma(5/10) + '" boundarycolor="255,255,255" />n';
  166.      buffString += '</SIMPLERENDERER>n';
  167.    buffString += '</LAYER>n';
  168. }
  169. return buffString;
  170. }
  171. function writeGetBufferedData() {
  172. var buffString = "";
  173. queryStartRecord=1;
  174. showRetrieveData();
  175. switch(selectionMode) {
  176. case 1:
  177. buffString = writeQueryBufferXML();
  178. break;
  179. case 2:
  180. buffString = writeEnvelopeBufferXML();
  181. break;
  182. case 3:
  183. buffString = writeShapeBufferXML(clickType-1);
  184. break;
  185. }
  186. //alert(buffString);
  187. return buffString;
  188. }
  189. function writeQueryBufferXML() {
  190. if (swapSelectFields) {
  191. selectFields=selFieldList[bufferTargetLayerIndex];
  192. }
  193. var targetLayerType = LayerType[bufferTargetLayerIndex];
  194. var theString = '<ARCXML version="1.1">n<REQUEST>n<GET_FEATURES outputmode="xml" geometry="false" envelope="false" checkesc ="true" ';
  195. theString += ' featurelimit="' + maxFeaturesReturned + '" beginrecord="' + queryStartRecord + '"';
  196. theString += '>n';
  197. //CustomLayer===================================================
  198. if (mCustomLayer.getActiveLayer()>-1){
  199. theString += mCustomLayer.getActiveLayerString();
  200. }else{
  201. theString += '<LAYER id="' + ActiveLayer + '" ftype="' + ActiveLayerType + '" />n';
  202. }
  203. //CustomLayer===================================================
  204. theString += '<SPATIALQUERY where="' + setQueryString + '">n';
  205. theString += '<BUFFER distance="' + forceComma(bufferDistance) + '" bufferunits="' + ScaleBarUnits.toLowerCase() + '" >n'; 
  206. theString += '<TARGETLAYER id="' + LayerID[bufferTargetLayerIndex] + '"/>n';
  207. theString += '<SPATIALQUERY subfields="' + selectFields + '" />n';
  208. theString += '</BUFFER>n';
  209. if (useLimitExtent) {
  210. // keep this within the limitExtent
  211. theString += '<SPATIALFILTER relation="area_intersection">n';
  212. theString += '<ENVELOPE maxx="' + forceComma(limitRight) + '" maxy="' + forceComma(limitTop) + '" minx="' + forceComma(limitLeft) + '" miny="' + forceComma(limitBottom) + '" />n';
  213. theString += '</SPATIALFILTER>n';
  214. }
  215. theString += '</SPATIALQUERY>n';
  216. theString += '</GET_FEATURES>';
  217. theString += '</REQUEST>';
  218. theString += '</ARCXML>';
  219. //alert("writeQueryXML()nQuery XML Request:n" + theString);
  220. return theString;
  221. }
  222. // write out xml request for selection by shape
  223. function writeShapeBufferXML(theType) {
  224. if (swapSelectFields) {
  225. selectFields=selFieldList[bufferTargetLayerIndex];
  226. }
  227. var theString = '<ARCXML version="1.1">n<REQUEST>n<GET_FEATURES outputmode="xml" envelope="false" geometry="false" checkesc ="true" ';
  228. theString += ' featurelimit="' + maxFeaturesReturned + '" beginrecord="' + queryStartRecord + '"';
  229. theString += '>n';
  230. //CustomLayer===================================================
  231. if (mCustomLayer.getActiveLayer()>-1){
  232. theString += mCustomLayer.getActiveLayerString();
  233. }else{
  234. theString += '<LAYER id="' + ActiveLayer + '" ftype="' + ActiveLayerType + '" />';
  235. }
  236. //CustomLayer===================================================
  237. theString += '<SPATIALQUERY>';
  238. if (useLimitExtent) {
  239. // keep this within the limitExtent
  240. theString += '<SPATIALFILTER relation="area_intersection">n';
  241. theString += '<ENVELOPE maxx="' + forceComma(limitRight) + '" maxy="' + forceComma(limitTop) + '" minx="' + forceComma(limitLeft) + '" miny="' + forceComma(limitBottom) + '" />n';
  242. theString += '</SPATIALFILTER>n';
  243. }
  244. theString += '<SPATIALFILTER relation="area_intersection" >';
  245. if (theType==1) {
  246. theString += '<POLYLINE>n<PATH>n';
  247. } else {
  248. theString += '<POLYGON>n<RING>n';
  249. }
  250. for (var i=0;i<clickCount;i++) {
  251. theString += '<POINT x="' + clickPointX[i] + '" y="' + clickPointY[i] + '" />n'; 
  252. }
  253. if (theType==2) {
  254. theString += '</RING>n</POLYGON>n';
  255. } else {
  256. theString += '</PATH>n</POLYLINE>n';
  257. }
  258. theString += '</SPATIALFILTER>';
  259. if (useLimitExtent) {
  260. // keep this within the limitExtent
  261. theString += '<SPATIALFILTER relation="area_intersection">n';
  262. theString += '<ENVELOPE maxx="' + forceComma(limitRight) + '" maxy="' + forceComma(limitTop) + '" minx="' + forceComma(limitLeft) + '" miny="' + forceComma(limitBottom) + '" />n';
  263. theString += '</SPATIALFILTER>n';
  264. }
  265. theString += '<BUFFER distance="' + forceComma(bufferDistance) + '" bufferunits="' + ScaleBarUnits.toLowerCase() + '" >n'; 
  266. theString += '<TARGETLAYER id="' + LayerID[bufferTargetLayerIndex] + '"/>n';
  267. theString += '<SPATIALQUERY subfields="' + selectFields + '" />n';
  268. theString += '</BUFFER>n';
  269. theString += '</SPATIALQUERY>';
  270. theString += '</GET_FEATURES>';
  271. theString += '</REQUEST>';
  272. theString += '</ARCXML>';
  273. //alert(theString);
  274. return theString;
  275. }
  276. // generic envelope select xml write routine
  277. function writeEnvelopeBufferXML() {
  278. if (swapSelectFields) {
  279. selectFields=selFieldList[bufferTargetLayerIndex];
  280. }
  281. var theString = '<ARCXML version="1.1">n<REQUEST>n<GET_FEATURES outputmode="xml" envelope="false" geometry="false" checkesc ="true"';
  282. theString += ' featurelimit="' + maxFeaturesReturned + '" beginrecord="' + queryStartRecord + '"';
  283. theString += '>n';
  284. //CustomLayer===================================================
  285. if (mCustomLayer.getActiveLayer()>-1){
  286. theString += mCustomLayer.getActiveLayerString();
  287. }else{
  288. theString += '<LAYER id="' + ActiveLayer + '" ftype="' + ActiveLayerType + '" />';
  289. }
  290. //CustomLayer===================================================
  291. theString += '<SPATIALQUERY>';
  292. theString += '<SPATIALFILTER relation="area_intersection" >n';
  293. theString += '<ENVELOPE ' + selectEnvelope + ' />';
  294. theString += '</SPATIALFILTER>n';
  295. if (useLimitExtent) {
  296. // keep this within the limitExtent
  297. theString += '<SPATIALFILTER relation="area_intersection">n';
  298. theString += '<ENVELOPE maxx="' + forceComma(limitRight) + '" maxy="' + forceComma(limitTop) + '" minx="' + forceComma(limitLeft) + '" miny="' + forceComma(limitBottom) + '" />n';
  299. theString += '</SPATIALFILTER>n';
  300. }
  301. theString += '<BUFFER distance="' + forceComma(bufferDistance) + '" bufferunits="' + ScaleBarUnits.toLowerCase() + '" >n'; 
  302. theString += '<TARGETLAYER id="' + LayerID[bufferTargetLayerIndex] + '"/>n';
  303. theString += '<SPATIALQUERY subfields="' + selectFields + '" />n';
  304. theString += '</BUFFER>n';
  305. theString += '</SPATIALQUERY>';
  306. theString += '</GET_FEATURES>';
  307. theString += '</REQUEST>';
  308. theString += '</ARCXML>';
  309. return theString;
  310. }
  311. // parse XML response for selected features
  312. function getBufferAttributeData(theReply) {
  313. var docObject = parent.MapFrame;
  314. var docName = "parent.MapFrame";
  315. if (!useTextFrame) docName = "opener.parent.MapFrame";
  316. var str = '<html><meta http-equiv="Content-Type" content="text/html; charset=' + charSet + '"><head><title>' + titleList[10] + '</title></head>';
  317. str += '<body bgcolor="' + textFrameBackColor + '" text="Black" link="Blue" vlink="Gray" LEFTMARGIN=0 onload="window.focus()" onunload="' + docName + '.focusOnData=false">';
  318. setLayerFields(bufferTargetLayerIndex);
  319. str += writeOutDataPage(theReply,bufferTargetLayerIndex,docObject,docName,Win1);
  320. str += '</body></html>';
  321. var Win1;
  322. if (useTextFrame) {
  323. Win1 = parent.TextFrame;
  324. Win1.document.open();
  325. } else {
  326. Win1 = open("","DataWindow","width=575,height=250,scrollbars=yes,resizable=yes");
  327. extWin = Win1;
  328. focusOnData = true;
  329. }
  330. Win1.document.writeln(str);
  331. Win1.document.close();
  332. hideRetrieveData();
  333. }
  334. // request more records to display
  335. function getMoreBufferData(startRecord) {
  336. var theString = "";
  337. queryStartRecord = startRecord;
  338. if (selectionMode==1) {
  339. //query
  340. theString = writeQueryBufferXML();
  341. } else if (selectionMode==2) {
  342. theString = writeGetBufferFeatures();
  343. } else {
  344. var theType = clickType-1;
  345. theString = writeShapeBufferXML(theType);
  346. }
  347. showRetrieveData();
  348. sendToServer(imsQueryURL,theString,11);
  349. }
  350. function writeGetBufferFeatures() {
  351. if (swapSelectFields) {
  352. selectFields=selFieldList[bufferTargetLayerIndex];
  353. }
  354. var theString = writeEnvelopeBufferXML();
  355. //alert(theString);
  356. selectLayer=bufferTargetLayer;
  357. selectType=bufferTargetLayerIndex;
  358. selectCount=0;
  359. hightlightedOne="";
  360. selectPoints.length=1;
  361. selectLeft.length=1;
  362. selectRight.length=1;
  363. selectTop.length=1;
  364. selectBottom.length=1;
  365. return theString;
  366. }