MCPcopy Index your code
hub / github.com/SuperMap/iClient-JavaScript / getDrawnLabels

Method getDrawnLabels

src/openlayers/overlay/Label.js:169–319  ·  view source on GitHub ↗

* @function Label.prototype.getDrawnLabels * @description 获取经(压盖)处理后将要绘制在图层上的标签要素。 * @param {Array. } labelFeatures - 所有标签要素的数组。 * @returns {Array. } 最终要绘制的标签要素数组。

(labelFeatures)

Source from the content-addressed store, hash-verified

167 * @returns {Array.<FeatureVector>} 最终要绘制的标签要素数组。
168 */
169 getDrawnLabels(labelFeatures) {
170 var feas = [], //最终要绘制的标签要素集
171 fea, //最终要绘制的标签要素
172 fi, //临时标签要素,用户的第i个标签
173 labelsB = [], //不产生压盖的标签要素范围集
174 styTmp, //用于临时存储要素style的变量
175 feaSty, //标签要素最终的style
176 // styleTemp用于屏蔽文本style中带有偏移性质style属性,偏移已经在计算bounds的过程中参与了运算,
177 // 所以在最终按照bounds来绘制标签时,需屏蔽style中带有偏移性质属性,否则文本的偏移量将扩大一倍。
178 styleTemp = {
179 labelAlign: "cm",
180 labelXOffset: 0,
181 labelYOffset: 0
182 };
183
184 var map = this.map;
185 var mapSize = map.getSize();
186 mapSize = {
187 x: mapSize[0],
188 y: mapSize[1]
189 };
190 var zoom = map.getView().getZoom();
191 //对用户的每个标签要素进行处理与判断
192 for (var i = 0, len = labelFeatures.length; i < len; i++) {
193 fi = labelFeatures[i];
194 //检查fi的style在避让中是否被改变,如果改变,重新设置要素的style
195 if (fi.isStyleChange) {
196 fi = this.setStyle(fi);
197 }
198
199 //标签最终的中心点像素位置 (偏移后)
200 var loc = this.getLabelPxLocation(fi);
201
202 //过滤掉地图范围外的标签 (偏移后)
203 if ((loc.x >= 0 && loc.x <= mapSize.x) && (loc.y >= 0 && loc.y <= mapSize.y)) {
204 //根据当前地图缩放级别过滤标签
205 if (fi.style.minZoomLevel > -1) {
206 if (zoom <= fi.style.minZoomLevel) {
207 continue;
208 }
209 }
210 if (fi.style.maxZoomLevel > -1) {
211 if (zoom > fi.style.maxZoomLevel) {
212 continue;
213 }
214 }
215
216 //计算标签bounds
217 var boundsQuad = null;
218 if (fi.isStyleChange) {
219 fi.isStyleChange = null;
220 boundsQuad = this.calculateLabelBounds(fi, loc);
221 } else {
222 if (fi.geometry.bsInfo.w && fi.geometry.bsInfo.h) {
223 //使用calculateLabelBounds2可以提高bounds的计算效率,尤其是在getPxBoundsMode = 1时
224 boundsQuad = this.calculateLabelBounds2(fi, loc);
225 } else {
226 boundsQuad = this.calculateLabelBounds(fi, loc);

Callers 5

LabelSpec.jsFile · 0.45
LabelThemeLayer.jsFile · 0.45

Calls 12

setStyleMethod · 0.95
getLabelPxLocationMethod · 0.95
calculateLabelBoundsMethod · 0.95
calculateLabelBounds2Method · 0.95
getAvoidInfoMethod · 0.95
getCenterLonLatMethod · 0.95
calculateBoundsMethod · 0.95
getSizeMethod · 0.80
getViewMethod · 0.80
pushMethod · 0.80
getZoomMethod · 0.45

Tested by

no test coverage detected