Skip to content

Commit 8b22d9f

Browse files
committed
fix ICL 926(矢量瓦片标签风格丢失问题)
1 parent 5a51d7e commit 8b22d9f

File tree

8 files changed

+153
-19
lines changed

8 files changed

+153
-19
lines changed

dist/iclient9-leaflet.js

Lines changed: 30 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18058,12 +18058,13 @@ var TileVectorLayer = exports.TileVectorLayer = _VectorGrid.VectorGrid.extend({
1805818058

1805918059
var style = me.vectorTileLayerStyles[layerName];
1806018060
if (style) {
18061+
feature = this._mergeFeatureTextField(feature, style);
1806118062
return style;
1806218063
}
1806318064

1806418065
// SuperMap.CartoCSSToLeaflet内部做了客户端配置的cartoCSS和服务端cartoCSS的拼接处理
1806518066
// 客户端配置的cartoCSS会覆盖相应图层的服务端cartoCSS
18066-
if (!style && feature.type !== "TEXT") {
18067+
if (!style) {
1806718068
var scale = this.getScaleFromCoords(coords);
1806818069
var shaders = _CartoCSSToLeaflet.CartoCSSToLeaflet.pickShader(layerName) || [];
1806918070
style = [];
@@ -18078,12 +18079,18 @@ var TileVectorLayer = exports.TileVectorLayer = _VectorGrid.VectorGrid.extend({
1807818079
}
1807918080
}
1808018081

18082+
feature = this._mergeFeatureTextField(feature, style);
18083+
1808118084
//次优先级是layers资源的默认的样式,最低优先级是CartoDefaultStyle的样式
18082-
if (!style || style.length < 1) {
18085+
if (feature.type === "TEXT" || !style || style.length < 1) {
1808318086
style = _CartoCSSToLeaflet.CartoCSSToLeaflet.getValidStyleFromLayerInfo(feature, layerStyleInfo);
18087+
if (feature.type === "TEXT") {
18088+
style.textName = "[" + feature.properties.textField + "]";
18089+
}
1808418090
}
1808518091

1808618092
me.vectorTileLayerStyles[layerName] = style;
18093+
1808718094
return style;
1808818095
},
1808918096

@@ -18127,6 +18134,26 @@ var TileVectorLayer = exports.TileVectorLayer = _VectorGrid.VectorGrid.extend({
1812718134
return _leaflet2.default.Util.resolutionToScale(resolution, 96, mapUnit);
1812818135
},
1812918136

18137+
_mergeFeatureTextField: function _mergeFeatureTextField(feature, style) {
18138+
//如果设置了使用服务端cartocss样式,则文本专题图图层优先从carto中读取文本字段的key
18139+
if (!this.options.serverCartoCSSStyle || !style || feature.type !== "TEXT") {
18140+
return feature;
18141+
}
18142+
18143+
var tempStyle = style;
18144+
if (!_leaflet2.default.Util.isArray(style)) {
18145+
tempStyle = [style];
18146+
}
18147+
for (var i = 0; i < tempStyle.length; i++) {
18148+
var textName = tempStyle[i].textName;
18149+
if (textName && feature.properties) {
18150+
feature.properties.textField = textName.substring(1, textName.length - 1);
18151+
}
18152+
}
18153+
18154+
return feature;
18155+
},
18156+
1813018157
_getTileUrl: function _getTileUrl(coords) {
1813118158
var me = this,
1813218159
tileTemplate = me.options.tileTemplate;
@@ -56899,6 +56926,7 @@ var CartoStyleMap = exports.CartoStyleMap = _leaflet2.default.supermap.CartoStyl
5689956926
"text-face-name": "fontFamily",
5690056927

5690156928
"text-align": "textAlign",
56929+
"text-name": "textName",
5690256930
'text-weight': 'fontWeight',
5690356931
"text-halo-color": "color",
5690456932
"text-fill": "fillColor",

dist/iclient9-leaflet.min.js

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

dist/iclient9-openlayers.js

Lines changed: 40 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -10820,7 +10820,8 @@ var StyleUtils = function () {
1082010820
style = this.getDefaultStyle(type);
1082110821
attributes.FEATUREID = feature.getProperties().id;
1082210822
attributes.SCALE = scale;
10823-
var cartoStyleMap = _StyleMap.StyleMap.CartoStyleMap[type];
10823+
var cartoStyleType = feature.getProperties().type === "TEXT" ? "TEXT" : type;
10824+
var cartoStyleMap = _StyleMap.StyleMap.CartoStyleMap[cartoStyleType];
1082410825
var fontSize, fontName;
1082510826
if (shader) {
1082610827
for (var i = 0, len = shader.length; i < len; i++) {
@@ -10853,7 +10854,20 @@ var StyleUtils = function () {
1085310854
}
1085410855
}
1085510856
if (feature.getProperties().type === 'TEXT') {
10856-
return this.toOLTextStyle(style, feature.getProperties().texts[0]);
10857+
var text;
10858+
if (feature.getProperties().texts) {
10859+
text = feature.getProperties().texts[0];
10860+
}
10861+
if (text == null && style.textName) {
10862+
var textName = style.textName.substring(1, style.textName.length - 1);
10863+
text = feature.getProperties().attributes ? feature.getProperties().attributes[textName] : feature.getProperties()[textName];
10864+
if (text != null) {
10865+
var texts = feature.getProperties().texts || [];
10866+
texts.push(text);
10867+
feature.setProperties({ texts: texts });
10868+
}
10869+
}
10870+
return this.toOLTextStyle(style, text);
1085710871
}
1085810872
if (type === 'POINT' || type === 'MULTIPOINT') {
1085910873
return this.toOLPointStyle(style);
@@ -53242,7 +53256,11 @@ var VectorTileStyles = function (_ol$Observable) {
5324253256
if (!_olDebug2.default.supermap.VectorTileStyles.getDonotNeedServerCartoCss() && _olDebug2.default.supermap.VectorTileStyles.getCartoShaders()[layerName]) {
5324353257
//如果是文本,这里特殊处理。
5324453258
if (feature.getProperties().textStyle || feature.getProperties().TEXT_FEATURE_CONTENT || layerInfo.type == 'LABEL' && layerInfo.textField) {
53245-
return _StyleUtils2.default.getValidStyleFromLayerInfo(layerInfo, feature, url);
53259+
var featureStyle = _StyleUtils2.default.getValidStyleFromLayerInfo(layerInfo, feature, url);
53260+
if (feature.getGeometry().getType().toUpperCase() === "POINT") {
53261+
featureStyle = mergeTextFeatureStyle(layerInfo, feature, url);
53262+
}
53263+
return featureStyle;
5324653264
}
5324753265
return getStyleArray(_olDebug2.default.supermap.VectorTileStyles.getCartoShaders()[layerName]);
5324853266
}
@@ -53259,6 +53277,25 @@ var VectorTileStyles = function (_ol$Observable) {
5325953277
}
5326053278
return styleArray;
5326153279
}
53280+
53281+
function mergeTextFeatureStyle(layerInfo, feature, url) {
53282+
var textFeatureStyle = _StyleUtils2.default.getValidStyleFromLayerInfo(layerInfo, feature, url);
53283+
if (layerInfo.type == 'LABEL') {
53284+
feature.setProperties({ type: "TEXT" });
53285+
var cartoTextStyles = getStyleArray(_olDebug2.default.supermap.VectorTileStyles.getCartoShaders()[layerName]);
53286+
var textStyle = textFeatureStyle.getText();
53287+
for (var i = 0; i < cartoTextStyles.length; i++) {
53288+
if (!textStyle) {
53289+
textStyle = cartoTextStyles[i].getText();
53290+
} else {
53291+
textStyle.setText(cartoTextStyles[i].getText().getText());
53292+
}
53293+
}
53294+
textFeatureStyle.setText(textStyle);
53295+
return textFeatureStyle;
53296+
}
53297+
return textFeatureStyle;
53298+
}
5326253299
}
5326353300
}]);
5326453301

dist/iclient9-openlayers.min.js

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

src/leaflet/overlay/TileVectorLayer.js

Lines changed: 32 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,8 @@ import L from "leaflet";
1010
import {VectorGrid} from './vectortile/VectorGrid';
1111
import {CartoCSSToLeaflet} from './carto/CartoCSSToLeaflet';
1212
import SuperMap from '../../common/SuperMap';
13-
export var TileVectorLayer = VectorGrid.extend({
13+
14+
export var TileVectorLayer = VectorGrid.extend({
1415

1516
options: {
1617
//服务器类型<SuperMap.ServerType>iServer|iPortal|Online
@@ -119,7 +120,7 @@ export var TileVectorLayer = VectorGrid.extend({
119120
return {};
120121
}
121122
var layerInfo = me.layersInfo[layerName];
122-
if (!layerInfo)return null;
123+
if (!layerInfo) return null;
123124
layerInfo_simple = {layerIndex: layerInfo.layerIndex, ugcLayerType: layerInfo.ugcLayerType};
124125
switch (layerInfo.ugcLayerType) {
125126
case "VECTOR":
@@ -195,12 +196,13 @@ export var TileVectorLayer = VectorGrid.extend({
195196

196197
var style = me.vectorTileLayerStyles[layerName];
197198
if (style) {
199+
feature = this._mergeFeatureTextField(feature, style);
198200
return style;
199201
}
200202

201203
// SuperMap.CartoCSSToLeaflet内部做了客户端配置的cartoCSS和服务端cartoCSS的拼接处理
202204
// 客户端配置的cartoCSS会覆盖相应图层的服务端cartoCSS
203-
if (!style && feature.type !== "TEXT") {
205+
if (!style) {
204206
var scale = this.getScaleFromCoords(coords);
205207
var shaders = CartoCSSToLeaflet.pickShader(layerName) || [];
206208
style = [];
@@ -215,12 +217,18 @@ export var TileVectorLayer = VectorGrid.extend({
215217
}
216218
}
217219

220+
feature = this._mergeFeatureTextField(feature, style);
221+
218222
//次优先级是layers资源的默认的样式,最低优先级是CartoDefaultStyle的样式
219-
if (!style || style.length < 1) {
223+
if (feature.type === "TEXT" || (!style || style.length < 1)) {
220224
style = CartoCSSToLeaflet.getValidStyleFromLayerInfo(feature, layerStyleInfo);
225+
if (feature.type === "TEXT") {
226+
style.textName = "[" + feature.properties.textField + "]";
227+
}
221228
}
222229

223230
me.vectorTileLayerStyles[layerName] = style;
231+
224232
return style;
225233
},
226234

@@ -265,6 +273,26 @@ export var TileVectorLayer = VectorGrid.extend({
265273
return L.Util.resolutionToScale(resolution, 96, mapUnit);
266274
},
267275

276+
_mergeFeatureTextField: function (feature, style) {
277+
//如果设置了使用服务端cartocss样式,则文本专题图图层优先从carto中读取文本字段的key
278+
if (!this.options.serverCartoCSSStyle || !style || feature.type !== "TEXT") {
279+
return feature;
280+
}
281+
282+
var tempStyle = style;
283+
if (!L.Util.isArray(style)) {
284+
tempStyle = [style];
285+
}
286+
for (var i = 0; i < tempStyle.length; i++) {
287+
var textName = tempStyle[i].textName;
288+
if (textName && feature.properties) {
289+
feature.properties.textField = textName.substring(1, textName.length - 1);
290+
}
291+
}
292+
293+
return feature;
294+
},
295+
268296
_getTileUrl: function (coords) {
269297
var me = this, tileTemplate = me.options.tileTemplate;
270298
if (!tileTemplate) {

src/leaflet/overlay/carto/CartoStyleMap.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ export var CartoStyleMap = L.supermap.CartoStyleMap = {
99
"text-face-name": "fontFamily",
1010

1111
"text-align": "textAlign",
12+
"text-name":"textName",
1213
'text-weight': 'fontWeight',
1314
"text-halo-color": "color",
1415
"text-fill": "fillColor",

src/openlayers/core/StyleUtils.js

Lines changed: 21 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ import ol from 'openlayers/dist/ol-debug';
22
import SuperMap from '../../common/SuperMap';
33
import {StyleMap} from '../overlay/vectortile/StyleMap';
44
import {DeafultCanvasStyle} from '../overlay/vectortile/DeafultCanvasStyle';
5+
56
ol.supermap = ol.supermap || {};
67

78
export default class StyleUtils {
@@ -211,7 +212,8 @@ export default class StyleUtils {
211212
style = this.getDefaultStyle(type);
212213
attributes.FEATUREID = feature.getProperties().id;
213214
attributes.SCALE = scale;
214-
var cartoStyleMap = StyleMap.CartoStyleMap[type];
215+
var cartoStyleType = feature.getProperties().type === "TEXT" ? "TEXT" : type;
216+
var cartoStyleMap = StyleMap.CartoStyleMap[cartoStyleType];
215217
var fontSize, fontName;
216218
if (shader) {
217219
for (var i = 0, len = shader.length; i < len; i++) {
@@ -231,7 +233,7 @@ export default class StyleUtils {
231233
} else {
232234
if (prop === "globalCompositeOperation") {
233235
value = StyleMap.CartoCompOpMap[value];
234-
if (!value || value === "")continue;
236+
if (!value || value === "") continue;
235237
} else if (fromServer && prop === 'pointFile') {
236238
value = url + '/tileFeature/symbols/' + value.replace(/(___)/gi, '@');
237239
}
@@ -244,7 +246,20 @@ export default class StyleUtils {
244246
}
245247
}
246248
if (feature.getProperties().type === 'TEXT') {
247-
return this.toOLTextStyle(style, feature.getProperties().texts[0])
249+
var text;
250+
if (feature.getProperties().texts) {
251+
text = feature.getProperties().texts[0];
252+
}
253+
if (text == null && style.textName) {
254+
var textName = style.textName.substring(1, style.textName.length - 1);
255+
text = feature.getProperties().attributes ? feature.getProperties().attributes[textName] : feature.getProperties()[textName];
256+
if (text != null) {
257+
var texts = feature.getProperties().texts || [];
258+
texts.push(text);
259+
feature.setProperties({texts: texts});
260+
}
261+
}
262+
return this.toOLTextStyle(style, text)
248263
}
249264
if (type === 'POINT' || type === 'MULTIPOINT') {
250265
return this.toOLPointStyle(style);
@@ -332,7 +347,7 @@ export default class StyleUtils {
332347
}
333348

334349
static dashStyle(style, widthFactor) {
335-
if (!style)return [];
350+
if (!style) return [];
336351
var w = style.strokeWidth * widthFactor;
337352
var str = style.strokeDashstyle;
338353
switch (str) {
@@ -349,8 +364,8 @@ export default class StyleUtils {
349364
case 'longdashdot':
350365
return [8 * w, 4 * w, 1, 4 * w];
351366
default:
352-
if (!str)return [];
353-
if (SuperMap.Util.isArray(str))return str;
367+
if (!str) return [];
368+
if (SuperMap.Util.isArray(str)) return str;
354369
str = SuperMap.String.trim(str).replace(/\s+/g, ",");
355370
return str.replace(/\[|\]/gi, "").split(",");
356371
}

src/openlayers/overlay/vectortile/VectorTileStyles.js

Lines changed: 27 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ import ol from 'openlayers/dist/ol-debug';
22
import '../../../common/style/CartoCSS';
33
import SuperMap from '../../../common/SuperMap';
44
import StyleUtils from '../../core/StyleUtils';
5+
56
ol.supermap = ol.supermap || {};
67

78
export default class VectorTileStyles extends ol.Observable {
@@ -266,7 +267,7 @@ export default class VectorTileStyles extends ol.Observable {
266267
return null;
267268
}
268269
var layerInfo = layersInfo[layerName];
269-
if (!layerInfo)return null;
270+
if (!layerInfo) return null;
270271
var layerInfo_simple = {layerIndex: layerInfo.layerIndex, ugcLayerType: layerInfo.ugcLayerType};
271272
switch (layerInfo.ugcLayerType) {
272273
case "VECTOR":
@@ -306,7 +307,11 @@ export default class VectorTileStyles extends ol.Observable {
306307
if (!ol.supermap.VectorTileStyles.getDonotNeedServerCartoCss() && ol.supermap.VectorTileStyles.getCartoShaders()[layerName]) {
307308
//如果是文本,这里特殊处理。
308309
if (feature.getProperties().textStyle || feature.getProperties().TEXT_FEATURE_CONTENT || layerInfo.type == 'LABEL' && layerInfo.textField) {
309-
return StyleUtils.getValidStyleFromLayerInfo(layerInfo, feature, url);
310+
var featureStyle = StyleUtils.getValidStyleFromLayerInfo(layerInfo, feature, url);
311+
if (feature.getGeometry().getType().toUpperCase() === "POINT") {
312+
featureStyle = mergeTextFeatureStyle(layerInfo, feature, url);
313+
}
314+
return featureStyle;
310315
}
311316
return getStyleArray(ol.supermap.VectorTileStyles.getCartoShaders()[layerName]);
312317
}
@@ -323,6 +328,26 @@ export default class VectorTileStyles extends ol.Observable {
323328
}
324329
return styleArray;
325330
}
331+
332+
function mergeTextFeatureStyle(layerInfo, feature, url) {
333+
var textFeatureStyle = StyleUtils.getValidStyleFromLayerInfo(layerInfo, feature, url);
334+
if (layerInfo.type == 'LABEL') {
335+
feature.setProperties({type: "TEXT"});
336+
var cartoTextStyles = getStyleArray(ol.supermap.VectorTileStyles.getCartoShaders()[layerName]);
337+
var textStyle = textFeatureStyle.getText();
338+
for (var i = 0; i < cartoTextStyles.length; i++) {
339+
if (!textStyle) {
340+
textStyle = cartoTextStyles[i].getText();
341+
} else {
342+
textStyle.setText(cartoTextStyles[i].getText().getText());
343+
}
344+
}
345+
textFeatureStyle.setText(textStyle);
346+
return textFeatureStyle;
347+
}
348+
return textFeatureStyle;
349+
}
350+
326351
};
327352

328353
getFeatureStyle(feature) {

0 commit comments

Comments
 (0)