addressMatchService.html 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241
  1. <!--********************************************************************
  2. * Copyright© 2000 - 2021 SuperMap Software Co.Ltd. All rights reserved.
  3. *********************************************************************-->
  4. <!DOCTYPE html>
  5. <html lang="en">
  6. <head>
  7. <meta charset="UTF-8">
  8. <title data-i18n="resources.title_addressMatchService"></title>
  9. <script type="text/javascript" include="jquery,bootstrap" src="../js/include-web.js"></script>
  10. <style>
  11. body {
  12. margin: 0;
  13. overflow: hidden;
  14. background: #fff;
  15. width: 100%;
  16. height: 100%;
  17. position: absolute;
  18. top: 0;
  19. }
  20. #map {
  21. margin: 0 auto;
  22. width: 100%;
  23. height: 100%;
  24. position: absolute;
  25. }
  26. .panel-default {
  27. width: 20%;
  28. float: right;
  29. margin: 15px 15px 0 0;
  30. position: relative;
  31. }
  32. .input-group {
  33. margin-bottom: 15px;
  34. }
  35. </style>
  36. </head>
  37. <body>
  38. <div id="map"></div>
  39. <div class='panel panel-default'>
  40. <div class='panel-body'>
  41. <ul class='nav nav-tabs nav-justified' style="margin-bottom: 15px">
  42. <li id='geocode' role='presentation' class='active'>
  43. <a href='#' data-i18n="resources.text_code"></a>
  44. </li>
  45. <li id='geodecode' role='presentation'>
  46. <a href='#' data-i18n="resources.text_decode"></a>
  47. </li>
  48. </ul>
  49. <div class='tab-content'>
  50. <div id='geocodeParam' role='tabpanel' class='tab-pane deplistContent active'>
  51. <div class='input-group'>
  52. <span class='input-group-addon' data-i18n="resources.text_address"></span>
  53. <input id='address' type='text' class='form-control' placeholder='超图软件'/></div>
  54. <div class='input-group'>
  55. <span class='input-group-addon' data-i18n="resources.text_filterField"></span>
  56. <input id='filters' type='text' class='form-control' placeholder='北京市,朝阳区'/></div>
  57. <div class='input-group'>
  58. <span class='input-group-addon' data-i18n="resources.text_minIndex"></span>
  59. <input id='fromIndex' type='text' class='form-control' placeholder='0'/></div>
  60. <div class='input-group'>
  61. <span class='input-group-addon' data-i18n="resources.text_maxIndex"></span>
  62. <input id='toIndex' type='text' class='form-control' placeholder='10'/></div>
  63. <div class='input-group'>
  64. <span class='input-group-addon' data-i18n="resources.text_maxCount"></span>
  65. <input id='maxReturn' type='text' class='form-control' placeholder='-1'/></div>
  66. <div class='input-group'>
  67. <span class='input-group-addon' data-i18n="resources.text_coorSystem"></span>
  68. <input id='prjCoordSys' type='text' class='form-control' placeholder='{epsgcode:4326}'/></div>
  69. <div align='right'>
  70. <input type='button' id='codeBtn' class='btn btn-primary'
  71. data-i18n="[value]resources.text_input_value_match"/>
  72. </div>
  73. </div>
  74. <div id='geodecodeParam' role='tabpanel' class='tab-pane deplistContent'>
  75. <div class='input-group'>
  76. <span class='input-group-addon' data-i18n="resources.text_abscissa"></span>
  77. <input id='xCoord' type='text' class='form-control' placeholder='116.3518541194752'/></div>
  78. <div class='input-group'>
  79. <span class='input-group-addon' data-i18n="resources.text_ordinate"></span>
  80. <input id='yCoord' type='text' class='form-control' placeholder='40.00097839595237'/></div>
  81. <div class='input-group'>
  82. <span class='input-group-addon' data-i18n="resources.text_filterField"></span>
  83. <input id='filters2' type='text' class='form-control' placeholder=''/></div>
  84. <div class='input-group'>
  85. <span class='input-group-addon' data-i18n="resources.text_minIndex"></span>
  86. <input id='fromIndex2' type='text' class='form-control' placeholder='0'/></div>
  87. <div class='input-group'>
  88. <span class='input-group-addon' data-i18n="resources.text_maxIndex"></span>
  89. <input id='toIndex2' type='text' class='form-control' placeholder='10'/></div>
  90. <div class='input-group'>
  91. <span class='input-group-addon' data-i18n="resources.text_maxCount"></span>
  92. <input id='maxReturn2' type='text' class='form-control' placeholder='-1'/></div>
  93. <div class='input-group'>
  94. <span class='input-group-addon' data-i18n="resources.text_queryRadius"></span>
  95. <input id='geoDecodingRadius' type='text' class='form-control' placeholder='-1'/></div>
  96. <div class='input-group'>
  97. <span class='input-group-addon' data-i18n="resources.text_coorSystem"></span>
  98. <input id='prjCoordSys2' type='text' class='form-control' placeholder='{epsgcode:4326}'/></div>
  99. <div align='right'>
  100. <input type='button' id='decodeBtn' class='btn btn-primary'
  101. data-i18n="[value]resources.text_input_value_match"/>
  102. </div>
  103. </div>
  104. </div>
  105. </div>
  106. </div>
  107. <script type="text/javascript" src="../../dist/mapboxgl/include-mapboxgl.js"></script>
  108. <script type="text/javascript">
  109. //绑定两个按钮触发事件
  110. $("#geocode").click(function () {
  111. $("#geocode")[0].className = 'active';
  112. $("#geodecode")[0].className = '';
  113. $("#geocodeParam").addClass('active');
  114. $("#geodecodeParam").removeClass('active');
  115. });
  116. $("#geodecode").click(function () {
  117. $("#geocode")[0].className = '';
  118. $("#geodecode")[0].className = 'active';
  119. $("#geodecodeParam").addClass('active');
  120. $("#geocodeParam").removeClass('active');
  121. });
  122. var host = window.isLocal ? window.server : "https://iserver.supermap.io";
  123. var codeMarkers = [], decodeMarkers = [],
  124. attribution = "<a href='https://www.mapbox.com/about/maps/' target='_blank'>© Mapbox </a>" +
  125. " with <span>© <a href='https://iclient.supermap.io' target='_blank'>SuperMap iClient</a> | </span>" +
  126. " Map Data <span>© <a href='http://support.supermap.com.cn/product/iServer.aspx' target='_blank'>SuperMap iServer</a></span> ",
  127. url = host + "/iserver/services/map-china400/rest/maps/China/zxyTileImage.png?z={z}&x={x}&y={y}",
  128. addressUrl = host + "/iserver/services/addressmatch-Address/restjsr/v1/address",
  129. map = new mapboxgl.Map({
  130. container: 'map',
  131. style: {
  132. "version": 8,
  133. "sources": {
  134. "raster-tiles": {
  135. "attribution": attribution,
  136. "type": "raster",
  137. "tiles": [url],
  138. "tileSize": 256
  139. }
  140. },
  141. "layers": [{
  142. "id": "simple-tiles",
  143. "type": "raster",
  144. "source": "raster-tiles",
  145. "minzoom": 2,
  146. "maxzoom": 18
  147. }]
  148. },
  149. center: [116.383572, 39.914714],
  150. zoom: 11
  151. });
  152. map.addControl(new mapboxgl.NavigationControl(), 'top-left');
  153. map.addControl(new mapboxgl.supermap.LogoControl(), 'bottom-right');
  154. //判断输入字符串是否为空或者全部都是空格
  155. function isNull(str) {
  156. if (str == "") return true;
  157. var regu = "^[ ]+$";
  158. var re = new RegExp(regu);
  159. return re.test(str);
  160. }
  161. var addressMatchService = new mapboxgl.supermap.AddressMatchService(addressUrl);
  162. $("#codeBtn").click(function () {
  163. var geoCodeParam = new SuperMap.GeoCodingParameter({
  164. address: $('#address').val() || $('#address').attr('placeholder'),
  165. fromIndex: $('#fromIndex').val() || $('#fromIndex').attr('placeholder'),
  166. toIndex: $('#toIndex').val() || $('#toIndex').attr('placeholder'),
  167. filters: $('#filters').val() || $('#filters').attr('placeholder'),
  168. prjCoordSys: $('#prjCoordSys').val() || $('#prjCoordSys').attr('placeholder'),
  169. maxReturn: $('#maxReturn').val() || $('#maxReturn').attr('placeholder')
  170. });
  171. addressMatchService.code(geoCodeParam, match);
  172. });
  173. $("#decodeBtn").click(function () {
  174. var geoDecodeParam = new SuperMap.GeoDecodingParameter({
  175. x: $('#xCoord').val() || $('#xCoord').attr('placeholder'),
  176. y: $('#yCoord').val() || $('#yCoord').attr('placeholder'),
  177. fromIndex: $('#fromIndex2').val() || $('#fromIndex2').attr('placeholder'),
  178. toIndex: $('#toIndex2').val() || $('#toIndex2').attr('placeholder'),
  179. filters: $('#filters2').val() || $('#filters2').attr('placeholder'),
  180. prjCoordSys: $('#prjCoordSys2').val() || $('#prjCoordSys2').attr('placeholder'),
  181. maxReturn: $('#maxReturn2').val() || $('#maxReturn2').attr('placeholder'),
  182. geoDecodingRadius: $('#geoDecodingRadius').val() || $('#geoDecodingRadius').attr('placeholder'),
  183. });
  184. addressMatchService.decode(geoDecodeParam, match);
  185. });
  186. function match(obj) {
  187. clearMarkers();
  188. obj.result.map(function (item) {
  189. var img = new Image();
  190. img.src = '../img/marker-icon.png';
  191. var marker = new mapboxgl.Marker(img).setLngLat([item.location.x, item.location.y]);
  192. decodeMarkers.push(marker);
  193. var innerHTML = "";
  194. innerHTML += resources.text_address + ":" + item.address + "<br>";
  195. var x = Number(item.location.x.toString().match(/^\d+(?:\.\d{0,2})?/));
  196. var y = Number(item.location.y.toString().match(/^\d+(?:\.\d{0,2})?/));
  197. innerHTML += resources.text_coordinate + ":[" + x + "," + y + "]<br>";
  198. if (item.score > 0) {
  199. innerHTML += resources.text_matchDegree + ":" + item.score + "<br>";
  200. }
  201. innerHTML += resources.text_filterField + ":" + item.filters + "<br>";
  202. var markerPopup = new mapboxgl.Popup().setLngLat([item.location.x, item.location.y]).setHTML(innerHTML);
  203. marker.setPopup(markerPopup);
  204. });
  205. for (var i = 0; i < decodeMarkers.length; i++) {
  206. decodeMarkers[i].addTo(map);
  207. }
  208. map.setCenter([116.383572, 39.914714]);
  209. map.setZoom(10);
  210. // map.setView(L.latLng( 116.383572,39.914714), 10);
  211. }
  212. function clearMarkers() {
  213. if (codeMarkers) {
  214. for (var i = 0; i < codeMarkers.length; i++) {
  215. codeMarkers[i].remove();
  216. }
  217. }
  218. if (decodeMarkers) {
  219. for (var i = 0; i < decodeMarkers.length; i++) {
  220. decodeMarkers[i].remove();
  221. }
  222. }
  223. codeMarkers = [];
  224. decodeMarkers = [];
  225. }
  226. </script>
  227. </body>
  228. </html>