addressMatchService.html 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319
  1. <!--********************************************************************
  2. * Copyright© 2000 - 2021 SuperMap Software Co.Ltd. All rights reserved.
  3. *********************************************************************-->
  4. <!DOCTYPE html>
  5. <html>
  6. <head>
  7. <meta charset="UTF-8">
  8. <title data-i18n="resources.title_addressMatchService"></title>
  9. <style>
  10. .input-group {
  11. margin: 8px 0;
  12. }
  13. .control {
  14. position: absolute;
  15. top: 10px;
  16. right: 10px;
  17. }
  18. .ol-popup {
  19. position: absolute;
  20. background-color: white;
  21. -webkit-filter: drop-shadow(0 1px 4px rgba(0, 0, 0, 0.2));
  22. filter: drop-shadow(0 1px 4px rgba(0, 0, 0, 0.2));
  23. padding: 15px;
  24. border-radius: 10px;
  25. border: 1px solid #cccccc;
  26. bottom: 12px;
  27. left: -50px;
  28. min-width: 300px;
  29. }
  30. .ol-popup:after, .ol-popup:before {
  31. top: 100%;
  32. border: solid transparent;
  33. content: " ";
  34. height: 0;
  35. width: 0;
  36. position: absolute;
  37. pointer-events: none;
  38. }
  39. .ol-popup:after {
  40. border-top-color: white;
  41. border-width: 10px;
  42. left: 48px;
  43. margin-left: -10px;
  44. }
  45. .ol-popup:before {
  46. border-top-color: #cccccc;
  47. border-width: 11px;
  48. left: 48px;
  49. margin-left: -11px;
  50. }
  51. </style>
  52. </head>
  53. <body style=" margin: 0;overflow: hidden;background: #fff;width: 100%;height:100%; position: absolute;top: 0;">
  54. <div id="map" style="width: 100%;height:100%"></div>
  55. <div id="control" class="control" style='width:20%'>
  56. <div class="panel panel-default">
  57. <div class="panel-body">
  58. <ul class="nav nav-tabs nav-justified">
  59. <li id="geocode" role="presentation" class="active"><a href="#" data-i18n="resources.text_code"></a>
  60. </li>
  61. <li id="geodecode" role="presentation"><a href="#" data-i18n="resources.text_decode"></a></li>
  62. </ul>
  63. <div class="tab-content">
  64. <div id="geocodeParam" role="tabpanel" class="tab-pane deplistContent active">
  65. <div class="input-group">
  66. <span class="input-group-addon" data-i18n="resources.text_address"></span>
  67. <input id="address" type="text" class="form-control" placeholder="超图软件"/>
  68. </div>
  69. <div class="input-group">
  70. <span class="input-group-addon" data-i18n="resources.text_filterField"></span>
  71. <input id="filters" type="text" class="form-control"
  72. placeholder="北京市,朝阳区"/>
  73. </div>
  74. <div class="input-group">
  75. <span class="input-group-addon" data-i18n="resources.text_minIndex"></span>
  76. <input id="fromIndex" type="text" class="form-control"
  77. placeholder="0"/>
  78. </div>
  79. <div class="input-group">
  80. <span class="input-group-addon" data-i18n="resources.text_maxIndex"></span>
  81. <input id="toIndex" type="text" class="form-control"
  82. placeholder="10"/>
  83. </div>
  84. <div class="input-group">
  85. <span class="input-group-addon" data-i18n="resources.text_maxCount"></span>
  86. <input id="maxReturn" type="text" class="form-control"
  87. placeholder="-1"/>
  88. </div>
  89. <div class="input-group">
  90. <span class="input-group-addon" data-i18n="resources.text_coorSystem"></span>
  91. <input id="prjCoordSys" type="text" class="form-control"
  92. placeholder="{epsgcode:4326}"/>
  93. </div>
  94. <div align="right">
  95. <input type="button" id='codeBtn' class="btn btn-primary"
  96. data-i18n="[value]resources.text_input_value_match"/>
  97. </div>
  98. </div>
  99. <div id="geodecodeParam" role="tabpanel" class="tab-pane deplistContent">
  100. <div class="input-group">
  101. <span class="input-group-addon" data-i18n="resources.text_abscissa"></span>
  102. <input id="xCoord" type="text" class="form-control" placeholder="116.3518541194752"/>
  103. </div>
  104. <div class="input-group">
  105. <span class="input-group-addon" data-i18n="resources.text_ordinate"></span>
  106. <input id="yCoord" type="text" class="form-control"
  107. placeholder="40.00097839595237"/>
  108. </div>
  109. <div class="input-group">
  110. <span class="input-group-addon" data-i18n="resources.text_filterField"></span>
  111. <input id="filters2" type="text" class="form-control"
  112. placeholder=""/>
  113. </div>
  114. <div class="input-group">
  115. <span class="input-group-addon" data-i18n="resources.text_minIndex"></span>
  116. <input id="fromIndex2" type="text" class="form-control"
  117. placeholder="0"/>
  118. </div>
  119. <div class="input-group">
  120. <span class="input-group-addon" data-i18n="resources.text_maxIndex"></span>
  121. <input id="toIndex2" type="text" class="form-control"
  122. placeholder="10"/>
  123. </div>
  124. <div class="input-group">
  125. <span class="input-group-addon" data-i18n="resources.text_maxCount"></span>
  126. <input id="maxReturn2" type="text" class="form-control"
  127. placeholder="-1"/>
  128. </div>
  129. <div class="input-group">
  130. <span class="input-group-addon" data-i18n="resources.text_queryRadius"></span>
  131. <input id="geoDecodingRadius" type="text" class="form-control"
  132. placeholder="-1"/>
  133. </div>
  134. <div class="input-group">
  135. <span class="input-group-addon" data-i18n="resources.text_coorSystem"></span>
  136. <input id="prjCoordSys2" type="text" class="form-control"
  137. placeholder="{epsgcode:4326}"/>
  138. </div>
  139. <div align="right">
  140. <input type="button" id='decodeBtn' class="btn btn-primary"
  141. data-i18n="[value]resources.text_input_value_match"/>
  142. </div>
  143. </div>
  144. </div>
  145. </div>
  146. </div>
  147. </div>
  148. <div id="info" class="ol-popup">
  149. <div id="info-content"></div>
  150. </div>
  151. <script type="text/javascript" include="jquery,bootstrap-css" src="../js/include-web.js"></script>
  152. <script type="text/javascript" src="../../dist/ol/include-ol.js"></script>
  153. <script type="text/javascript">
  154. var map,select,
  155. url = (window.isLocal ? window.server : "https://iserver.supermap.io") + "/iserver/services/map-china400/rest/maps/China_4326",
  156. addressUrl = (window.isLocal ? window.server : "https://iserver.supermap.io") + "/iserver/services/addressmatch-Address/restjsr/v1/address",
  157. imgUrl = "../img/markerbig_select.png",
  158. vectorSource = new ol.source.Vector(),
  159. addressMatchService = new ol.supermap.AddressMatchService(addressUrl),
  160. view = new ol.View({
  161. center: [116.383572, 39.914714],
  162. zoom: 12,
  163. projection: 'EPSG:4326',
  164. multiWorld: true
  165. }),
  166. container = document.getElementById('info'),
  167. content = document.getElementById('info-content'),
  168. overlay = new ol.Overlay(({
  169. element: container,
  170. autoPan: true,
  171. autoPanAnimation: {
  172. duration: 250
  173. },
  174. offset: [0, -20]
  175. }));
  176. map = new ol.Map({
  177. target: 'map',
  178. controls: ol.control.defaults({attributionOptions: {collapsed: false}})
  179. .extend([new ol.supermap.control.Logo()]),
  180. view: view,
  181. overlays: [overlay]
  182. });
  183. var control = new ol.control.Control({element: document.getElementById('control')});
  184. control.setMap(map);
  185. map.addControl(control);
  186. var layer = new ol.layer.Tile({
  187. source: new ol.source.TileSuperMapRest({
  188. url: url,
  189. wrapX: true,
  190. projection: 'EPSG:4326',
  191. origin: [-180.0, 90]
  192. })
  193. });
  194. var vectorLayer = new ol.layer.Vector({
  195. source: vectorSource
  196. });
  197. map.addLayer(layer);
  198. map.addLayer(vectorLayer);
  199. $("#geocode").click(function () {
  200. $("#geocode")[0].className = 'active';
  201. $("#geodecode")[0].className = '';
  202. $("#geocodeParam").addClass('active');
  203. $("#geodecodeParam").removeClass('active');
  204. });
  205. $("#geodecode").click(function () {
  206. $("#geocode")[0].className = '';
  207. $("#geodecode")[0].className = 'active';
  208. $("#geodecodeParam").addClass('active');
  209. $("#geocodeParam").removeClass('active');
  210. });
  211. //判断输入字符串是否为空或者全部都是空格
  212. function isNull(str) {
  213. if (str == "") return true;
  214. var regu = "^[ ]+$";
  215. var re = new RegExp(regu);
  216. return re.test(str);
  217. }
  218. $("#codeBtn").click(function () {
  219. var geoCodeParam = new SuperMap.GeoCodingParameter({
  220. address: $('#address').val() || $('#address').attr('placeholder'),
  221. fromIndex: $('#fromIndex').val() || $('#fromIndex').attr('placeholder'),
  222. toIndex: $('#toIndex').val() || $('#toIndex').attr('placeholder'),
  223. filters: $('#filters').val() || $('#filters').attr('placeholder'),
  224. prjCoordSys: $('#prjCoordSys').val() || $('#prjCoordSys').attr('placeholder'),
  225. maxReturn: $('#maxReturn').val() || $('#maxReturn').attr('placeholder')
  226. });
  227. addressMatchService.code(geoCodeParam, match);
  228. });
  229. $("#decodeBtn").click(function () {
  230. var geoDecodeParam = new SuperMap.GeoDecodingParameter({
  231. x: $('#xCoord').val() || $('#xCoord').attr('placeholder'),
  232. y: $('#yCoord').val() || $('#yCoord').attr('placeholder'),
  233. fromIndex: $('#fromIndex2').val() || $('#fromIndex2').attr('placeholder'),
  234. toIndex: $('#toIndex2').val() || $('#toIndex2').attr('placeholder'),
  235. filters: $('#filters2').val() || $('#filters2').attr('placeholder'),
  236. prjCoordSys: $('#prjCoordSys2').val() || $('#prjCoordSys2').attr('placeholder'),
  237. maxReturn: $('#maxReturn2').val() || $('#maxReturn2').attr('placeholder'),
  238. geoDecodingRadius: $('#geoDecodingRadius').val() || $('#geoDecodingRadius').attr('placeholder'),
  239. });
  240. addressMatchService.decode(geoDecodeParam, match);
  241. });
  242. function match(obj) {
  243. select && map.removeInteraction(select);
  244. overlay.setPosition(undefined);
  245. vectorSource.clear();
  246. var features = [];
  247. obj.result.map(function (item) {
  248. var feature = new ol.Feature();
  249. feature.setGeometry(new ol.geom.Point([item.location.x, item.location.y]));
  250. feature.setProperties({
  251. location: item.location,
  252. address: item.address,
  253. score: item.score,
  254. filters: item.filters
  255. });
  256. feature.setStyle(new ol.style.Style({
  257. image: new ol.style.Icon(({
  258. anchor: [0.5, 1],
  259. src: imgUrl
  260. }))
  261. }));
  262. features.push(feature);
  263. });
  264. select = new ol.interaction.Select({
  265. style: new ol.style.Style({
  266. image: new ol.style.Icon(({
  267. anchor: [0.5, 1],
  268. src: imgUrl
  269. }))
  270. })
  271. });
  272. select.on('select', function (e) {
  273. if (e.selected.length > 0) {
  274. var feature = e.selected[0];
  275. var innerHTML = "";
  276. innerHTML += resources.text_companyAddress + feature.getProperties().address + "<br>";
  277. var x = Number(feature.getProperties().location.x.toString().match(/^\d+(?:\.\d{0,2})?/));
  278. var y = Number(feature.getProperties().location.y.toString().match(/^\d+(?:\.\d{0,2})?/));
  279. innerHTML += resources.text_coordinate+":[" + x + "," + y + "]<br>";
  280. if (feature.getProperties().score > 0) {
  281. innerHTML += resources.text_matchDegree+":" + feature.getProperties().score + "<br>";
  282. }
  283. innerHTML += resources.text_filterField+":" + feature.getProperties().filters + "<br>";
  284. content.innerHTML = innerHTML;
  285. overlay.setPosition(feature.getGeometry().getCoordinates());
  286. } else if (overlay) {
  287. overlay.setPosition(undefined);
  288. }
  289. });
  290. map.addInteraction(select);
  291. vectorSource.addFeatures(features);
  292. view.animate({zoom: 11}, {center: [116.383572, 39.914714]});
  293. }
  294. </script>
  295. </body>
  296. </html>