当前位置:   article > 正文

uniapp微信小程序map组件polygons自定义扇形覆盖物

uniapp微信小程序map组件polygons自定义扇形覆盖物

1.需求效果如下

画一个扇形或多个扇形组成圆,跟随地图移动、缩放、旋转等

2.代码实现

HTML部分:

<map ref="map" style="width: 100%; height: 100%" :scale="12" :min-scale="5" :max-scale="15"  :latitude="latitude" :longitude="longitude" :markers="covers" :polygons="polygons"></map>

JS部分:

定义数据

  1. data() {
  2. return {
  3. latitude: 28.2283, // 地图中心纬度
  4. longitude: 112.9389, // 地图中心经度
  5. covers: [{
  6. id: 10000,
  7. latitude: 28.2283, // 标记点纬度
  8. longitude: 112.9389, // 标记点经度
  9. width: 27,
  10. height: 31,
  11. iconPath: '../../static/report/mackerIcons.png'
  12. }],
  13. polygons: [],//自定义覆盖物
  14. }
  15. },

 画图形方法,根据自己需要设置扇形角度,下面代码设置为30°

  1. //angle初始角度,shifting旋转角度,ll中心经纬度
  2. logPoint(angle, shifting, ll) {
  3. var lls = [];
  4. lls.push({
  5. longitude: ll.JD,
  6. latitude: ll.WD
  7. })
  8. var a = 4000000; //半径
  9. angle = angle - shifting > 0 ? angle - shifting : angle + (360 - shifting); //更具方位角算出,扇形弧边的初始位置。
  10. var b, c; // 边长,a是圆半径,b是高(Y轴),C是长(X轴)
  11. var B; // 角度,设定B是向量-变化
  12. for (var i = 0; i < 11; i++) {
  13. var g = angle + i * 3;
  14. g = g > 360 ? g - 360 : g;
  15. var B = g / (180 / Math.PI); //Math中使用的是弧度并不是角度,所以将角度转换成弧度(180/π)°角度
  16. b = a * Math.sin(B);
  17. c = a * Math.cos(B);
  18. // 1.同一纬线上经度差一度,实际距离差多少
  19. // 111km*cosφ (φ为当地纬度)
  20. // 2.同一经线上纬度差一度,实际距离差多少
  21. // 111km
  22. b = b / 111000 + ll.JD;
  23. c = c / 111000 + ll.WD;
  24. lls.push({
  25. angle: B,
  26. longitude: b,
  27. latitude: c,
  28. });
  29. }
  30. return lls;
  31. },

 使用方法:

  1. //colorValue动态设置颜色值,latitude中心经度, longitude中心纬度
  2. countBear(colorValue, latitude, longitude) {
  3. let that = this
  4. var N = {
  5. points: that.logPoint(30, 45, {
  6. JD: longitude,
  7. WD: latitude,
  8. }),
  9. fillColor: that.changeColor(colorValue.N),
  10. strokeColor: "transparent",
  11. strokeWidth: 1,
  12. zIndex: 1
  13. };
  14. var ENN = {
  15. points: that.logPoint(30, 15, {
  16. JD: longitude,
  17. WD: latitude,
  18. }),
  19. fillColor: that.changeColor(colorValue.ENN),
  20. strokeColor: "transparent",
  21. strokeWidth: 1,
  22. zIndex: 1
  23. }
  24. //以此类推... 要几个扇形定义几个
  25. let pl = []
  26. pl.push(N, ENN, ...)
  27. that.polygons = pl //与map组件中的参数对应
  28. }
  29. //动态设置颜色值方法 这里要注意只能用HEX不能用RGBA
  30. changeColor(e) {
  31. return e == 2 ? '#24B65A3D' : (e == 1 ? '#0047FF40' : (e == 0 ? '#FFDF3640' : (e == -1 ? '#FF884540' : '#FF00003D')))
  32. },

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/2023面试高手/article/detail/549716
推荐阅读