mapCanvas.js 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120
  1. // 已弃用
  2. let ctx = null
  3. let systemInfo = null
  4. let canvasW = 0 // 画布宽度 px
  5. let canvasH = 0 // 画布高度 px
  6. let scale = 1.0 // 地图缩放比例
  7. export default {
  8. async initCanvas(canvasId, instance) {
  9. ctx = uni.createCanvasContext(canvasId, instance)
  10. // 获取设备信息,主要获取宽度,赋值给canvasW 也就是宽度:100%
  11. let [err, systemInfo] = await uni.getSystemInfo()
  12. // systemInfo = await this.getSystemInfo()
  13. console.log("[initCanvas] systemInfo", systemInfo)
  14. canvasW = systemInfo.windowWidth; // 画布宽度
  15. canvasH = systemInfo.windowHeight - 60; // 画布高度
  16. console.log("[initCanvas] ", canvasW, canvasH)
  17. },
  18. async handleDrawMap(mapUrl) {
  19. this.drawMapBg(mapUrl)
  20. // await this.draw(false)
  21. let posArr = [
  22. {
  23. x: canvasW / 2,
  24. y: canvasH / 2,
  25. color: 'red'
  26. }, {
  27. x: 100,
  28. y: 100,
  29. color: 'green'
  30. }, {
  31. x: 300,
  32. y: 300,
  33. color: ''
  34. }
  35. ]
  36. let radius = 20
  37. this.drawPosArr(posArr, radius)
  38. this.drawPosArr(posArr, 30)
  39. ctx.strokeRect(100, 10, 150, 100)
  40. // 以原点为中心,原点可以用 translate方法修改。顺时针旋转当前坐标轴。多次调用rotate,旋转的角度会叠加。
  41. // rotate Number 旋转角度,以弧度计(degrees * Math.PI/180;degrees范围为0~360)
  42. ctx.rotate(20 * Math.PI / 180)
  43. // 在调用scale方法后,之后创建的路径其横纵坐标会被缩放。多次调用scale,倍数会相乘。
  44. ctx.scale(2, 2)
  45. ctx.strokeRect(100, 10, 150, 100)
  46. ctx.rotate(-20 * Math.PI / 180)
  47. ctx.setLineDash([20, 30], 20)
  48. ctx.beginPath()
  49. ctx.moveTo(0,100)
  50. ctx.lineTo(600, 100)
  51. ctx.stroke()
  52. await this.draw()
  53. },
  54. drawMapBg(mapUrl) {
  55. // 填充背景色,白色
  56. // ctx.setFillStyle('#fff'); // 默认白色
  57. // ctx.fillRect(0, 0, canvasW, canvasH) // fillRect(x,y,宽度,高度)
  58. console.log("[drawMapBg] ", canvasW, canvasH)
  59. // ctx.drawImage(mapUrl, 0, 0, 1180, 666) // drawImage(图片路径,x,y,绘制图像的宽度,绘制图像的高度)
  60. ctx.drawImage(mapUrl, 0, 0, canvasW, canvasH) // drawImage(图片路径,x,y,绘制图像的宽度,绘制图像的高度)
  61. },
  62. // x Number 圆的x坐标
  63. // y Number 圆的y坐标
  64. // r Number 圆的半径
  65. drawPos(x, y, r, color = 'blue') {
  66. // ctx.setFillStyle('#ff0000'); // 默认白色
  67. // ctx.fillRect(0, 0, 100, 200) // fillRect(x,y,宽度,高度)
  68. ctx.beginPath()
  69. ctx.setLineWidth(3)
  70. ctx.arc(x, y, r, 0, 2 * Math.PI)
  71. ctx.setStrokeStyle(color)
  72. ctx.stroke()
  73. },
  74. drawPosArr(posArr, radius, defaultColor = 'blue') {
  75. for (var i = 0; i < posArr.length; i++) {
  76. let color = (posArr[i].color != '') ? posArr[i].color : defaultColor
  77. this.drawPos(posArr[i].x, posArr[i].y, radius, color)
  78. }
  79. },
  80. async draw(reserve = true) {
  81. // draw方法 把以上内容画到 canvas 中
  82. ctx.draw(reserve, (ret) => {
  83. console.log("[draw] 绘制完成")
  84. // uni.showToast({
  85. // icon: 'success',
  86. // mask: true,
  87. // title: '绘制完成',
  88. // });
  89. });
  90. },
  91. // 获取图片信息
  92. getImageInfo(image) {
  93. return new Promise((req, rej) => {
  94. uni.getImageInfo({
  95. src: image,
  96. success: function(res) {
  97. req(res)
  98. },
  99. });
  100. })
  101. },
  102. // 获取设备信息
  103. getSystemInfo() {
  104. return new Promise((req, rej) => {
  105. uni.getSystemInfo({
  106. success: function(res) {
  107. req(res)
  108. }
  109. });
  110. })
  111. },
  112. }