Skip to content

Commit 57ab0f2

Browse files
committed
【feature】 webmap3.0 可感知图层datasource优化
1 parent d483261 commit 57ab0f2

File tree

3 files changed

+255
-11
lines changed

3 files changed

+255
-11
lines changed

src/mapboxgl/mapping/webmap/v3/WebMap.js

Lines changed: 12 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -582,14 +582,21 @@ export class WebMap extends mapboxgl.Evented {
582582
const matchMetadataCatalog = metadataCatalogs.find((item) => item.id === layer.id) || {};
583583
const { msDatasetId } = matchProjectCatalog;
584584
const { title = layer.id, parts } = matchMetadataCatalog;
585-
let dataType = '';
586-
let dataId = '';
585+
let dataSource = {};
587586
if (msDatasetId) {
588587
for (const data of datas) {
589588
const matchData = data.datasets && data.datasets.find((dataset) => dataset.msDatasetId === msDatasetId);
590589
if (matchData) {
591-
dataType = data.sourceType;
592-
dataId = matchData.datasetId;
590+
dataSource = {
591+
serverId: matchData.datasetId,
592+
type: data.sourceType
593+
}
594+
if (data.sourceType === 'REST_DATA') {
595+
const [serverUrl, datasourceName] = data.url.split('/rest/data/datasources/');
596+
dataSource.url = `${serverUrl}/rest/data`;
597+
dataSource.dataSourceName = `${datasourceName}:${matchData.datasetName}`;
598+
delete dataSource.serverId;
599+
}
593600
break;
594601
}
595602
}
@@ -607,10 +614,7 @@ export class WebMap extends mapboxgl.Evented {
607614
sourceLayer: layer.sourceLayer
608615
},
609616
renderLayers: this._getRenderLayers(parts, layer.id),
610-
dataSource: {
611-
serverId: dataId,
612-
type: dataType
613-
},
617+
dataSource,
614618
themeSetting: {}
615619
});
616620
if (isL7Layer(layer)) {

test/mapboxgl/mapping/WebMapV3Spec.js

Lines changed: 53 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -482,7 +482,6 @@ describe('mapboxgl-webmap3.0', () => {
482482
if (url.indexOf('/web/datas/1767084124/structureddata.json') > -1) {
483483
return Promise.resolve(new Response(l7StructureData1767084124));
484484
}
485-
console.log(url);
486485
return Promise.resolve();
487486
});
488487
mapboxgl.CRS = function () {};
@@ -532,4 +531,57 @@ describe('mapboxgl-webmap3.0', () => {
532531
});
533532
mapstudioWebmap.initializeMap(mapInfo);
534533
});
534+
535+
it('layerdatas', (done) => {
536+
spyOn(FetchRequest, 'get').and.callFake((url) => {
537+
if (url.indexOf('map.json') > -1) {
538+
return Promise.resolve(new Response(apstudioWebMap_layerData));
539+
} else if (url.indexOf('617580084.json') > -1) {
540+
return Promise.resolve(new Response(msProjectINfo_layerData));
541+
} else if (url.indexOf('/sprite') > -1) {
542+
return Promise.resolve(new Response(msSpriteInfo));
543+
}
544+
return Promise.resolve();
545+
});
546+
mapstudioWebmap = new WebMap(id, {
547+
server: server
548+
});
549+
550+
mapstudioWebmap.on('addlayerssucceeded', ({ map }) => {
551+
expect(map).not.toBeUndefined();
552+
expect(mapstudioWebmap.map).toEqual(map);
553+
const style = map.getStyle();
554+
const webMapV3 = mapstudioWebmap._getWebMapInstance();
555+
const mapInfo = JSON.parse(apstudioWebMap_layerData);
556+
expect(style.layers.length).toBe(mapInfo.layers.length);
557+
const appreciableLayers = webMapV3.getAppreciableLayers();
558+
const layerList = webMapV3.getLayerCatalog();
559+
expect(layerList.length).toBe(4);
560+
expect(appreciableLayers.length).toBe(4);
561+
expect(
562+
appreciableLayers.some(
563+
(item) =>
564+
item.id === '北京市轨道交通线路-打印(1)' &&
565+
item.dataSource.type === 'STRUCTURE_DATA' &&
566+
item.dataSource.serverId === '720626591'
567+
)
568+
).toBeTruthy();
569+
expect(
570+
appreciableLayers.some((item) => item.id === 'Buildings_R_3857@Buildings' && item.dataSource.type === void 0)
571+
).toBeTruthy();
572+
expect(
573+
appreciableLayers.some(
574+
(item) =>
575+
item.id === 'ms_New_LINE_1718091329989_7' &&
576+
item.dataSource.type === 'REST_DATA' &&
577+
item.dataSource.url === 'http://172.16.14.44:8090/iserver/services/data-Building/rest/data' &&
578+
item.dataSource.serverId === void 0
579+
)
580+
).toBeTruthy();
581+
expect(
582+
appreciableLayers.some((item) => item.id === 'CHINA_DARK' && !Object.keys(item.dataSource).length)
583+
).toBeTruthy();
584+
done();
585+
});
586+
});
535587
});

test/resources/WebMapV3.js

Lines changed: 190 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1033,7 +1033,7 @@ var msProjectINfo_L7Layers = JSON.stringify({
10331033
layers: [],
10341034
id: 617580084,
10351035
searchSetting: null,
1036-
thumbnail: 'http://172.16.15.94:8190/iportal/web/static/portal/img/map/defaultThumbnail.png',
1036+
thumbnail: 'http://localhost:8190/iportal/web/static/portal/img/map/defaultThumbnail.png',
10371037
level: 8,
10381038
center: {
10391039
x: 117.5037798870834,
@@ -1192,7 +1192,7 @@ var mapstudioWebMap_L7Layers = JSON.stringify({
11921192
zoom: 8.072381924882253,
11931193
glyphs: {},
11941194
version: '3.2.0',
1195-
rootUrl: 'http://172.16.15.94:8190/iportal/',
1195+
rootUrl: 'http://localhost:8190/iportal/',
11961196
maxzoom: 12,
11971197
name: 'ms-动画图例_副本',
11981198
viewExtent: [112.58411053622409, 44.15082666388613, 122.42344923794698, 38.941422828756544],
@@ -1806,3 +1806,191 @@ var RESTDATA_FEATURES_RES = JSON.stringify({
18061806
}
18071807
]
18081808
});
1809+
1810+
var apstudioWebMap_layerData = JSON.stringify({
1811+
metadata: {
1812+
layerCatalog: [
1813+
{
1814+
visible: true,
1815+
id: '北京市轨道交通线路-打印(1)',
1816+
title: '北京市轨道交通线路-打印(1)',
1817+
type: 'basic'
1818+
},
1819+
{
1820+
visible: true,
1821+
id: 'Buildings_R_3857@Buildings',
1822+
title: 'Buildings_R_3857@Buildings',
1823+
type: 'basic'
1824+
},
1825+
{
1826+
visible: true,
1827+
id: 'ms_New_LINE_1718091329989_7',
1828+
title: 'New_LINE',
1829+
type: 'basic'
1830+
},
1831+
{
1832+
visible: true,
1833+
id: 'CHINA_DARK',
1834+
title: '中国暗色地图',
1835+
type: 'basic'
1836+
}
1837+
]
1838+
},
1839+
sources: {
1840+
ms_1718091533292_9_1718091533294_10: {
1841+
tiles: [
1842+
'http://localhost:8090/iserver/services/map-Building/rest/maps/Buildings_R_3857%40Buildings/tileimage.png?scale={scale}&x={x}&y={y}&width={width}&height={height}&transparent=true&redirect=false&cacheEnabled=true&origin=%7B%22x%22%3A-20037508.342789244%2C%22y%22%3A20037508.342789244%7D'
1843+
],
1844+
tileSize: 256,
1845+
bounds: [0, 0, 0, 0],
1846+
type: 'raster'
1847+
},
1848+
CHINA_DARK: {
1849+
tiles: [
1850+
'https://maptiles.supermapol.com/iserver/services/map_China/rest/maps/China_Dark/tileimage.png?scale={scale}&x={x}&y={y}&width={width}&height={height}&transparent=true&redirect=false&cacheEnabled=true'
1851+
],
1852+
tileSize: 256,
1853+
attribution: '',
1854+
bounds: [-180, -90, 180, 90],
1855+
type: 'raster'
1856+
},
1857+
ms_720626591_1718099782613_8: {
1858+
tiles: [
1859+
'http://localhost:8080/iportal/web/datas/720626591/structureddata/tiles/{z}/{x}/{y}.mvt?epsgCode=3857&returnedFieldNames=%5B%22smpid%22%2C%22SmID%22%2C%22%E6%A0%87%E5%87%86%E5%90%8D%E7%A7%B0%22%5D&geometryFieldName=geometry'
1860+
],
1861+
bounds: [116.10214436813241, 39.6703694682177, 116.68907341874268, 40.20693349910421],
1862+
type: 'vector'
1863+
},
1864+
ms_New_LINE_ms_datasetId_1718091328992_4_1718091329990_8: {
1865+
tiles: [
1866+
'http://172.16.14.44:8090/iserver/services/data-Building/rest/data/datasources/newBuilding/datasets/New_LINE/tileFeature.mvt?returnAttributes=true&width=512&height=512&x={x}&y={y}&scale={scale}&origin=%7B%22x%22%3A-20037508.3427892%2C%22y%22%3A20037508.3427892%7D'
1867+
],
1868+
bounds: [106.44543352643626, 29.46270920536568, 106.51524799939585, 29.515272642718454],
1869+
type: 'vector'
1870+
}
1871+
},
1872+
crs: 'EPSG:3857',
1873+
center: [116.39560889343761, 39.939177386003514],
1874+
zoom: 9.789811175067591,
1875+
glyphs: {},
1876+
version: '3.2.1',
1877+
rootUrl: 'http://localhost:8080/iportal/',
1878+
maxzoom: 12,
1879+
name: 'ms_restdata_dataset',
1880+
viewExtent: [116.0580149440603, 40.20693349910433, 116.73320284281802, 39.67036946821758],
1881+
layers: [
1882+
{
1883+
maxzoom: 12,
1884+
id: 'CHINA_DARK',
1885+
source: 'CHINA_DARK',
1886+
type: 'raster',
1887+
minzoom: 0
1888+
},
1889+
{
1890+
metadata: {},
1891+
paint: {
1892+
'line-width': 2,
1893+
'line-color': '#4CC8A3'
1894+
},
1895+
id: 'ms_New_LINE_1718091329989_7',
1896+
source: 'ms_New_LINE_ms_datasetId_1718091328992_4_1718091329990_8',
1897+
'source-layer': 'New_LINE@newBuilding',
1898+
type: 'line'
1899+
},
1900+
{
1901+
layout: {
1902+
visibility: 'visible'
1903+
},
1904+
metadata: {},
1905+
id: 'Buildings_R_3857@Buildings',
1906+
source: 'ms_1718091533292_9_1718091533294_10',
1907+
type: 'raster'
1908+
},
1909+
{
1910+
metadata: {},
1911+
maxzoom: 24,
1912+
paint: {
1913+
'line-width': 2,
1914+
'line-color': '#4CC8A3'
1915+
},
1916+
id: '北京市轨道交通线路-打印(1)',
1917+
source: 'ms_720626591_1718099782613_8',
1918+
'source-layer': '720626591$geometry',
1919+
type: 'line',
1920+
minzoom: 0
1921+
}
1922+
],
1923+
pitch: 0,
1924+
minzoom: 0
1925+
});
1926+
1927+
var msProjectINfo_layerData = JSON.stringify({
1928+
extent: {
1929+
top: 39.67036946821758,
1930+
left: 116.0580149440603,
1931+
bottom: 40.20693349910433,
1932+
leftBottom: {
1933+
x: 116.0580149440603,
1934+
y: 40.20693349910433
1935+
},
1936+
right: 116.73320284281802,
1937+
rightTop: {
1938+
x: 116.73320284281802,
1939+
y: 39.67036946821758
1940+
}
1941+
},
1942+
controls: null,
1943+
extentString:
1944+
'{"top":39.67036946821758,"left":116.0580149440603,"bottom":40.20693349910433,"leftBottom":{"x":116.0580149440603,"y":40.20693349910433},"right":116.73320284281802,"rightTop":{"x":116.73320284281802,"y":39.67036946821758}}',
1945+
description: '',
1946+
verifyReason: null,
1947+
units: null,
1948+
title: 'ms_restdata_dataset',
1949+
resolution: 0,
1950+
checkStatus: 'SUCCESSFUL',
1951+
projectInfo:
1952+
'{"catalogs":[{"visualization":{"renderer":[{"lineDasharray":{"type":"simple","value":[1,0]},"color":{"type":"simple","value":"#4CC8A3"},"lineTranslateAnchor":{"type":"simple","value":"map"},"lineMiterLimit":{"type":"simple","value":2},"lineOffset":{"type":"simple","value":0},"lineJoin":{"type":"simple","value":"miter"},"lineRoundLimit":{"type":"simple","value":1.05},"lineTranslate":{"type":"simple","value":[0,0]},"lineGapWidth":{"type":"simple","value":0},"symbolsContent":{"type":"simple","value":{"symbolId":"line-0","style":{"paint":{"line-width":2,"line-color":"#4CC8A3"}}}},"lineCap":{"type":"simple","value":"butt"},"width":{"type":"simple","value":2},"opacity":{"type":"simple","value":1}}]},"visible":true,"catalogType":"layer","msDatasetId":"ms_datasetId_1718099782604_6","bounds":[116.10214436813241,39.6703694682177,116.68907341874268,40.20693349910421],"id":"北京市轨道交通线路-打印(1)","popupInfo":{"elements":[{"fieldName":"smpid","type":"FIELD"},{"fieldName":"SmID","type":"FIELD"},{"fieldName":"标准名称","type":"FIELD"},{"fieldName":"geometry","type":"FIELD"}],"title":"北京市轨道交通线路-打印(1)"},"title":"北京市轨道交通线路-打印(1)","layerSourceType":"Data"},{"visible":true,"catalogType":"layer","id":"Buildings_R_3857@Buildings","title":"Buildings_R_3857@Buildings","layerSourceType":"TileService"},{"visualization":{"renderer":[{"lineDasharray":{"type":"simple","value":[1,0]},"color":{"type":"simple","value":"#4CC8A3"},"lineTranslateAnchor":{"type":"simple","value":"map"},"lineMiterLimit":{"type":"simple","value":2},"lineOffset":{"type":"simple","value":0},"lineJoin":{"type":"simple","value":"miter"},"lineRoundLimit":{"type":"simple","value":1.05},"lineTranslate":{"type":"simple","value":[0,0]},"styleRenderMode":"mapboxgl","symbolsContent":{"type":"simple","value":{"symbolId":"line-0","style":{"paint":{"line-width":2,"line-color":"#4CC8A3"}}}},"lineGapWidth":{"type":"simple","value":0},"lineCap":{"type":"simple","value":"butt"},"width":{"type":"simple","value":2},"opacity":{"type":"simple","value":1}}]},"catalogType":"layer","msDatasetId":"ms_datasetId_1718091328992_4","bounds":[106.44543352643626,29.46270920536568,106.51524799939585,29.515272642718454],"id":"ms_New_LINE_1718091329989_7","popupInfo":{"elements":[{"fieldName":"SmID","type":"FIELD"},{"fieldName":"SmLength","type":"FIELD"},{"fieldName":"SmTopoError","type":"FIELD"},{"fieldName":"SmGeoParam","type":"FIELD"},{"fieldName":"SmGeometry","type":"FIELD"},{"fieldName":"SmUserID","type":"FIELD"},{"fieldName":"Field_SmUserID","type":"FIELD"},{"fieldName":"Name","type":"FIELD"},{"fieldName":"VIDEO","type":"FIELD"},{"fieldName":"IMG","type":"FIELD"}],"title":"New_LINE"},"title":"New_LINE","layerSourceType":"DataService"}],"datas":[{"sourceType":"REST_DATA","datasets":[{"datasetTitle":"New_LINE","msDatasetId":"ms_datasetId_1718091328992_4","datasetName":"New_LINE"}],"title":"newBuilding","url":"http://172.16.14.44:8090/iserver/services/data-Building/rest/data/datasources/newBuilding"},{"sourceType":"STRUCTURE_DATA","datasets":[{"datasetTitle":"北京市轨道交通线路-打印(1)","msDatasetId":"ms_datasetId_1718099782604_6","datasetId":"720626591","geometryField":"geometry"}],"title":"北京市轨道交通线路-打印(1)"}],"baseLayer":{"internetMapName":"CHINA_DARK","type":"INTERNET_MAP"},"version":"3.0.4"}',
1953+
visitCount: 11,
1954+
centerString: '{"x":116.39560889343761,"y":39.939177386003514}',
1955+
epsgCode: 3857,
1956+
nickname: 'admin_123',
1957+
layers: null,
1958+
id: 617580084,
1959+
searchSetting: null,
1960+
thumbnail: 'http://localhost:8080/iportal/resources/thumbnail/map/map1093493210.png',
1961+
level: 9,
1962+
center: {
1963+
x: 116.39560889343761,
1964+
y: 39.939177386003514
1965+
},
1966+
authorizeSetting: [
1967+
{
1968+
permissionType: 'DELETE',
1969+
aliasName: 'admin_123',
1970+
entityRoles: ['ADMIN', 'SYSTEM'],
1971+
entityType: 'USER',
1972+
entityName: 'admin_123',
1973+
entityId: null
1974+
},
1975+
{
1976+
permissionType: 'READWRITE',
1977+
aliasName: 'GUEST',
1978+
entityRoles: [],
1979+
entityType: 'USER',
1980+
entityName: 'GUEST',
1981+
entityId: null
1982+
}
1983+
],
1984+
updateTime: 1718099788134,
1985+
userName: 'admin_123',
1986+
tags: [],
1987+
checkUser: null,
1988+
checkUserNick: null,
1989+
checkTime: null,
1990+
sourceType: 'MAPSTUDIO',
1991+
createTime: 1718091348865,
1992+
controlsString: '',
1993+
isDefaultBottomMap: false,
1994+
status: null,
1995+
favoriteCount: 0
1996+
});

0 commit comments

Comments
 (0)