qq_local.js 6.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244
  1. var map;
  2. /**
  3. * 创建地图
  4. * @param latlng
  5. */
  6. async function createMap(id, lnglat) {
  7. var center;
  8. if(lnglat["lat"] != ''|| lnglat["lng"] != '' ){
  9. center = new TMap.LatLng(lnglat.lat,lnglat.lng);
  10. } else {
  11. await getCurrentPosition(function(res){
  12. if (res.status == 0) {
  13. var location = res.result.location;
  14. center = new TMap.LatLng(location.lat, location.lng);
  15. }
  16. })
  17. }
  18. map = new TMap.Map(document.getElementById(id), {
  19. center: center,//设置地图中心点坐标
  20. zoom: 17 //设置地图缩放级别
  21. });
  22. }
  23. var editor_array = {};
  24. /**
  25. * 创建一个圆, 并且给与编辑权限
  26. */
  27. function createCircle(key, color, border_color, path_param){
  28. if(path_param == undefined){
  29. var center = map.getCenter(); //获取当前地图中心位置
  30. var radius = 1000;
  31. }else{
  32. var center = new TMap.LatLng(path_param.center.latitude, path_param.center.longitude)
  33. var radius = path_param.radius;
  34. }
  35. var multiCircle = new TMap.MultiCircle({
  36. map: map,
  37. styles: { // 设置圆形样式
  38. 'circle': new TMap.CircleStyle({
  39. 'color': set16ToRgba(color, 0.4),
  40. 'showBorder': true,
  41. 'borderColor': border_color,
  42. 'borderWidth': 2
  43. }),
  44. },
  45. geometries: [
  46. {
  47. styleId: 'circle',
  48. center: center,
  49. radius: radius,
  50. id: key
  51. }
  52. ]
  53. });
  54. var circle = new TMap.tools.GeometryEditor({
  55. map: map,
  56. overlayList: [
  57. {
  58. overlay: multiCircle,
  59. id: key,
  60. }
  61. ],
  62. actionMode: TMap.tools.constants.EDITOR_ACTION.INTERACT,
  63. activeOverlayId: key, // 激活图层
  64. selectable: true, // 开启点选功能
  65. })
  66. // 缩放地图
  67. map.easeTo({zoom: 14 })
  68. circle.select([key]);
  69. editor_array[key] = circle;
  70. // 初始化数据
  71. editor_array[key].data = {
  72. center: center,
  73. radius: radius
  74. }
  75. circle.on('adjust_complete', function (data) {
  76. editor_array[key].data = data;
  77. })
  78. }
  79. /**
  80. * 创建多边形
  81. * @param key
  82. * @param color
  83. * @param border_color
  84. * @param path_param
  85. */
  86. function createPolygon(key, color, border_color, path_param){
  87. var center = map.getCenter();
  88. var lat = center.lat;
  89. var lng = center.lng;
  90. if(path_param == undefined){
  91. var path = [
  92. new TMap.LatLng(lat+0.01, lng+0.01),
  93. new TMap.LatLng(lat-0.01, lng+0.01),
  94. new TMap.LatLng(lat-0.01, lng-0.01),
  95. new TMap.LatLng(lat+0.01, lng-0.01),
  96. ]
  97. }else{
  98. var path = []
  99. $.each(path_param, function(i, item){
  100. path.push(new TMap.LatLng(item.latitude, item.longitude));
  101. });
  102. }
  103. var multiPolygon = new TMap.MultiPolygon({
  104. map: map,
  105. styles: {
  106. polygon: new TMap.PolygonStyle({
  107. 'color': set16ToRgba(color, 0.4),
  108. 'showBorder': true,
  109. 'borderColor': border_color,
  110. 'borderWidth': 2
  111. })
  112. },
  113. geometries: [
  114. {
  115. id: key, // 多边形图形数据的标志信息
  116. styleId: 'polygon', // 样式id
  117. paths: path, // 多边形的位置信息
  118. properties: {
  119. // 多边形的属性数据
  120. title: 'polygon',
  121. },
  122. }
  123. ]
  124. });
  125. var polygon = new TMap.tools.GeometryEditor({
  126. map: map,
  127. overlayList: [
  128. {
  129. overlay: multiPolygon,
  130. id: key,
  131. }
  132. ],
  133. actionMode: TMap.tools.constants.EDITOR_ACTION.INTERACT,
  134. activeOverlayId: key, // 激活图层
  135. selectable: true, // 开启点选功能
  136. })
  137. // 缩放地图
  138. map.easeTo({zoom: 14 })
  139. polygon.select([key]);
  140. editor_array[key] = polygon;
  141. // 初始化数据
  142. editor_array[key].data = {
  143. paths: path
  144. };
  145. polygon.on('adjust_complete', function (data) {
  146. editor_array[key].data = data;
  147. })
  148. }
  149. /**
  150. * 移除覆盖物
  151. * @param overlayers
  152. */
  153. function removeOverlayers(key){
  154. var editor = editor_array[key];
  155. editor.delete();//删除覆盖物
  156. }
  157. /**
  158. * 给与覆盖物焦点
  159. */
  160. function foursOverlayers(key){
  161. }
  162. /**
  163. * 获取覆盖物实例
  164. * @param key
  165. * @returns {*}
  166. */
  167. function getOverlayersPath(key, type){
  168. var editor = editor_array[key];
  169. switch(type){
  170. //多边形
  171. case 'polygon':{
  172. var return_json = [];
  173. editor.data.paths.forEach(function (item) {
  174. var item_json = {longitude:item.lng,latitude:item.lat};
  175. return_json.push(item_json);
  176. })
  177. return return_json;
  178. break;
  179. }
  180. //圆
  181. case 'circle':{
  182. var return_json = {};
  183. var center = editor.data.center;
  184. return_json['center'] = {longitude:center.lng,latitude:center.lat};
  185. return_json['radius'] = editor.data.radius;
  186. return return_json;
  187. break;
  188. }
  189. }
  190. }
  191. /**
  192. * 获取定位
  193. * @param callback
  194. */
  195. async function getCurrentPosition(callback){
  196. var ipLocation = new TMap.service.IPLocation();
  197. await ipLocation.locate({}).then(function(res){
  198. callback(res)
  199. })
  200. }
  201. /**
  202. * 16进制转rgba
  203. * @param str
  204. * @returns {string}
  205. */
  206. function set16ToRgba(str, opacity){
  207. var reg = /^#([0-9A-Fa-f]{3}|[0-9A-Fa-f]{6})$/
  208. if(!reg.test(str)){return;}
  209. let newStr = (str.toLowerCase()).replace(/\#/g,'')
  210. let len = newStr.length;
  211. if(len == 3){
  212. let t = ''
  213. for(var i=0;i<len;i++){
  214. t += newStr.slice(i,i+1).concat(newStr.slice(i,i+1))
  215. }
  216. newStr = t
  217. }
  218. let arr = []; //将字符串分隔,两个两个的分隔
  219. for(var i =0;i<6;i=i+2){
  220. let s = newStr.slice(i,i+2)
  221. arr.push(parseInt("0x" + s))
  222. }
  223. return 'rgba(' + arr.join(",") + ', '+ opacity +')';
  224. }