Skip to content

Commit aba1bf5

Browse files
[feature]webmap对接webmercator全球剖分瓦片 by qiw
1 parent 5c4313b commit aba1bf5

File tree

7 files changed

+110
-0
lines changed

7 files changed

+110
-0
lines changed

src/common/mapping/WebMapService.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -657,6 +657,7 @@ export class WebMapService {
657657
let type;
658658
let isHosted = (dataSource && dataSource.serverId) || layerType === 'MARKER' || layerType === 'HOSTED_TILE';
659659
let isTile =
660+
layerType === 'ZXY_TILE' ||
660661
layerType === 'SUPERMAP_REST' ||
661662
layerType === 'TILE' ||
662663
layerType === 'WMS' ||

src/common/mapping/WebMapV2.js

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -403,6 +403,9 @@ export function createWebMapV2Extending(SuperClass, { MapManager, mapRepo }) {
403403
case 'TILE':
404404
this._createDynamicTiledLayer(layerInfo, addedCallback);
405405
break;
406+
case 'ZXY_TILE':
407+
this._createZXYLayer(layerInfo, addedCallback);
408+
break;
406409
case 'CLOUD':
407410
case 'XYZ':
408411
url = mapUrls[layerInfo.layerType]
@@ -442,6 +445,7 @@ export function createWebMapV2Extending(SuperClass, { MapManager, mapRepo }) {
442445
layer.minzoom = Math.max(this._transformScaleToZoom(minScale, crs), 0);
443446
layer.maxzoom = Math.min(24, this._transformScaleToZoom(maxScale, crs) + 0.0000001);
444447
}
448+
console.log('_initOverlayLayers')
445449

446450
if (type === 'tile') {
447451
if (layer.autoUpdateTime) {
@@ -705,6 +709,14 @@ export function createWebMapV2Extending(SuperClass, { MapManager, mapRepo }) {
705709
addedCallback && addedCallback();
706710
}
707711

712+
_createZXYLayer(layerInfo, addedCallback) {
713+
const { url, subdomains, layerID, name, visible } = layerInfo;
714+
const urls = (subdomains && subdomains.length) ? subdomains.map(item => url.replace('{s}', item)) : [url];
715+
const layerId = layerID || name;
716+
this._addBaselayer({ url: urls, layerID: layerId, visibility: visible });
717+
addedCallback && addedCallback();
718+
}
719+
708720
_createDynamicTiledLayer(layerInfo, addedCallback) {
709721
const url = layerInfo.url;
710722
const layerId = layerInfo.layerID || layerInfo.name;

src/openlayers/mapping/WebMap.js

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -968,6 +968,9 @@ export class WebMap extends Observable {
968968
case 'SUPERMAP_REST':
969969
source = that.createDynamicTiledSource(layerInfo, isBaseLayer);
970970
break;
971+
case 'ZXY_TILE':
972+
source = this.createXYZTileSource(layerInfo);
973+
break;
971974
case 'CLOUD':
972975
case 'CLOUD_BLACK':
973976
case 'OSM':
@@ -1321,6 +1324,25 @@ export class WebMap extends Observable {
13211324
});
13221325
}
13231326

1327+
/**
1328+
* @private
1329+
* @function WebMap.prototype.createXYZTileSource
1330+
* @description 创建图层的XYZTilesource。
1331+
* @param {Object} layerInfo - 图层信息
1332+
* @returns {ol.source.XYZ} xyz的source
1333+
*/
1334+
createXYZTileSource(layerInfo) {
1335+
const { url, subdomains } = layerInfo;
1336+
const urls = (subdomains && subdomains.length) ? subdomains.map(item => url.replace('{s}', item)) : [url];
1337+
const tileGrid = TileSuperMapRest.createTileGrid([-20037508.3427892, -20037508.3427892, 20037508.3427892, 20037508.3427892]);
1338+
return new XYZ({
1339+
urls,
1340+
wrapX: false,
1341+
crossOrigin: 'anonymous',
1342+
tileGrid
1343+
});
1344+
}
1345+
13241346
/**
13251347
* @private
13261348
* @function WebMap.prototype.createWMSSource
@@ -2107,6 +2129,10 @@ export class WebMap extends Observable {
21072129
that.errorCallback && that.errorCallback(e, 'getFeatureFaild', that.map);
21082130
}
21092131
);
2132+
} else if (layer.layerType === 'ZXY_TILE') {
2133+
that.map.addLayer(that.createBaseLayer(layer, layerIndex));
2134+
that.layerAdded++;
2135+
that.sendMapToUser(len);
21102136
}
21112137
}
21122138
}

test/common/mapping/WebMapServiceSpec.js

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -179,6 +179,23 @@ describe('WebMapServiceSpec.js', () => {
179179
});
180180
});
181181

182+
xit('getsourcetype zxytile', done => {
183+
const options = {
184+
...options,
185+
serverUrl: 'https://fakeiportal.supermap.io/iportal/' // 没有通过处理在末尾加 '/',在此处理
186+
};
187+
spyOn(FetchRequest, 'get').and.callFake((url) => {
188+
if (url.indexOf('map.json') > -1) {
189+
return Promise.resolve(mapJson);
190+
}
191+
return Promise.resolve(new Response(JSON.stringify(iportal_serviceProxy)));
192+
});
193+
const service = new WebMapService(mapId, options);
194+
const res = service.getDatasourceType({layerType: 'ZXY_TILE'});
195+
expect(res).toBe('tile');
196+
done()
197+
});
198+
182199
it('get the wrong iPortal service proxy', (done) => {
183200
const options = {
184201
...options,

test/mapboxgl/mapping/WebMapV2Spec.js

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1522,6 +1522,36 @@ describe('mapboxgl_WebMapV2', () => {
15221522
});
15231523
});
15241524

1525+
it('add zxytile layer', (done) => {
1526+
spyOn(FetchRequest, 'get').and.callFake((url) => {
1527+
if (url.indexOf('portal.json') > -1) {
1528+
return Promise.resolve(new Response(JSON.stringify(iportal_serviceProxy)));
1529+
} else if (url.indexOf('/map.json') > -1) {
1530+
return Promise.resolve(new Response(datavizWebmap_ZXYTILE));
1531+
}
1532+
return Promise.resolve();
1533+
});
1534+
datavizWebmap = new WebMap(
1535+
'test',
1536+
{
1537+
target: 'map',
1538+
serverUrl: 'http://fake/fakeiportal',
1539+
withCredentials: false
1540+
},
1541+
{
1542+
style: {
1543+
version: 8,
1544+
sources: {},
1545+
layers: []
1546+
}
1547+
}
1548+
);
1549+
datavizWebmap.on('mapcreatesucceeded', ({ layers }) => {
1550+
expect(layers.length).toBe(2);
1551+
done();
1552+
});
1553+
});
1554+
15251555
it('isvj-5215', (done) => {
15261556
spyOn(FetchRequest, 'get').and.callFake((url) => {
15271557
if (url.indexOf('portal.json') > -1) {

test/openlayers/mapping/WebMapSpec.js

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -184,6 +184,28 @@ describe('openlayers_WebMap', () => {
184184
}
185185
});
186186

187+
it('initialize_ZXYtILE', (done) => {
188+
let options = {
189+
server: server,
190+
successCallback,
191+
errorCallback: function () { }
192+
};
193+
spyOn(FetchRequest, 'get').and.callFake((url) => {
194+
if (url.indexOf('map.json') > -1) {
195+
var mapJson = datavizWebmap_ZXYTILE;
196+
return Promise.resolve(new Response(mapJson));
197+
}
198+
return Promise.resolve();
199+
});
200+
var datavizWebmap = new WebMap(id, options);
201+
202+
function successCallback() {
203+
expect(datavizWebmap.mapParams.title).toBe('xyz');
204+
// expect(datavizWebmap.layerAdded).toBe(2);
205+
done();
206+
}
207+
});
208+
187209
it('jsonsql', (done) => {
188210
let options = {
189211
server: server,

test/resources/WebMapV5.js

Lines changed: 2 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy