toolRoutePlaceSearch.js 38 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743
  1. define([
  2. 'modDir/service/addressSearch',
  3. 'modDir/service/poiSearch',
  4. ],
  5. function (addressSearchF, poiSearchF) {
  6. /**
  7. * 数据存放模块
  8. * [modValue description]
  9. * @type {Object}
  10. */
  11. var modValue = {
  12. pointSearchOptions: { //地名查询参数
  13. page: 1,
  14. pageSize: 10,
  15. keyWord: '',
  16. center: null, //中心点
  17. pac: 0, //区域pac
  18. init_query_key: '' //原始查询关键字
  19. },
  20. placeDataResult: null, //查询数据集合
  21. fitBounds: true,
  22. resultListHtml: null,
  23. pageHtml: null,
  24. markers: {}, //点查询标记集合
  25. dirName: {},//标记名称集合
  26. };
  27. /**
  28. * 根据pac的长度返回对应zoom
  29. * @param {[type]} options [description]
  30. * @return {[type]} [description]
  31. */
  32. function getZoom(options) {
  33. var zhixiashi = [15611, 15612, 15631, 15650, 15681, 15682];
  34. //直辖市判断
  35. if (zhixiashi.indexOf(parseInt(options.pac)) != -1) {
  36. return 11;
  37. }
  38. switch (options.pac.toString().length) {
  39. case 3: //国家
  40. return 4;
  41. case 5: //省
  42. return 6;
  43. case 7: //市
  44. return 11;
  45. case 9: //县
  46. return 12;
  47. default:
  48. return 12;
  49. }
  50. };
  51. /**
  52. * 通过地图缩放等级和坐标查找 地名
  53. * @type {Function}
  54. * @param latLng {Object} 坐标
  55. * @param callBack_func {Function} 回调
  56. * @private
  57. */
  58. function getInfoByZoomLatLng(latLng, callBack_func) {
  59. var zoom = map23DData.view.zoom;
  60. var addressSearch = new addressSearchF();
  61. addressSearch.getAddressInfo({ zoom: zoom, latLng: [latLng.lat, latLng.lng] }, function (data) {
  62. data = data.data;
  63. callBack_func(data);
  64. });
  65. };
  66. /**
  67. * 创建冒泡窗
  68. */
  69. function creatPopupHtml(options) {
  70. var popupHtml = '<div class="popup_html">' +
  71. ' <div class="popup-lt"></div>' +
  72. ' <div class="popup-lb"></div>' +
  73. ' <div class="popup-rt"></div>' +
  74. ' <div class="popup-rb"></div>' +
  75. ' <div class="popup-ct" style="text-indent:15px;line-height:48px">' + options.name +
  76. ' </div>' +
  77. ' <div class="popup-cb" style="padding-bottom:20px;color:#666666 !important">' + options.content + '</div>' +
  78. '</div>'
  79. return popupHtml;
  80. }
  81. /**
  82. * 地名搜索
  83. * @type {Function}
  84. * @param options {Object} {type}
  85. */
  86. function pointSearch(options) {
  87. modValue.pointSearchOptions.init_query_key = options.keyWord;
  88. getAreaInfo({ keywords: options.keyWord }, function (data) {
  89. if (data.residue_addr_name.length > 0) {
  90. modValue.pointSearchOptions.keyWord = data.residue_addr_name;
  91. //如果只返回一个参考地址
  92. if (data.address.length == 1) {
  93. //如果有pac 按pac查
  94. //if(data.address[0].area_pac>0){
  95. modValue.pointSearchOptions.type = 'pac';
  96. modValue.pointSearchOptions.pac = (data.address[0].area_pac.toString()).length > 2 ? (data.address[0].area_pac.toString().substr(2, data.address[0].area_pac.toString().length - 1)) : data.address[0].area_pac;
  97. if (modValue.pointSearchOptions.pac.length > 7) {
  98. modValue.pointSearchOptions.pac = modValue.pointSearchOptions.pac.substr(0, 7);
  99. }
  100. if (map23DData.display.map2D) {
  101. map2DViewer.map.setView([data.address[0].area_lat, data.address[0].area_lon], getZoom({ 'pac': modValue.pointSearchOptions.pac }));
  102. }
  103. getPageResult({ page: 1 });
  104. //如果返回多个参考地址,列出参考地址
  105. } else {
  106. createNameListForSearchResultHtml(data);
  107. }
  108. } else {
  109. modValue.fitBounds = false;
  110. if (data.address[0].pac > 0) {
  111. // if (map2DViewer.display.map2D) {
  112. // map2DViewer.map.setView([data.address[0].lat, data.address[0].lon], getZoom({ 'pac': data.address[0].pac.toString().substr(2, data.address[0].pac.toString().length - 1) }));
  113. // }
  114. if (map23DData.display.map2D) {
  115. map2DViewer.map.setView([data.address[0].lat, data.address[0].lon], getZoom({ 'pac': data.address[0].pac.toString().substr(2, data.address[0].pac.toString().length - 1) }));
  116. } else if (map23DData.display.map3D) {
  117. fly3DInView(data.address[0].lat, data.address[0].lon, getZoom({ 'pac': data.address[0].pac.toString().substr(2, data.address[0].pac.toString().length - 1) }));
  118. }
  119. ONEMAP.C.publisher.publish({ type: 'success', message: '已切换至 ' + data.address[0].name + ' 区域' }, 'noteBar::add');
  120. modValue.placeDataResult = {
  121. data: [{
  122. cn: data.address[0].name,
  123. lon: data.address[0].lon,
  124. tc: 0,
  125. tid: 0,
  126. pac: 0,
  127. lat: data.address[0].lat,
  128. id: 0
  129. }],
  130. total: 1,
  131. type: 1,
  132. page: 1,
  133. pagesize: 10
  134. };
  135. createResultHtml({ fitBounds: false })
  136. updatePlaceResultHtml();
  137. setTimeout(function () {
  138. _this._markers[0].openPopup();
  139. }, 300);
  140. } else {
  141. if (map23DData.display.map2D) {
  142. map2DViewer.map.setView([data.address[0].area_lat, data.address[0].area_lon], getZoom({ 'pac': data.address[0].area_pac.toString().substr(2, data.address[0].area_pac.toString().length - 1) }));
  143. } else if (map23DData.display.map3D) {
  144. fly3DInView(data.address[0].area_lat, data.address[0].area_lon, getZoom({ 'pac': data.address[0].area_pac.toString().substr(2, data.address[0].area_pac.toString().length - 1) }));
  145. }
  146. //_this._map.setView([data.address[0].area_lat,data.address[0].area_lon],_this._getZoom({'pac':data.address[0].area_pac.toString().substr(2,data.address[0].area_pac.toString().length-1)}));
  147. ONEMAP.C.publisher.publish({ type: 'success', message: '已切换至 ' + data.address[0].name + ' 区域' }, 'noteBar::add');
  148. modValue.placeDataResult = { data: [], total: 0, type: 1, page: 1, pagesize: 0 };
  149. for (var i = 0, l = data.address.length; i < l; i++) {
  150. modValue.placeDataResult.data.push({
  151. cn: data.address[i].area_name,
  152. lon: data.address[i].area_lon,
  153. tc: 0,
  154. tid: 0,
  155. pac: 0,
  156. lat: data.address[i].area_lat,
  157. id: i
  158. });
  159. modValue.placeDataResult.total++;
  160. modValue.placeDataResult.pagesize++;
  161. }
  162. createResultHtml({ fitBounds: false })
  163. updatePlaceResultHtml();
  164. }
  165. }
  166. });
  167. };
  168. /**
  169. * 创建getAreaName结果二次查询列表数据
  170. * @param {[type]} options [description]
  171. * @return {[type]} [description]
  172. */
  173. function createNameListForSearchResultHtml(options) {
  174. var createNameListHtml = $('<div class="routcategory-list-wrap"></div>')
  175. switch (ONEMAP.M.toolRouteSearch.modValue.pointSearchType) {
  176. case 1:
  177. $('#dStartResult').empty();
  178. $('#dStartResult').append(createNameListHtml);
  179. break;
  180. case 2:
  181. $('#dStopResult').empty();
  182. $('#dStopResult').append(createNameListHtml);
  183. break;
  184. case 3:
  185. var id = '#' + ONEMAP.M.toolRouteSearch.modValue.pointSearchContentId;
  186. $(id).empty();
  187. $(id).append(createNameListHtml);
  188. break;
  189. }
  190. $('<h3>请选择查询的区域:</h3>').appendTo($(".routcategory-list-wrap"));
  191. for (var i = 0, l = options.address.length; i < l; i++) {
  192. var place = options.address[i];
  193. place.pnum = i;
  194. var nLatlng = L.Util.formatHMS([place.area_lat, place.area_lon]);
  195. var _placeDl = $('<dl class="areaSelect fi" id="plm' + place.pnum + '"></dl>');
  196. var _placeDt = $('<dt><a>' + place.area_name + '</a> <span class="address" style="color:#fff"></span></dt>');
  197. getPlaceName(L.latLng([place.area_lat, place.area_lon]), _placeDt);
  198. _placeDl.bind('click', { d: place }, function (e) {
  199. $("#placePanel .place-list .cur").removeClass("cur");
  200. $(this).addClass("cur");
  201. modValue.pointSearchOptions.type = 'pac';
  202. modValue.pointSearchOptions.pac = (e.data.d.area_pac.toString()).length > 2 ? (e.data.d.area_pac.toString().substr(2, e.data.d.area_pac.toString().length - 1)) : e.data.d.area_pac;
  203. if (modValue.pointSearchOptions.pac.length > 7) {
  204. modValue.pointSearchOptions.pac = modValue.pointSearchOptions.pac.substr(0, 7);
  205. }
  206. if (map23DData.display.map2D) {
  207. map2DViewer.map.setView([e.data.d.area_lat, e.data.d.area_lon], getZoom({ 'pac': modValue.pointSearchOptions.pac }));
  208. } else if (map23DData.display.map3D) {
  209. fly3DInView(e.data.d.area_lat, e.data.d.area_lon, getZoom({ 'pac': modValue.pointSearchOptions.pac }));
  210. }
  211. getPageResult({ page: 1 });
  212. });
  213. _placeDt.appendTo(_placeDl);
  214. _placeDl.appendTo($(".routcategory-list-wrap"));
  215. }
  216. };
  217. /**
  218. * 更新地名查询结果列表
  219. * @param {[type]} options [description]
  220. * @return {[type]} [description]
  221. */
  222. function updatePlaceResultHtml() {
  223. switch (ONEMAP.M.toolRouteSearch.modValue.pointSearchType) {
  224. case 1:
  225. $('#dStartResult').empty();
  226. $('#dStartResult').append(modValue.resultListHtml).append(modValue.pageHtml);
  227. break;
  228. case 2:
  229. $('#dStopResult').empty();
  230. $('#dStopResult').append(modValue.resultListHtml).append(modValue.pageHtml);
  231. break;
  232. case 3:
  233. var id = '#' + ONEMAP.M.toolRouteSearch.modValue.pointSearchContentId;
  234. $(id).empty();
  235. $(id).append(modValue.resultListHtml).append(modValue.pageHtml);
  236. break;
  237. };
  238. $("#pointsSearchPageJump .page_num").bind('keydown', function (e) {
  239. if (e.keyCode === 13) {
  240. var pageJump = parseInt($("#pointsSearchPageJump .page_num").val());
  241. if (!pageJump || pageJump > $("#pointsSearchPageJump").attr('countPages')) {
  242. return;
  243. } else {
  244. getPageResult({ 'page': parseInt(pageJump) });
  245. }
  246. }
  247. });
  248. $("#pointsSearchPageJump .btn").bind('click', function () {
  249. getPageResult({ page: $(this).attr("pid") });
  250. });
  251. };
  252. /**
  253. * 三维跳转
  254. */
  255. function fly3DInView(lat, lng, zoom) {
  256. map3DViewer.flyTo({
  257. center: {
  258. lat: lat,
  259. lng: lng
  260. },
  261. zoom: zoom,
  262. heading: 0,//摄像机平面角度 正北为0
  263. tilt: 0,//摄像机倾斜角
  264. });
  265. };
  266. /**
  267. * 构建分页数据
  268. * @type {Function}
  269. * @returns {*}
  270. * @private
  271. */
  272. function createResultHtml(options) {
  273. ONEMAP.M.toolRouteSearch.clearMarker();
  274. modValue.resultListHtml = $('<div></div>');
  275. if (modValue.placeDataResult.type == 2) {
  276. $('<h3>请选择查询的区域:</h3>').appendTo(modValue.resultListHtml);
  277. //列出一级
  278. var place_fi_length = 0;
  279. for (var place_fi in modValue.placeDataResult['data']) {
  280. if (ONEMAP.T.getObjNameAry(modValue.placeDataResult['data']).length > 1) {
  281. place_fi_length++;
  282. var _placeDl = $('<dl class="areaSelect fi" pid="' + modValue.placeDataResult['data'][place_fi]['pac'] + '"></dl>');
  283. var _placeDt = $('<dt><a href="javascript:void(0)">' + place_fi + '(' + modValue.placeDataResult['data'][place_fi]['count'] + ')</a></dt>');
  284. modValue.placeDataResult['data'][place_fi].area_name = place_fi;
  285. _placeDl.bind('click', { d: modValue.placeDataResult['data'][place_fi] }, function (e) {
  286. if (modValue.pointSearchOptions.type == 'pac') {
  287. if (map23DData.display.map2D) {
  288. map2DViewer.map.setView([e.data.d.lat, e.data.d.lon], getZoom({ 'pac': e.data.d.pac }));
  289. } else if (map23DData.display.map3D) {
  290. fly3DInView(e.data.d.lat, e.data.d.lon, getZoom({ 'pac': e.data.d.pac }));
  291. }
  292. modValue.pointSearchOptions.pac = e.data.d.pac;
  293. setTimeout(function () {
  294. modValue.pointSearchOptions.type = 'pac';
  295. getPageResult({ page: 1 });
  296. }, 300);
  297. } else {
  298. if (map23DData.display.map2D) {
  299. map2DViewer.map.setView([e.data.d.lat, e.data.d.lon], map23DData.view.zoom + 2);
  300. } else if (map23DData.display.map3D) {
  301. fly3DInView(e.data.d.lat, e.data.d.lon, map23DData.view.zoom + 2);
  302. }
  303. }
  304. ONEMAP.C.publisher.publish({ type: 'success', message: '已切换至 ' + e.data.d.area_name + ' 区域' }, 'noteBar::add');
  305. });
  306. _placeDt.appendTo(_placeDl);
  307. _placeDl.appendTo(modValue.resultListHtml);
  308. }
  309. //列出二级
  310. var place_se_length = 0;
  311. for (var place_se in modValue.placeDataResult['data'][place_fi]['sub']) {
  312. if (ONEMAP.T.getObjNameAry(modValue.placeDataResult['data'][place_fi]['sub']).length > 1) {
  313. place_se_length++;
  314. var _placeDl_se = $('<dl class="areaSelect se" pid="' + modValue.placeDataResult['data'][place_fi]['sub'][place_se]['pac'] + '"></dl>');
  315. var _placeDt_se = $('<dt><a href="javascript:void(0)">' + place_se + '(' + modValue.placeDataResult['data'][place_fi]['sub'][place_se]['count'] + ')</a></dt>');
  316. modValue.placeDataResult['data'][place_fi]['sub'][place_se].area_name = place_se;
  317. _placeDl_se.bind('click', { d: modValue.placeDataResult['data'][place_fi]['sub'][place_se] }, function (e) {
  318. if (modValue.pointSearchOptions.type == 'pac') {
  319. if (map23DData.display.map2D) {
  320. map2DViewer.map.setView([e.data.d.lat, e.data.d.lon], getZoom({ 'pac': e.data.d.pac }));
  321. }
  322. modValue.pointSearchOptions.pac = e.data.d.pac;
  323. setTimeout(function () {
  324. modValue.pointSearchOptions.type = 'pac';
  325. getPageResult({ page: 1 });
  326. }, 300);
  327. } else {
  328. if (map23DData.display.map2D) {
  329. map2DViewer.map.setView([e.data.d.lat, e.data.d.lon], map23DData.view.zoom + 2);
  330. } else if (map23DData.display.map3D) {
  331. fly3DInView(e.data.d.lat, e.data.d.lon, map23DData.view.zoom + 2);
  332. }
  333. }
  334. ONEMAP.C.publisher.publish({ type: 'success', message: '已切换至 ' + e.data.d.area_name + ' 区域' }, 'noteBar::add');
  335. });
  336. _placeDt_se.appendTo(_placeDl_se);
  337. _placeDl_se.appendTo(modValue.resultListHtml);
  338. }
  339. //如果二级只有一个,列出三级
  340. if (ONEMAP.T.getObjNameAry(modValue.placeDataResult['data'][place_fi]['sub']).length == 1) {
  341. for (var place_th in modValue.placeDataResult['data'][place_fi]['sub'][place_se]['sub']) {
  342. var _placeDl_th = $('<dl class="areaSelect th" pid="' + modValue.placeDataResult['data'][place_fi]['sub'][place_se]['sub'][place_th]['pac'] + '"></dl>');
  343. var _placeDt_th = $('<dt><a href="javascript:void(0)">' + place_th + '(' + modValue.placeDataResult['data'][place_fi]['sub'][place_se]['sub'][place_th]['count'] + ')</a></dt>');
  344. modValue.placeDataResult['data'][place_fi]['sub'][place_se]['sub'][place_th].area_name = place_th;
  345. _placeDl_th.bind('click', { d: modValue.placeDataResult['data'][place_fi]['sub'][place_se]['sub'][place_th] }, function (e) {
  346. if (modValue.pointSearchOptions.type == 'pac') {
  347. if (map23DData.display.map2D) {
  348. map2DViewer.map.setView([e.data.d.lat, e.data.d.lon], getZoom({ 'pac': e.data.d.pac }));
  349. } else if (map23DData.display.map3D) {
  350. fly3DInView(e.data.d.lat, e.data.d.lon, getZoom({ 'pac': e.data.d.pac }));
  351. }
  352. modValue.pointSearchOptions.pac = e.data.d.pac;
  353. setTimeout(function () {
  354. modValue.pointSearchOptions.type = 'pac';
  355. getPageResult({ page: 1 });
  356. }, 300);
  357. } else {
  358. if (map23DData.display.map2D) {
  359. map2DViewer.map.setView([e.data.d.lat, e.data.d.lon], map23DData.view.zoom + 2);
  360. } else if (map23DData.display.map3) {
  361. fly3DInView(e.data.d.lat, e.data.d.lon, map23DData.view.zoom + 2);
  362. }
  363. }
  364. ONEMAP.C.publisher.publish({ type: 'success', message: '已切换至 ' + e.data.d.area_name + ' 区域' }, 'noteBar::add');
  365. });
  366. _placeDt_th.appendTo(_placeDl_th);
  367. _placeDl_th.appendTo(modValue.resultListHtml);
  368. }
  369. }
  370. }
  371. }
  372. modValue.pageHtml = $('');
  373. } else {
  374. for (var i = 0, l = modValue.placeDataResult.data.length; i < l; i++) {
  375. var place = modValue.placeDataResult.data[i];
  376. place.pnum = i;
  377. var nLatlng = L.Util.formatHMS([place.lat, place.lon]);
  378. var _placeDl = $('<dl class="place-dl" id="plm' + place.id + '"></dl>');
  379. $("#roadViewList").empty()
  380. var setWayBtn = '';
  381. if (ONEMAP.M.toolRouteSearch.modValue.pointSearchType == 1) {
  382. setWayBtn = '<button onclick="ONEMAP.M.routPlaceSearch.pointSetWayPoint(\'' + place.id + '\',\'start\',\'' + ONEMAP.M.toolRouteSearch.modValue.pointSearchContentCid + '\')" class="btn btn4 btn-set-way">设为起点</button>';
  383. } else if (ONEMAP.M.toolRouteSearch.modValue.pointSearchType == 2) {
  384. setWayBtn = '<button onclick="ONEMAP.M.routPlaceSearch.pointSetWayPoint(\'' + place.id + '\',\'stop\',\'' + ONEMAP.M.toolRouteSearch.modValue.pointSearchContentCid + '\')" class="btn btn4 btn-set-way">设为终点</button>';
  385. } else if (ONEMAP.M.toolRouteSearch.modValue.pointSearchType == 3) {
  386. setWayBtn = '<button onclick="ONEMAP.M.routPlaceSearch.pointSetWayPoint(\'' + place.id + '\',\'across\',\'' + ONEMAP.M.toolRouteSearch.modValue.pointSearchContentCid + '\')" class="btn btn4 btn-set-way">设为途经点</button>';
  387. }
  388. var _placeDt = $('<dt><i class="p' + (i + 1) + '"><img src="../images/layout/marker-icon' + (i + 1) + '.png" /></i><a href="javascript:void(0)">' + place.cn + '</a>' + setWayBtn + '</dt>');
  389. var _placeDd = $('<dd><p class="address"></p>' +
  390. '<p class="latlng">' + nLatlng.lng + ' , ' + nLatlng.lat + '</p></dd>');
  391. getPlaceName(L.latLng([place.lat, place.lon]), _placeDd);
  392. if (i == 0) {
  393. if (map23DData.display.map2D) {
  394. map2DViewer.map.setView([place.lat, place.lon], map23DData.view.zoom + 2);
  395. } else if (map23DData.display.map3) {
  396. fly3DInView(place.lon, place.lon, map23DData.view.zoom + 2);
  397. }
  398. }
  399. _placeDt.find('a').bind('click', { d: place }, function (e) {
  400. if (modValue.markers[e.data.d.id]) {
  401. map23DControl.marker({
  402. action: 'remove',
  403. guid: modValue.markers[e.data.d.id]
  404. })
  405. delete modValue.markers[e.data.d.id];
  406. markerToMap(e.data.d);
  407. map2DViewer.markers[modValue.markers[e.data.d.id]].openPopup();
  408. map2DViewer.setView({
  409. center: {
  410. lat: place.lat,
  411. lng: place.lon
  412. },
  413. zoom: map23DData.view.zoom
  414. });
  415. map3DViewer.flyTo({
  416. center: {
  417. lat: place.lat,
  418. lng: place.lon
  419. },
  420. zoom: map23DData.view.zoom
  421. });
  422. }
  423. var zoomTo = ((map23DData.view.zoom > 14) ? _this._map.getZoom() : 14);
  424. if (map23DData.display.map2D) {
  425. map2DViewer.map.setView([e.data.d.lat, e.data.d.lon], zoomTo);
  426. }
  427. //_this._map.setView([e.data.d.lat, e.data.d.lon],_this._getZoom({'pac':e.data.d.pac.toString().substr(2,e.data.d.pac.toString().length-1)}));
  428. $("#pointSearchResult .place-dl.cur").removeClass("cur");
  429. $(this).parent().parent().addClass("cur");
  430. });
  431. _placeDt.appendTo(_placeDl);
  432. _placeDd.appendTo(_placeDl);
  433. _placeDl.appendTo(modValue.resultListHtml);
  434. markerToMap(place);
  435. }
  436. if (modValue.fitBounds) {
  437. if (map23DData.display.map2D) {
  438. //map2DViewer.map.fitBounds(map2DViewer.groups[modValue._markerGroup].getBounds(), { 'paddingTopLeft': [100, 100], 'paddingBottomRight': [100, 100] });
  439. }
  440. }
  441. modValue.pageHtml = $('<div id="pointsSearchPageJump" class="page-wrap"></div>');
  442. var countPages = modValue.placeDataResult.num_pages;
  443. if (countPages == 0) {
  444. countPages = 1;
  445. }
  446. var pageJump = $('<div countPages="' + countPages + '" class="count"><span>第</span><input class="page_num input input-small" value="' + modValue.placeDataResult.page + '" type="text" /><span>/' + countPages + '页</span></div>');
  447. if (modValue.placeDataResult.hasOwnProperty('num_pages')) {
  448. pageJump.appendTo(modValue.pageHtml);
  449. $(pageJump).show();
  450. } else {
  451. $(pageJump).hide();
  452. }
  453. var pageHtmlBtnGroup = $('<div class="btn-group"></div>').appendTo(modValue.pageHtml);
  454. if (modValue.placeDataResult.per_page < modValue.placeDataResult.total) {
  455. if (modValue.placeDataResult.page == 1) {
  456. var abtnNext = $('<button type="button" class="btn btn2 btn-small next" pid=' + (modValue.placeDataResult.page + 1) + '>下一页</button>');
  457. pageHtmlBtnGroup.append(abtnNext);
  458. } else if (countPages == modValue.placeDataResult.page && modValue.placeDataResult.total > modValue.placeDataResult.pagesize) {
  459. var abtnPrev = $('<button type="button" class="btn btn2 btn-small prev" pid=' + (modValue.placeDataResult.page - 1) + '>上一页</button>');
  460. pageHtmlBtnGroup.append(abtnPrev);
  461. } else {
  462. var abtnPrev = $('<button type="button" class="btn btn2 btn-small prev" pid=' + (modValue.placeDataResult.page - 1) + '>上一页</button>');
  463. var abtnNext = $('<button type="button" class="btn btn2 btn-small next" pid=' + (modValue.placeDataResult.page + 1) + '>下一页</button>');
  464. pageHtmlBtnGroup.append(abtnPrev).append(abtnNext);
  465. }
  466. }
  467. }
  468. $("#pointSearchResult").mCustomScrollbar("update");
  469. };
  470. /**
  471. * 查询地点数据
  472. * @type {Function}
  473. * @param options {Object} {page}
  474. */
  475. function getPageResult(options) {
  476. modValue.pointSearchOptions.page = options.page;
  477. var poiSearch = new poiSearchF({
  478. page: modValue.pointSearchOptions.page,
  479. pageSize: modValue.pointSearchOptions.pageSize
  480. });
  481. if (modValue.pointSearchOptions.type === 'pac') {
  482. poiSearch.getPoiByOptions({ pac: modValue.pointSearchOptions.pac, keywords: modValue.pointSearchOptions.keyWord }, function (data) {
  483. if (data.hasOwnProperty('type')) {
  484. if (data.type == 1) {
  485. if (data.hasOwnProperty('data') && data['data'].length > 0) {
  486. data.page = data.page * 1;
  487. modValue.placeDataResult = data;
  488. createResultHtml(options)
  489. updatePlaceResultHtml();
  490. } else {
  491. modValue.resultListHtml = $('<div></div>');
  492. $('<p class="note">没有搜索到 ' + modValue.pointSearchOptions.init_query_key + ' 的信息,请修改搜索条件。</p>').appendTo(modValue.resultListHtml);
  493. modValue.pageHtml = $('');
  494. updatePlaceResultHtml();
  495. }
  496. } else if (data.type == 2) {
  497. data.page = data.page * 1;
  498. modValue.placeDataResult = data;
  499. createResultHtml(options)
  500. updatePlaceResultHtml();
  501. }
  502. } else {
  503. modValue.resultListHtml = $('<div></div>');
  504. $('<p class="note">没有搜索到 ' + modValue.pointSearchOptions.init_query_key + ' 的信息,请修改搜索条件。</p>').appendTo(modValue.resultListHtml);
  505. modValue.pageHtml = $('');
  506. updatePlaceResultHtml();
  507. }
  508. });
  509. }
  510. };
  511. /**
  512. * 添加标记到地图
  513. * @type {Function}
  514. * @param obj {Object} marker对象
  515. * @private
  516. */
  517. function markerToMap(obj) {
  518. var markerObj = {
  519. latlng: [obj.lat, obj.lon],
  520. name: obj.cn,
  521. pguid: obj.id,
  522. pnum: obj.pnum
  523. };
  524. createMarker(markerObj);
  525. };
  526. /**
  527. * 地名查询冒泡设置起点/终点
  528. * @param {[type]} pguid [description]
  529. * @param {[type]} type [description]
  530. * @return {[type]} [description]
  531. */
  532. function pointSetWayPoint(pguid, type, cid) {
  533. switch (type) {
  534. case 'start':
  535. ONEMAP.M.toolRouteSearch.setStartPoint(map23DData.markers[modValue.markers[pguid]].geojson.geometry.coordinates, modValue.dirName[pguid]);
  536. $.each(modValue.markers, function (index, item) {
  537. map23DControl.marker({
  538. action: 'remove',
  539. guid: modValue.markers[index]
  540. })
  541. })
  542. map23DControl.marker({
  543. action: 'remove',
  544. guid: modValue.markers[pguid]
  545. })
  546. var next = $("#pointSearchResultWrap .open").next();
  547. $("#pointSearchResultWrap .open").hide().remove();
  548. if (next) {
  549. $(next).find('.header').click();
  550. }
  551. break;
  552. case 'across':
  553. cid = cid;
  554. ONEMAP.M.toolRouteSearch.setAcrossPoint(map23DData.markers[modValue.markers[pguid]].geojson.geometry.coordinates, modValue.dirName[pguid], cid);
  555. $.each(modValue.markers, function (index, item) {
  556. map23DControl.marker({
  557. action: 'remove',
  558. guid: modValue.markers[index]
  559. })
  560. })
  561. map23DControl.marker({
  562. action: 'remove',
  563. guid: modValue.markers[pguid]
  564. })
  565. var next = $("#pointSearchResultWrap .open").next();
  566. $("#pointSearchResultWrap .open").hide().remove();
  567. if (next) {
  568. $(next).find('.header').click();
  569. }
  570. break;
  571. case 'stop':
  572. ONEMAP.M.toolRouteSearch.setStopPoint(map23DData.markers[modValue.markers[pguid]].geojson.geometry.coordinates, modValue.dirName[pguid]);
  573. $.each(modValue.markers, function (index, item) {
  574. map23DControl.marker({
  575. action: 'remove',
  576. guid: modValue.markers[index]
  577. })
  578. })
  579. map23DControl.marker({
  580. action: 'remove',
  581. guid: modValue.markers[pguid]
  582. })
  583. var next = $("#pointSearchResultWrap .open").next();
  584. $("#pointSearchResultWrap .open").hide().remove();
  585. if (next) {
  586. $(next).find('.header').click();
  587. }
  588. break;
  589. }
  590. };
  591. /**
  592. * 添加统计图标
  593. * @param {[type]} obj [description]
  594. * @return {[type]} [description]
  595. */
  596. function createMarker(obj) {
  597. var setWayBtn = '';
  598. if (ONEMAP.M.toolRouteSearch.modValue.pointSearchType == 1) {
  599. setWayBtn = '<a id="placeSearchPointFrom" href="javascript:ONEMAP.M.routPlaceSearch.pointSetWayPoint(\'' + obj.pguid + '\',\'start\',' + ONEMAP.M.toolRouteSearch.modValue.pointSearchContentCid + ')">起点</a>';
  600. } else if (ONEMAP.M.toolRouteSearch.modValue.pointSearchType == 2) {
  601. setWayBtn = '<a id="placeSearchPointGoTo" href="javascript:ONEMAP.M.routPlaceSearch.pointSetWayPoint(\'' + obj.pguid + '\',\'stop\',' + ONEMAP.M.toolRouteSearch.modValue.pointSearchContentCid + ')">终点</a>';
  602. } else if (ONEMAP.M.toolRouteSearch.modValue.pointSearchType == 3) {
  603. setWayBtn = '<a id="placeSearchPointGoTo" href="javascript:ONEMAP.M.routPlaceSearch.pointSetWayPoint(\'' + obj.pguid + '\',\'across\',' + ONEMAP.M.toolRouteSearch.modValue.pointSearchContentCid + ')">途经点</button>';
  604. }
  605. var markerHtml = '<div class="placeInfo">' +
  606. '<div class="op text-right">设为:' +
  607. setWayBtn +
  608. '</div>' +
  609. '</div>';
  610. var options_popup = {
  611. name: obj.name,
  612. content: markerHtml
  613. }
  614. markerHtml = creatPopupHtml(options_popup);
  615. var markerId = map23DControl.marker({
  616. action: 'add',
  617. groupId: ONEMAP.M.toolRouteSearch.modValue.markerGroup,
  618. pnum: obj.pguid,
  619. geojson: {
  620. "properties": {
  621. iconUrl: map23DConfig.map23DAssetsUrl + '/images/layout/marker/roadsign_icon_0.png',
  622. iconSize: [60, 39],
  623. iconAnchor: [29, 39],
  624. popupAnchor: [0, -39],
  625. title: obj.name
  626. },
  627. "geometry": {
  628. "type": "Point",
  629. "coordinates": [obj.latlng[1], obj.latlng[0]]
  630. }
  631. }
  632. });
  633. modValue.markers[obj.pguid] = markerId;
  634. modValue.dirName[obj.pguid] = obj.name;
  635. //if (map23DData.display.map2D) {
  636. map2DViewer.markers[markerId].bindPopup(markerHtml, {
  637. closeButton: false,
  638. maxWidth: 140,
  639. minWidth: 140,
  640. title: obj.name
  641. });
  642. map2DViewer.markers[markerId].on("mouseover", function () {
  643. $('.d-waypoints .cur').removeClass('cur');
  644. $('#plm' + this.pguid).addClass('cur');
  645. });
  646. //}else if(map23DData.display.map3D){
  647. // map3DViewer.label({
  648. // action:'update',
  649. // guid:markerId,
  650. // featureType:'marker',
  651. // label:{
  652. // text:obj.name, //标牌内容
  653. // textColor:'#ffffff', //标牌文字颜色
  654. // lineColor:'#ff0000', //标牌引线及边框颜色
  655. // background:'#FF0000', //标牌背景颜色
  656. // lineTop:10, //标牌偏移值
  657. // lineLeft:100 //标牌偏移值
  658. // }
  659. // })
  660. //};
  661. };
  662. /**
  663. * 无结果列表
  664. * @type {Function}
  665. * @param notText {String} 无结果说明文字
  666. * @returns {*}
  667. * @private
  668. */
  669. function setNotPointResultHtml(notText) {
  670. $('<p class="not-result">' + notText + '</p>').appendTo(modValue.resultHtml);
  671. };
  672. /**
  673. * 菜单 获取地名
  674. * @type {Function}
  675. * @param latlng {Object} 坐标
  676. * @param abc {Object} 容器
  677. * @param zoom {Int} 缩放等级
  678. * @private
  679. */
  680. function getPlaceName(latlng, abc, zoom) {
  681. var addressSearch = new addressSearchF();
  682. addressSearch.getAddressInfo({ zoom: (zoom ? zoom : 8), latLng: [latlng.lat, latlng.lng] }, function (data) {
  683. data = data.data;
  684. abc.find('.address').empty().append(data.region);
  685. $("#pointSearchResult").mCustomScrollbar("update");
  686. });
  687. };
  688. /**
  689. * 获取区域信息
  690. * @param {[type]} options [description]
  691. * @param {[type]} callback_func [description]
  692. * @return {[type]} [description]
  693. */
  694. function getAreaInfo(options, callback_func) {
  695. var poiSearch = new poiSearchF();
  696. poiSearch.getAreaInfo({ keywords: options.keywords }, function (data) {
  697. data = data.data;
  698. callback_func(data);
  699. });
  700. };
  701. return ONEMAP.M.routPlaceSearch = {
  702. pointSearch: pointSearch,
  703. modValue: modValue,
  704. pointSetWayPoint: pointSetWayPoint,
  705. getInfoByZoomLatLng: getInfoByZoomLatLng
  706. };
  707. })