AmapSearch.js 4.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172
  1. window.onLoad = function () {
  2. var map = new AMap.Map('container');
  3. }
  4. var url = 'https://webapi.amap.com/maps?v=1.4.15&key=c2df9f4026e98b41962148c1703d8f33&plugin=AMap.Autocomplete,AMap.PlaceSearch,AMap.Geocoder,AMap.DistrictSearch&callback=onLoad';
  5. var jsapi = document.createElement('script');
  6. jsapi.type = "text/javascript";
  7. jsapi.src = url;
  8. document.head.appendChild(jsapi);
  9. let times = setInterval(() => {
  10. try {
  11. if (!!AMap) {
  12. const s = document.createElement('script');
  13. s.type = "text/javascript";
  14. s.src = 'https://webapi.amap.com/ui/1.1/main.js';
  15. document.head.appendChild(s);
  16. clearInterval(times)
  17. }
  18. } catch { }
  19. }, 1000)
  20. /**
  21. * 调用高德地图执行模糊查询
  22. * @param {Number} page 当前页
  23. * @param {String} inputval 关键字
  24. * @param {Function} cb 回调函数
  25. * @param {Boolean} isMark 是否在地图上标记点
  26. */
  27. function AmapSearch(page, inputval, cb, isMark) {
  28. var keywords = inputval;
  29. AMap.plugin('AMap.PlaceSearch', function () {
  30. var autoOptions = {
  31. city: VagueQueryUrl,
  32. citylimit: true,
  33. pageIndex: page
  34. }
  35. var placeSearch = new AMap.PlaceSearch(autoOptions);
  36. placeSearch.search(keywords, function (status, result) {
  37. if (status != "complete") {
  38. return
  39. }
  40. var datas = result.poiList;
  41. let count = datas.count;
  42. let crupage = datas.pageIndex;
  43. let arr = datas.pois;
  44. var pointData = [];
  45. var returnObjectList = [];
  46. for (let i = 0; i < arr.length; i++) {
  47. const element = arr[i];
  48. var xy = [];
  49. var x = element.location.lng; //经度
  50. var y = element.location.lat; // 纬度
  51. x = handle_x(x);
  52. y = handle_y(y);
  53. xy.push(x);
  54. xy.push(y);
  55. var returnObject = new Object();
  56. returnObject.id = element.id;
  57. returnObject.text = element.name;
  58. returnObject.address = element.address;
  59. returnObject.XY = xy;
  60. var marksData = {
  61. "json": xy
  62. };
  63. pointData = pointData.concat(marksData);
  64. returnObjectList.push(returnObject);
  65. }
  66. var symbol = new PictureMarkSymbolArgs();
  67. symbol.url = "images/amap_l_gray.png";
  68. symbol.height = 36;
  69. symbol.width = 36;
  70. symbol.yoffset = 15;
  71. symbol.xoffset = 3;
  72. if (isMark) {
  73. createMarkLayer(pointData, "vagueQueryLyr", symbol);
  74. }
  75. var resDatasObj = {
  76. keywords: keywords,
  77. page: crupage,
  78. count: count,
  79. list: returnObjectList
  80. }
  81. cb(resDatasObj);
  82. })
  83. })
  84. }
  85. // RoadInfoSearch()
  86. function RoadInfoSearch() {
  87. AMap.plugin('AMap.RoadInfoSearch', function () {
  88. var autoOptions = {
  89. city: VagueQueryUrl,
  90. pageSize: 100,
  91. pageIndex: 1
  92. }
  93. var roadInfoSearch = new AMap.RoadInfoSearch(autoOptions);
  94. roadInfoSearch.crossInfoSearchByCrossId("", function (status, result) {
  95. console.log(status, result);
  96. })
  97. })
  98. }
  99. //经度转墨卡托
  100. function handle_x(x) {
  101. return (x / 180.0) * 20037508.34;
  102. }
  103. //纬度度转墨卡托
  104. function handle_y(y) {
  105. if (y > 85.05112) {
  106. y = 85.05112;
  107. }
  108. if (y < -85.05112) {
  109. y = -85.05112;
  110. }
  111. y = (Math.PI / 180.0) * y;
  112. var tmp = Math.PI / 4.0 + y / 2.0;
  113. return 20037508.34 * Math.log(Math.tan(tmp)) / Math.PI;
  114. }
  115. /**
  116. * 获取行政区域;
  117. * @param {String} val 行政区域名
  118. * @param {Function} cb 回调函数
  119. */
  120. function getExtent(val, cb) {
  121. if (!val) return;
  122. var AmapCityBoundaries = {};
  123. AMap.plugin('AMap.DistrictSearch', function () {
  124. var districtSearch = new AMap.DistrictSearch({
  125. // 关键字对应的行政区级别,country表示国家
  126. level: 'city',
  127. // 显示下级行政区级数,1表示返回下一级行政区
  128. subdistrict: 1,
  129. extensions: "all"
  130. })
  131. // 搜索所有省/直辖市信息
  132. districtSearch.search(val, function (status, result) {
  133. let initWkid = 2360; // 默认xian80坐标系
  134. //巴里坤的lessid 巴里坤的层级和坐标系
  135. let blklessid = "912588c2a65543dca846";
  136. let getblklessid = JSON.parse(sessionStorage.getItem("account")).lesseeId;
  137. if (blklessid === getblklessid) {
  138. initWkid = 102100;
  139. }
  140. // 查询成功时,result即为对应的行政区信息
  141. if (status == "complete") {
  142. let cruExtent = result.districtList[0].center;
  143. AmapCityBoundaries.type = "point";
  144. AmapCityBoundaries.x = handle_x(cruExtent.lng);
  145. AmapCityBoundaries.y = handle_y(cruExtent.lat);
  146. AmapCityBoundaries.spatialReference = { "wkid": initWkid };
  147. cb(AmapCityBoundaries);
  148. } else {
  149. }
  150. })
  151. })
  152. }
  153. // 高德测量面积接口
  154. function AmapGetArea(paths, callback) {
  155. var area = AMap.GeometryUtil.ringArea(paths);
  156. callback(area);
  157. }