search_map.js 10 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237
  1. $(function(){
  2. $("#address").val("");
  3. $("#result").on("click","li",function(){
  4. var point = $(this).find(".point").text();
  5. $("#s-point").text(point);//赋值
  6. $("#result li").css("background-color","#fff");
  7. $(this).css("background-color","#f0f0f0");
  8. });
  9. //绑定input文本框回车事件
  10. // $('#address').bind('keypress',function(event){
  11. // if(event.keyCode == "13"){
  12. // doSearch();//搜索
  13. // }
  14. // });
  15. /*全选或者取消全选*/
  16. $('.checkAll .select').on('click',function(){
  17. var price = $(this).prop("checked");
  18. if(price == true){
  19. $(this).siblings('label').html('取消全选')
  20. }else{
  21. $(this).siblings('label').html('全选')
  22. }
  23. $('#result ul li').each(function(){
  24. $(this).find('input[type="checkbox"]').prop("checked",price);
  25. })
  26. })
  27. //检索功能
  28. $('.layui_w_search').on('click',function(){
  29. var _data = $('.layui-input-block option:selected').text(); //选择中的内容
  30. var _val = $('.layui-input-block option:selected').val(); //下拉的val值
  31. var _longitude =$('input[name="longitude"]').val(); //获取经纬度
  32. var pintx = _longitude.split(',')[0];
  33. var pinty = _longitude.split(',')[1];
  34. _longitude = new BMap.Point(pintx,pinty);
  35. if( _val == ''){
  36. layer.msg('请选择类目!!',{icon:5}); //当没有选择类目时提示
  37. }else{
  38. // console.log(isNaN(_longitude.lat))
  39. if(isNaN(_longitude.lat)){
  40. layer.msg('请选择楼盘经纬度!!',{icon:5});
  41. }else{
  42. $('#address').val(_data); //把选择检索的值传入检索框
  43. $('#jwd').val(pintx +','+ pinty); //把选择检索的值传入检索框
  44. show(); //调用地图弹窗
  45. doSearch(_data,_longitude); //调用周围检索方法
  46. }
  47. }
  48. })
  49. //保存,把所有的数据展示
  50. $('.layui_w_btn').on('click',function(){
  51. var dataObj = [{}]; //创建一个数组对象
  52. var dataArry = new Array();
  53. var dataText = new Array();
  54. //用于在百度地图右边获取信息
  55. $('#result ul li').each(function(){
  56. var _input = $(this).find('input[name="choice_checkbox"]').is(':checked'); //判断checkbox是否选中
  57. if(_input){
  58. var i = $(this).index();
  59. var dataTitle = $(this).find('.title_box').text();
  60. var dataRout = $(this).find('.kilometre').text();
  61. var dataPoint = $(this).find('.point').text();
  62. dataObj[i] = {title:dataTitle,rout:dataRout,point:dataPoint} //把数据以数组对象的方式保存
  63. dataArry.push(dataObj[i]); //把数组对象插入数组便于保存
  64. }
  65. })
  66. //处理不能有重复插入的方法
  67. var _txt = $('.layui-input-block table.layui-table tbody').html()
  68. if(_txt ==''){
  69. datumInsert(dataArry); //表格中没有数据时,直接插入
  70. }else {
  71. var _tr = $('.layui-input-block table.layui-table tbody tr');
  72. _tr.each(function(){
  73. var _input = $(this).find('input[name="matingName"]').val(); //获取表格中的数据
  74. dataText.push(_input); //把数据插入数组中
  75. })
  76. for(var i=0;i<dataText.length;i++){
  77. for(var j=0;j<dataArry.length;j++){
  78. if(dataText[i] == dataArry[j].title){
  79. dataArry.splice(j, 1); //新的数据与表格的数据相同时,删除dataArry数组中下标为j的元素
  80. }
  81. }
  82. }
  83. datumInsert(dataArry); //去掉重复再尾部插入
  84. }
  85. $('.checkAll .select').prop("checked",false); //修改全选的属性值
  86. $('.checkAll label').html('全选'); //修改取消全选文字
  87. dhide(); //关闭地图弹窗
  88. })
  89. //展示数据删除按钮
  90. $('table.layui-table tbody').on('click','.del',function(){
  91. $(this).parents('tr').remove();
  92. })
  93. });
  94. // 百度地图API功能
  95. var map = new BMap.Map("map");
  96. var _lTude =$('input[name="longitude"]').val(); //获取经纬度
  97. var pintx = _lTude.split(',')[0];
  98. var pinty = _lTude.split(',')[1];
  99. _lTude = new BMap.Point(pintx,pinty);
  100. // console.log(_lTude)
  101. // var Point = new BMap.Point(110.350948,20.002057);
  102. map.centerAndZoom(_lTude, 14);
  103. map.enableScrollWheelZoom();//启用滚轮放大缩小,默认禁用
  104. /* 求百度地图两点的距离
  105. * 这是百度地图的方法
  106. * var kdi =map.getDistance(Point,poi.point); //获取两点的距离,单位为米
  107. * 以下是计算方法
  108. */
  109. function km (point1,point2){
  110. var R=6370996.81,pi=3.1415926535898;
  111. var distance=R*Math.acos(Math.cos(point1.lat*pi/180 )*Math.cos(point2.lat*pi/180)*Math.cos(point1.lng*pi/180 -point2.lng*pi/180)+Math.sin(point1.lat*pi/180 )*Math.sin(point2.lat*pi/180));
  112. var kilometre = (distance/1000).toFixed(2) //米转换为公里,并保留两位小数
  113. return kilometre;
  114. }
  115. //map展现结果的地图实例
  116. //autoViewport检索结束后是否自动调整地图视野,false 不调整地图视野
  117. var local = new BMap.LocalSearch(map,{renderOptions:{map:map,autoViewport:true}});
  118. //地址检索
  119. function doSearch(Odata,Opoint){
  120. var address = Odata;
  121. // local.search(address);
  122. // map.LocalSearch(address)
  123. local.searchNearby(address,Opoint)
  124. // local.searchNearby(address,Opoint,1000) //规定范围
  125. var marker = new BMap.Marker(Opoint); // 创建标注
  126. // console.log(Opoint)
  127. map.addOverlay(marker); // 将标注添加到地图中
  128. marker.setAnimation(BMAP_ANIMATION_BOUNCE); //跳动的动画
  129. var label = new BMap.Label("楼盘位置",{offset:new BMap.Size(30,-10)});
  130. marker.setLabel(label);
  131. //检索结束后的回调方法
  132. local.setSearchCompleteCallback(function(results){
  133. if(results.Br.length != 0){
  134. // 判断状态是否正确
  135. // 百度地图状态码如下:
  136. // BMAP_STATUS_SUCCESS 检索成功。对应数值“0”。
  137. // BMAP_STATUS_CITY_LIST 城市列表。对应数值“1”。
  138. // BMAP_STATUS_UNKNOWN_LOCATION 位置结果未知。对应数值“2”。
  139. // BMAP_STATUS_UNKNOWN_ROUTE 导航结果未知。对应数值“3”。
  140. // BMAP_STATUS_INVALID_KEY 非法密钥。对应数值“4”。
  141. // BMAP_STATUS_INVALID_REQUEST 非法请求。对应数值“5”。
  142. // BMAP_STATUS_PERMISSION_DENIED 没有权限。对应数值“6”。(自 1.1 新增)
  143. // BMAP_STATUS_SERVICE_UNAVAILABLE 服务不可用。对应数值“7”。(自 1.1 新增)
  144. // BMAP_STATUS_TIMEOUT 超时。对应数值“8”。(自 1.1 新增)
  145. if (local.getStatus() == BMAP_STATUS_SUCCESS){
  146. // console.log(results.zr.length)
  147. var str = "<ul>";
  148. for (var i = 0; i < results.getCurrentNumPois(); i ++){
  149. var poi = results.getPoi(i);
  150. var KM = km(Opoint,poi.point) //调用方法计算两点的距离
  151. str+='<li>';
  152. str+='<div class="res-data">';
  153. str+='<div class="left res-marker">';
  154. str+='<span style="display:block;margin-top:25%;"><input type="checkbox" name="choice_checkbox" /></span>';
  155. str+='<span>'+String.fromCharCode(65+i)+'</span>';
  156. str+='</div>';
  157. str+='<div class="left res-address">';
  158. str+='<div class="title"><span class="title_box">'+poi.title+'</span> - '+address +'</div>';
  159. str+='<div>地址:<span class="rout">'+poi.address+'</span></div>';
  160. str+='<div>距离:<span class="kilometre">'+KM+'公里</span></div>';
  161. str+='<div>坐标:<span class="point">'+poi.point.lng+","+poi.point.lat+'</span></div>';
  162. str+='</div>';
  163. str+='<div class="clearfix"></div>';
  164. str+='</div>';
  165. str+='</li>';
  166. }
  167. str+='</ul>';
  168. $("#result").html(str);
  169. $("#s-city").text(results.province+results.city);
  170. $("#s-point").text(results.getPoi(0).point.lng+","+results.getPoi(0).point.lat);
  171. }
  172. }else{
  173. $('#result').html('<div style="text-align:center;margin-top:15px">周边规定范围内未查找到配套信息!!</div>')
  174. }
  175. });
  176. }
  177. //点击当前选中方法
  178. $('#result').on('click','li',function () {
  179. var status = $(this).find('input[name="choice_checkbox"]').is(':checked');
  180. if(status){
  181. $(this).find('input[name="choice_checkbox"]').removeAttr('checked');
  182. }else {
  183. $(this).find('input[name="choice_checkbox"]').attr('checked','checked');
  184. }
  185. })
  186. //数据插入方法
  187. function datumInsert(objArry){
  188. for(var i=0;i<objArry.length;i++){
  189. var tr ='<tr>'
  190. +'<td lay-event="del">'
  191. +'<div class="layui-table-cell del"><i class="layui-icon" style="font-size: 30px; color: #1E9FFF;cursor: pointer">&#xe640;</i></div>'
  192. +'</td>'
  193. +'<td data-field="matingName" align="center" data-content="">'
  194. +'<div class="layui-table-cell"><input type="text" name="matingName" value="'+objArry[i].title+'" autocomplete="off" class="layui-input" ></div>'
  195. +'</td>'
  196. +'<td data-field="distance" align="center" data-content="">'
  197. +'<div class="layui-table-cell"><input type="text" name="distance" value="'+objArry[i].rout+'" autocomplete="off" class="layui-input" ></div>'
  198. +'</td>'
  199. +'<td data-field="longitude" align="center" data-content="">'
  200. +'<div class="layui-table-cell"><input type="text" id="jwd" name="longitude" value="'+objArry[i].point+'" autocomplete="off" class="layui-input" ></div>'
  201. +'</td>'
  202. +'</tr>'
  203. $(".layui-input-block table.layui-table tbody").append(tr);
  204. }
  205. }