poiSearch.js 4.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131
  1. /**
  2. * @fileoverview 地名检索服务
  3. * @author Song.Huang
  4. * @version 1.0.0
  5. */
  6. define(function(){
  7. var poiSearch = function(options) {
  8. this._options = {
  9. page: 1,
  10. pageSize: 50
  11. }
  12. _.merge(this._options,options);
  13. this.formatEarthLatLng = function(lat,lng){
  14. lng = lng%360;
  15. if(lng>180){
  16. lng = (lng%180)-180;
  17. }else if(lng<-180){
  18. lng = 180+(lng%180);
  19. }
  20. lat = lat%180;
  21. if(lat>90){
  22. lat = (lat%90)-90;
  23. }else if(lat<-90){
  24. lat = 90+(lat%90);
  25. }
  26. return [lat,lng];
  27. };
  28. /**
  29. * 检索关键字检查,是否需要分词
  30. * @param {[type]} options [keywords(检索关键字 查询是否需要分词和二次查询)]
  31. * @param {[type]} callbackFunc [description]
  32. * @return {[type]} [description]
  33. */
  34. this.getAreaInfo = function(options, callbackFunc) {
  35. options.keywords = encodeURIComponent(options.keywords);
  36. var sUrl = onemapUrlConfig.poiSearchDataUrl + '/v1.0/area/match/'+
  37. '?address_name=' + options.keywords;
  38. ONEMAP.V.loading.load();
  39. $.ajax({
  40. url: sUrl,
  41. type: 'GET',
  42. dataType: 'jsonp'
  43. })
  44. .done(function(data) {
  45. ONEMAP.V.loading.loaded();
  46. callbackFunc(data);
  47. })
  48. .fail(function() {
  49. ONEMAP.V.loading.loaded();
  50. });
  51. },
  52. this.byZoomLatLng = function(zoomLevel,latLng,callback_func){
  53. var url= onemapUrlConfig.addressSearchDataUrl+':80/v1.0/address/near/?z'+zoomLevel+
  54. '&lon='+latLng.lng+
  55. '&lat='+latLng.lat;
  56. L.Util.ajax(url,{jsonp:true,cbParam:'callback'},function(data){
  57. callback_func(data);
  58. });
  59. },
  60. /**
  61. * 检索关键字
  62. * @param {[type]} options [description]
  63. * @param {[type]} callbackFunc [description]
  64. * @return {[type]} [description]
  65. */
  66. this.getPoiByOptions = function(options, callbackFunc) {
  67. var sUrl = onemapUrlConfig.poiSearchDataUrl + '/v1.0/address/?' +
  68. 'page=' + this._options.page +
  69. '&per_page=' + this._options.pageSize;
  70. //区域代码
  71. if (options.hasOwnProperty('pac')) {
  72. sUrl += '&pac=' + options.pac;
  73. }
  74. //关键字
  75. if (options.hasOwnProperty('keywords')) {
  76. options.keywords = encodeURIComponent(options.keywords);
  77. sUrl += '&address_name=' + options.keywords;
  78. }
  79. //专题id
  80. if (options.hasOwnProperty('themeId')) {
  81. sUrl += '&theme_id=' + options.themeId;
  82. }
  83. //带矩形范围
  84. if (options.hasOwnProperty('bounds')) {
  85. sUrl += '&min_lat=' + options.bounds.southWest[0] +
  86. '&min_lon=' + options.bounds.southWest[1] +
  87. '&max_lat=' + options.bounds.northEast[0] +
  88. '&max_lon=' + options.bounds.northEast[1];
  89. }
  90. //中心点外扩
  91. if (options.hasOwnProperty('range') && options.hasOwnProperty('rangeCenter')) {
  92. if(options.range[1]!=NaN&&options.range[1]!=undefined&&options.range[1]){
  93. options.range = this.formatEarthLatLng(options.range[0],options.range[1]);
  94. } else{
  95. options.range = options.range[0];
  96. }
  97. sUrl += '&search_range=' + options.range +
  98. '&min_lat=' + options.rangeCenter[0] +
  99. '&min_lon=' + options.rangeCenter[1];
  100. }
  101. ONEMAP.V.loading.load();
  102. $.ajax({
  103. url: sUrl,
  104. type: 'GET',
  105. dataType: 'jsonp'
  106. })
  107. .done(function(data) {
  108. ONEMAP.V.loading.loaded();
  109. callbackFunc(data);
  110. })
  111. .fail(function() {
  112. ONEMAP.V.loading.loaded();
  113. });
  114. }
  115. };
  116. return poiSearch;
  117. })