position_selector.js 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235
  1. ;
  2. (function ($) {
  3. var defaults = {
  4. width:800,//弹框显示宽度
  5. height:500,//弹框显示高度
  6. zoom:18, //缩放级别
  7. locat:'上海',//默认城市
  8. can_edit:true,
  9. address:'',//地址
  10. lat:'',
  11. lng:'',
  12. func_callback:function(val){console.log(val);},//选择成功之后的回调函数
  13. element_id:'map_container'//弹窗ID
  14. };
  15. var options = null;
  16. var privateVal = function() {
  17. return {
  18. controllerHTML: ['<div id="r-result" style="padding:5px 0;">请输入:<input type="text" id="suggestId" size="20" value="余姚路288号汇智创意园" /> <input type="text" readonly="" id="position" >&nbsp;&nbsp;&nbsp;<a href="#" class="easyui-linkbutton l-btn l-btn-small" data-options=“iconCls:\'icon-add\'" group="" id="ret_val_botton"><span class="l-btn-left l-btn-icon-left"><span class="l-btn-text">选择坐标</span></span></a></div><div id="searchResultPanel"></div><div id="allmap"></div></body></html>'].join(""),
  19. controllerCSS: '.tangram-suggestion-main{z-index:10000}#allmap {width: 100%;height: 100%;overflow: hidden;margin:0;}#suggestId{width:200px;height:25px;line-height:25px;}#position{display:inline-block;background:#EBEBE4;border:#7F9DB9 solid 1px;color:#555;width:160px;height:25px;line-height:25px;font-size:14px;font-weight:700}#searchResultPanel{width:150px;height:auto;}',
  20. map : null,
  21. myValue:null,
  22. result:[]
  23. }
  24. } ();
  25. var privateFunction = {
  26. setPlace:function(){
  27. privateVal.map.clearOverlays(); //清除地图上所有覆盖物
  28. function myFun(){
  29. var pp = local.getResults().getPoi(0).point; //获取第一个智能搜索的结果
  30. privateVal.map.centerAndZoom(pp, options.zoom);
  31. privateVal.map.addOverlay(new BMap.Marker(pp)); //添加标注
  32. privateVal.result = [pp.lng,pp.lat,$('#suggestId').val()];
  33. $('#position').val(pp.lng+','+pp.lat);
  34. }
  35. var local = new BMap.LocalSearch(privateVal.map, { //智能搜索
  36. onSearchComplete: myFun
  37. });
  38. local.search(privateVal.myValue);
  39. },
  40. returnVal:function(){
  41. if(privateVal.result.length == 3){
  42. options.func_callback(privateVal.result);
  43. }else{
  44. $.messager.show({
  45. title: '提示',
  46. msg: '地址/坐标获取失败',
  47. timeout: 3500,
  48. showType: 'slide'
  49. });
  50. }
  51. },
  52. address_select:function(e){
  53. var _value = e.item.value;
  54. privateVal.myValue = _value.province + _value.city + _value.district + _value.street + _value.business;
  55. $("#searchResultPanel").innerHTML ="onconfirm<br />index = " + e.item.index + "<br />privateVal.myValue = " + privateVal.myValue;
  56. privateFunction.setPlace();
  57. },
  58. get_address_by_point:function(point,func){
  59. var gc = new BMap.Geocoder();
  60. gc.getLocation(point, function(rs){
  61. func(rs.address||'');
  62. });
  63. },
  64. address_hover:function(e){
  65. var str = "";
  66. var _value = e.fromitem.value;
  67. var value = "";
  68. if (e.fromitem.index > -1) {
  69. value = _value.province + _value.city + _value.district + _value.street + _value.business;
  70. }
  71. str = "FromItem<br />index = " + e.fromitem.index + "<br />value = " + value;
  72. value = "";
  73. if (e.toitem.index > -1) {
  74. _value = e.toitem.value;
  75. value = _value.province + _value.city + _value.district + _value.street + _value.business;
  76. }
  77. str += "<br />ToItem<br />index = " + e.toitem.index + "<br />value = " + value;
  78. $("#searchResultPanel").innerHTML = str;
  79. },
  80. create_window:function(){
  81. var boarddiv = "<div id='"+options.element_id+"'></div>";
  82. if(!$('#'+options.element_id)){
  83. $(document.body).append(boarddiv);
  84. }
  85. $('#'+options.element_id).window({
  86. width:options.width,
  87. height:options.height+50,
  88. title:'选择坐标',
  89. modal:true
  90. }).html('').append(privateVal.controllerHTML);
  91. },
  92. createCSS:function() {
  93. var j = document.createElement("style");
  94. j.type = "text/css";
  95. j.innerHTML = privateVal.controllerCSS;
  96. document.getElementsByTagName("head")[0].appendChild(j)
  97. },
  98. set_default_center:function(){
  99. privateVal.map.centerAndZoom(options.locat,options.zoom);// 初始化地图,设置中心点坐标和地图级别。
  100. },
  101. map_click:function(e){
  102. if(options.can_edit){
  103. privateVal.map.clearOverlays();
  104. var _point = new BMap.Point(e.point.lng,e.point.lat);
  105. var marker1 = new BMap.Marker(_point); // 创建标注
  106. privateVal.map.addOverlay(marker1); // 将标注添加到地图中
  107. $('#position').val(e.point.lng+','+e.point.lat);
  108. privateFunction.get_address_by_point(_point,function(_address){
  109. privateVal.result = [_point.lng,_point.lat,$('#suggestId').val()];
  110. $('#suggestId').val(_address);
  111. });
  112. }
  113. }
  114. }
  115. var methods = {
  116. init: function(args) {
  117. options = $.extend(defaults, args);
  118. privateFunction.createCSS();
  119. privateFunction.create_window();
  120. privateVal.map = new BMap.Map("allmap");
  121. if(!options.can_edit){
  122. $('#ret_val_botton').hide();
  123. $('#suggestId').attr('readonly',true);
  124. }
  125. privateVal.map.addControl(new BMap.NavigationControl()); //添加默认缩放平移控件
  126. privateVal.map.addControl(new BMap.NavigationControl({anchor: BMAP_ANCHOR_TOP_RIGHT, type: BMAP_NAVIGATION_CONTROL_SMALL})); //右上角,仅包含平移和缩放按钮
  127. privateVal.map.addControl(new BMap.NavigationControl({anchor: BMAP_ANCHOR_BOTTOM_LEFT, type: BMAP_NAVIGATION_CONTROL_PAN})); //左下角,仅包含平移按钮
  128. privateVal.map.addControl(new BMap.NavigationControl({anchor: BMAP_ANCHOR_BOTTOM_RIGHT, type: BMAP_NAVIGATION_CONTROL_ZOOM})); //右下角,仅包含缩放按钮
  129. privateVal.map.addControl(new BMap.OverviewMapControl()); //添加默认缩略地图控件
  130. privateVal.map.addControl(new BMap.OverviewMapControl({isOpen:true, anchor: BMAP_ANCHOR_TOP_RIGHT})); //右上角,打开
  131. privateVal.map.addEventListener("click",function(e){
  132. privateFunction.map_click(e);
  133. });
  134. var ac = new BMap.Autocomplete( //建立一个自动完成的对象
  135. {
  136. "input" : "suggestId"
  137. ,"location" : options.locat
  138. });
  139. ac.addEventListener("onhighlight", function(e){
  140. privateFunction.address_hover(e);
  141. });
  142. ac.addEventListener("onconfirm", function(e){
  143. privateFunction.address_select(e);
  144. });
  145. $("#ret_val_botton").click(function(){
  146. privateFunction.returnVal();
  147. $('#'+options.element_id).window('close');
  148. });
  149. $('#suggestId').on('keydown',function(event){
  150. if(event.keyCode == "13")
  151. {
  152. console.log($('#suggestId').val()+'#search');
  153. // 创建地址解析器实例
  154. var myGeo = new BMap.Geocoder();
  155. // 将地址解析结果显示在地图上,并调整地图视野
  156. myGeo.getPoint($('#suggestId').val(), function(point){
  157. if (point) {
  158. privateVal.map.clearOverlays(); //清除地图上所有覆盖物
  159. privateVal.map.centerAndZoom(point, options.zoom);
  160. privateVal.map.addOverlay(new BMap.Marker(point)); //添加标注
  161. $('#position').val(point.lng+','+point.lat);
  162. privateVal.result = [point.lng,point.lat,$('#suggestId').val()];
  163. }else{
  164. $.messager.show({
  165. title: '提示',
  166. msg: '地址查询不到呢',
  167. timeout: 3500,
  168. showType: 'slide'
  169. });
  170. }
  171. }, options.locat);
  172. }
  173. });
  174. if(options.lat && options.lng){
  175. var pit = new BMap.Point(options.lng,options.lat);
  176. privateVal.map.centerAndZoom(pit, options.zoom);
  177. privateVal.map.addOverlay(new BMap.Marker(pit));
  178. $('#position').val(pit.lng+','+pit.lat);
  179. privateFunction.get_address_by_point(pit,function(_address){
  180. $('#suggestId').val(_address);
  181. privateVal.result = [pit.lng,pit.lat,$('#suggestId').val()];
  182. });
  183. }else if(options.address){
  184. var myGeo = new BMap.Geocoder();
  185. $('#suggestId').val(options.address);
  186. // 将地址解析结果显示在地图上,并调整地图视野
  187. myGeo.getPoint(options.address, function(point){
  188. if (point) {
  189. privateVal.map.centerAndZoom(point, options.zoom);
  190. privateVal.map.addOverlay(new BMap.Marker(point));
  191. $('#position').val(point.lng+','+point.lat);
  192. privateFunction.get_address_by_point(point,function(_address){
  193. $('#suggestId').val(_address);
  194. privateVal.result = [point.lng,point.lat,$('#suggestId').val()];
  195. });
  196. }else{
  197. privateFunction.set_default_center();
  198. }
  199. }, options.locat);
  200. }else{
  201. privateFunction.set_default_center();
  202. }
  203. },
  204. destroy: function() {
  205. $('#'+options.element_id).window('close');
  206. }
  207. };
  208. $.fn.position_selector = function() {
  209. var method = arguments[0];
  210. if(methods[method]) {
  211. method = methods[method];
  212. } else if( typeof(method) == 'object' || !method ) {
  213. method = methods.init;
  214. } else {
  215. return this;
  216. }
  217. var args = arguments[1];
  218. return method.call(this,args);
  219. }
  220. })(jQuery);