* @function LabelThemeLayer.prototype.getLabelInfo * @description 根据当前位置获取绘制后的标签信息,包括标签的宽,高和行数等。 * @returns {Object} 绘制后的标签信息。
(location, style)
| 650 | * @returns {Object} 绘制后的标签信息。 |
| 651 | */ |
| 652 | getLabelInfo(location, style) { |
| 653 | var LABEL_ALIGN = { |
| 654 | "l": "left", |
| 655 | "r": "right", |
| 656 | "t": "top", |
| 657 | "b": "bottom" |
| 658 | }, |
| 659 | LABEL_FACTOR = { |
| 660 | "l": 0, |
| 661 | "r": -1, |
| 662 | "t": 0, |
| 663 | "b": -1 |
| 664 | }; |
| 665 | |
| 666 | style = Util.extend({ |
| 667 | fontColor: "#000000", |
| 668 | labelAlign: "cm" |
| 669 | }, style); |
| 670 | var pt = this.getLocalXY(location); |
| 671 | var labelWidth = 0; |
| 672 | |
| 673 | if (style.labelXOffset || style.labelYOffset) { |
| 674 | var xOffset = isNaN(style.labelXOffset) ? 0 : style.labelXOffset; |
| 675 | var yOffset = isNaN(style.labelYOffset) ? 0 : style.labelYOffset; |
| 676 | pt[0] += xOffset; |
| 677 | pt[1] -= yOffset; |
| 678 | } |
| 679 | |
| 680 | var canvas = document.createElement('canvas'); |
| 681 | canvas.globalAlpha = 0; |
| 682 | canvas.lineWidth = 1; |
| 683 | |
| 684 | var ctx = canvas.getContext("2d"); |
| 685 | |
| 686 | ctx.fillStyle = style.fontColor; |
| 687 | ctx.globalAlpha = style.fontOpacity || 1.0; |
| 688 | var fontStyle = [style.fontStyle ? style.fontStyle : "normal", |
| 689 | "normal", |
| 690 | style.fontWeight ? style.fontWeight : "normal", |
| 691 | style.fontSize ? style.fontSize : "1em", |
| 692 | style.fontFamily ? style.fontFamily : "sans-serif" |
| 693 | ].join(" "); |
| 694 | var labelRows = style.label.split('\n'); |
| 695 | var numRows = labelRows.length; |
| 696 | var vfactor, lineHeight, labelWidthTmp; |
| 697 | if (ctx.fillText) { |
| 698 | // HTML5 |
| 699 | ctx.font = fontStyle; |
| 700 | ctx.textAlign = LABEL_ALIGN[style.labelAlign[0]] || |
| 701 | "center"; |
| 702 | ctx.textBaseline = LABEL_ALIGN[style.labelAlign[1]] || |
| 703 | "middle"; |
| 704 | vfactor = LABEL_FACTOR[style.labelAlign[1]]; |
| 705 | if (vfactor == null) { |
| 706 | vfactor = -.5; |
| 707 | } |
| 708 | lineHeight = ctx.measureText('Mg').height || |
| 709 | ctx.measureText('xx').width; |
no test coverage detected