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

GIS编程

开发平台:

ASP/ASPX

  1. // aimsGeocode.js
  2. /*
  3. *  JavaScript template file for ArcIMS HTML Viewer
  4. * dependent on aimsXML.js, ArcIMSparam.js, aimsCommon.js, aimsMap.js,
  5. * aimsLayers.js, aimsDHTML.js
  6. * aimsClick.js, aimsNavigation.js
  7. */
  8. aimsGeocodePresent=true;
  9. var GCLayers = new Array();
  10. var GCLayerId = new Array();
  11. var GCLayerStyle = new Array();
  12. var GCActiveLayer=0;
  13. var GCidCount=0;
  14. var GCid = new Array();
  15. var GClabel = new Array();
  16. var GCdesc = new Array();
  17. var GCvalue = new Array();
  18. var GCpointX = new Array();
  19. var GCpointY = new Array();
  20. var GCpointCount = 0;
  21. var GCscore = new Array();
  22. var GCaddress = new Array();
  23. var GCLayerCount=0;
  24. var SdcGeocodeStyle = "sdcgeocode";
  25. var geocodeAppMode = "locate"; // default mode - other modes (route, address) require RouteServer Extension
  26. if (imsGeocodeURL=="") {
  27. imsGeocodeURL= imsURL + "&CustomService=Geocode";
  28. }
  29. /*
  30. ***************************************************************************************
  31. Geocoding functions 
  32. ***************************************************************************************
  33. */
  34. // set up geocode
  35. function setupGeocode() {
  36. getGeocodeParams();
  37. }
  38. // get a list of geocoding layers
  39. function getGeocodeLayers() {
  40. var theString = '<ARCXML version="1.1">n<REQUEST>n<GET_SERVICE_INFO />n';
  41. theString += '</REQUEST>n</ARCXML>';
  42. sendToServer(imsGeocodeURL,theString,25);
  43. }
  44. // get the parameters for geocoding the layer
  45. function getGeocodeParams() {
  46. var theString = '<ARCXML version="1.1">n<REQUEST>n<GET_SERVICE_INFO />n';
  47. theString += '</REQUEST>n</ARCXML>';
  48. var theReply="";
  49. sendToServer(imsGeocodeURL,theString,26);
  50. }
  51. // write out the geocode XML request
  52. function writeGeocodeXML() {
  53. var theString = '<ARCXML version="1.1">n<REQUEST>n<GET_GEOCODE maxcandidates="' + maxGeocodeCandidates + '" minscore="' + minGeocodeScore + '">n';
  54. theString += '<LAYER id="' + GCLayerId[GCActiveLayer] + '" />';
  55. theString += '<ADDRESS>n';
  56. for (var i=0;i<GCidCount;i++) {
  57. theString += '<GCTAG id="' + GCid[i] + '" value="' + GCvalue[i] + '"/>n';
  58. }
  59. theString += '</ADDRESS>n</GET_GEOCODE>n</REQUEST>n</ARCXML>n';
  60. //alert(theString);
  61. return theString;
  62. }
  63. // parse out geocoding layers
  64. function parseGeocodeLayers(theReply) {
  65. //alert(theReply);
  66. var pos = 0;
  67. var startpos = 0;
  68. var endpos = 0;
  69. var lpos = 0;
  70. var rCount = 0;
  71. GCLayers.length=1;
  72. GCLayerCount=0;
  73. pos = theReply.indexOf("<LAYERINFO",endpos);
  74. while (pos!=-1) {
  75. lpos = theReply.indexOf('name=',pos);
  76. if (lpos!=-1) {
  77. startpos = lpos + 6;
  78. endpos = theReply.indexOf(dQuote,startpos);
  79. GCLayers[GCLayerCount] = theReply.substring(startpos,endpos);
  80. startpos = theReply.indexOf('id=',endpos);
  81. if (startpos!=-1) {
  82. startpos += 4;
  83. endpos = theReply.indexOf(dQuote,startpos);
  84. GCLayerId[GCLayerCount] = theReply.substring(startpos,endpos);
  85. }
  86. startpos = theReply.indexOf("<GCSTYLE name=",endpos);
  87. if (startpos!=-1) {
  88. startpos += 15;
  89. endpos = theReply.indexOf(dQuote,startpos);
  90. GCLayerStyle[GCLayerCount] = theReply.substring(startpos,endpos);
  91. if (GCLayerStyle[GCLayerCount]==SdcGeocodeStyle) rCount++;
  92. //alert(GCLayerStyle[GCLayerCount]);
  93. }
  94. GCLayerCount=GCLayerCount+1;
  95. pos = theReply.indexOf("<LAYERINFO",endpos);
  96. } else {
  97. // bypass this for now
  98. //alert(theReply);
  99. pos =-1;
  100. }
  101. }
  102. if (rCount==0) {
  103. //no route extension parameters
  104. useRoute=false;
  105. useReverseGeocode=false;
  106. }
  107. if (GCLayerCount==0) {
  108. useGeocode=false;
  109. useRoute=false;
  110. useReverseGeocode=false;
  111. }
  112. if (parent.ToolFrame!=null) {
  113. //alert("Refreshing toolbar");
  114. parent.ToolFrame.document.location= appDir + "toolbar.htm";
  115. //alert("useRoute=" + useRoute + "nuseReverseGeocode=" + useReverseGeocode);
  116. }
  117. // parse out the bacic geocode parameters for the layer
  118. function parseGeocodeParams(theReply,theLayer) {
  119. //alert(theLayer + "n" + theReply);
  120. var pos = 0;
  121. var startpos = 0;
  122. var endpos = 0;
  123. var lpos = 0;
  124. GCid.length=0;
  125. GClabel.length=0;
  126. GCdesc.length=0;
  127. GCidCount=0;
  128. var theName = 'name="' + theLayer + '"'
  129. pos = theReply.indexOf(theName,endpos);
  130. if (pos!=-1) {
  131. //alert(theName + " at " + pos);
  132. startpos = pos + 17;
  133. lpos = theReply.indexOf("</LAYERINFO>",startpos);
  134. startpos = theReply.indexOf("<GCINPUT id=",startpos);
  135. while ((startpos<lpos) && (startpos!=-1)) {
  136. //if ((startpos<lpos) && (startpos!=-1)){
  137. //alert(startpos);
  138. startpos += 13;
  139. endpos = theReply.indexOf(dQuote,startpos); 
  140. GCid[GCidCount] = theReply.substring(startpos,endpos);
  141. startpos = theReply.indexOf("description=",endpos);
  142. startpos += 13;
  143. endpos = theReply.indexOf(dQuote,startpos); 
  144. GCdesc[GCidCount] = theReply.substring(startpos,endpos);
  145. startpos = theReply.indexOf("label=",endpos);
  146. startpos = startpos + 7;
  147. endpos = theReply.indexOf(dQuote,startpos); 
  148. GClabel[GCidCount] = theReply.substring(startpos,endpos);
  149. GCidCount=GCidCount+1;
  150. //}
  151. startpos = theReply.indexOf("<GCINPUT id=",endpos);
  152. }
  153. return true;
  154. } else {
  155. return false;
  156. }
  157. }
  158. // parse out geocode response and display results in table
  159. function parseGeocodeResults(theReply) {
  160. //alert(theReply);
  161. GCscore.length=1;
  162. var pos = theReply.indexOf("<GCCOUNT count=");
  163. var lpos = 0;
  164. var startpos = pos + 16;
  165. var startpos2=0;
  166. var endpos = theReply.indexOf(dQuote,startpos);
  167. var fString = theReply.substring(startpos,endpos);
  168. GCpointCount=parseInt(fString);
  169. var gcCount=0;
  170. var tempX,tempY;
  171. //alert(GCpointCount);
  172. if ((pos>0) && (GCpointCount>0)) {
  173. pos = theReply.indexOf("<FEATURE");
  174. if (pos!=-1) {
  175. while (pos!=-1) {
  176. lpos = theReply.indexOf("<FIELD",pos);
  177. if (lpos!=-1) {
  178. startpos2 = theReply.indexOf('name="SCORE"',lpos);
  179. startpos = theReply.indexOf("FIELDVALUE valuestring=",startpos2);
  180. startpos = startpos + 24;
  181. endpos = theReply.indexOf(dQuote,startpos);
  182. GCscore[gcCount] = theReply.substring(startpos,endpos);
  183. startpos2 = theReply.indexOf('name="ADDRESSFOUND"',lpos);
  184. startpos = theReply.indexOf("FIELDVALUE valuestring=",startpos2);
  185. startpos = startpos + 24;
  186. endpos = theReply.indexOf(dQuote,startpos);
  187. GCaddress[gcCount] = theReply.substring(startpos,endpos);
  188. startpos2 = theReply.indexOf('name="SHAPEFIELD"',lpos);
  189. startpos = theReply.indexOf("<POINT x=",startpos2);
  190. startpos += 10;
  191. endpos = theReply.indexOf(dQuote,startpos);
  192. tempX = theReply.substring(startpos,endpos);
  193. GCpointX[gcCount]= parseFloat(setDecimalString(tempX)); 
  194. startpos = theReply.indexOf("y=",endpos);
  195. startpos = startpos + 3;
  196. endpos = theReply.indexOf(dQuote,startpos);
  197. tempY = theReply.substring(startpos,endpos);
  198. GCpointY[gcCount]= parseFloat(setDecimalString(tempY));   
  199. gcCount++;
  200. }
  201. pos = theReply.indexOf("<FEATURE",endpos);
  202. }
  203. }
  204. if (geocodeAppMode=="locate") {
  205. showGeocode=true;
  206. geocodeX=GCpointX[0];
  207. geocodeY=GCpointY[0];
  208. geocodeLabel=GCaddress[0];
  209. hideRetrieveData();
  210. //} else {
  211. var Win1;
  212. var gPointX, gPointY
  213. var theFrame = "parent.MapFrame";
  214. if ((useExternalWindow) || (!useTextFrame)) {
  215. Win1 = window.open("","GeocodeWindow","width=575,height=120,scrollbars=yes,resizable=yes");
  216. theFrame = "opener";
  217. if (parent.MapFrame!=null) theFrame = "opener.parent.MapFrame";
  218. } else {
  219. Win1 = parent.TextFrame;
  220. Win1.document.open();
  221. }
  222. Win1.document.open();
  223. Win1.document.writeln('<html><meta http-equiv="Content-Type" content="text/html; charset=' + charSet + '"><head><title>' + titleList[6] + '</title></head>');
  224. Win1.document.writeln('<body bgcolor="' + textFrameBackColor + '" text="Black" link="Blue" vlink="Blue" LEFTMARGIN=0 onload="window.focus()">');
  225. Win1.document.writeln('<FONT FACE="Arial" SIZE="-1"><b>' + msgList[57] + '</b>');
  226. Win1.document.writeln('<table border="1" cellspacing="0" cellpadding="2" style="color: ' + textFrameTextColor + '; background-color: ' + tableBackColor + '; " nowrap>');
  227. for (var i=0;i<GCpointCount;i++) {
  228. gPointX = convertDecimal(GCpointX[i].toString()); 
  229. gPointY = convertDecimal(GCpointY[i].toString());
  230. Win1.document.writeln('<tr>');
  231. Win1.document.writeln('<td><FONT FACE="Arial" SIZE="-1"><a href="javascript:' + theFrame + '.zoomToPoint(' + GCpointX[i] + ',' + GCpointY[i] + ',true,'' + GCaddress[i] + '')">' + (i+1) + '</a></font></td>');
  232. Win1.document.writeln('<td><FONT FACE="Arial" SIZE="-1">' + GCaddress[i] + '</font></td>');
  233. Win1.document.writeln('<td><FONT FACE="Arial" SIZE="-1">' + GCscore[i] + '</font></td>');
  234. Win1.document.writeln('</tr>');
  235. }
  236. Win1.document.writeln('</table><form><input type="button" onclick="document.location='' + appDir + 'addmatch.htm';" value="' + buttonList[1] + '"></form>');
  237. Win1.document.writeln('</body></html>');
  238. Win1.document.close();
  239. Win1=null;
  240. if (GCpointCount==1) sendMapXML();
  241. } else if (geocodeAppMode=="route") {
  242. // requires RouteServer extension
  243. hideRetrieveData();
  244. if ( GCpointCount == 1 ) {
  245. addStop( parseFloat(GCpointX[0]), parseFloat(GCpointY[0]), GCaddress[0], GCaddress[0] );
  246. } else {
  247. var url = appDir + "candidates.htm";
  248. if ((useExternalWindow) || (!useTextFrame)) {
  249. Win1 = window.open(url,"GeocodeWindow","width=575,height=120,scrollbars=yes,resizable=yes");
  250. } else {
  251. parent.TextFrame.document.location = url;
  252. }
  253. }
  254. } else if (geocodeAppMode=="address") {
  255. // requires RouteServer extension
  256. if (zoomToGCPoint) {
  257. zoomToGCPoint=false;
  258. hideRetrieveData();
  259. zoomToRouteEnvelope(parseFloat(GCpointX[0]), parseFloat(GCpointY[0]),parseFloat(GCpointX[0]), parseFloat(GCpointY[0]));
  260. } else {
  261. hideRetrieveData();
  262. //alert(GCaddress[0]);
  263. writeRGCresultPage(GCaddress[0]);
  264. }
  265. }
  266. } else {
  267. //no match
  268. alert(msgList[60]);
  269. var url = appDir + "addmatch.htm";
  270. if ((useExternalWindow) || (!useTextFrame)) {
  271. Win1 = window.open(url,"GeocodeWindow","width=575,height=120,scrollbars=yes,resizable=yes");
  272. } else {
  273. parent.TextFrame.document.location = url;
  274. }
  275. }
  276. }