mirror of https://gitee.com/antv-l7/antv-l7
feat: mvt 实现getCustomdata 方法 (#1591)
This commit is contained in:
parent
54c43d6dd4
commit
149835878b
|
@ -16,13 +16,20 @@ export default () => {
|
||||||
});
|
});
|
||||||
|
|
||||||
const source = new Source(
|
const source = new Source(
|
||||||
'https://pre-gridwise.alibaba-inc.com/tile/test?z={z}&x={x}&y={y}',
|
'https://gridwise.alibaba-inc.com/tile/test?z={z}&x={x}&y={y}',
|
||||||
{
|
{
|
||||||
parser: {
|
parser: {
|
||||||
type: 'mvt',
|
type: 'mvt',
|
||||||
tileSize: 256,
|
tileSize: 256,
|
||||||
// minZoom: 9,
|
getCustomData:(tile, cb)=>{
|
||||||
|
const url = `https://gridwise.alibaba-inc.com/tile/test?z=${tile.z}&x=${tile.x}&y=${tile.y}`;
|
||||||
|
fetch(url).then(res=>res.arrayBuffer()).then((data)=>{
|
||||||
|
cb(null,data)
|
||||||
|
}
|
||||||
|
)
|
||||||
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
},
|
},
|
||||||
);
|
);
|
||||||
|
|
||||||
|
|
|
@ -38,6 +38,21 @@ L7 加载矢量瓦片地图的时候需要在 `source` 中对瓦片服务进行
|
||||||
<description> _number[]_ **可选** 不限制:\_ </description>
|
<description> _number[]_ **可选** 不限制:\_ </description>
|
||||||
地图显示范围
|
地图显示范围
|
||||||
|
|
||||||
|
### getCustomData `(tile: { x: number, y: number, z: number }, callback: (err: any, data: any) => void) => void,`
|
||||||
|
|
||||||
|
<description> \_\_ **可选**</description>
|
||||||
|
|
||||||
|
callback 参数
|
||||||
|
|
||||||
|
- err 数据返回时
|
||||||
|
- data arrarybuffer 类型, pbf
|
||||||
|
|
||||||
|
自定义瓦片数据获取方法,试用业务场景需要数据鉴权,或者特殊处理的场景
|
||||||
|
|
||||||
|
## 示例
|
||||||
|
|
||||||
|
### 通用
|
||||||
|
|
||||||
```javascript
|
```javascript
|
||||||
const tileSource = new Source(
|
const tileSource = new Source(
|
||||||
'http://localhost:3000/zhejiang.mbtiles/{z}/{x}/{y}.pbf',
|
'http://localhost:3000/zhejiang.mbtiles/{z}/{x}/{y}.pbf',
|
||||||
|
@ -52,3 +67,25 @@ const tileSource = new Source(
|
||||||
},
|
},
|
||||||
);
|
);
|
||||||
```
|
```
|
||||||
|
|
||||||
|
### 自定义方法
|
||||||
|
|
||||||
|
```javascript
|
||||||
|
const source = new Source(
|
||||||
|
'https://gridwise.alibaba-inc.com/tile/test?z={z}&x={x}&y={y}',
|
||||||
|
{
|
||||||
|
parser: {
|
||||||
|
type: 'mvt',
|
||||||
|
tileSize: 256,
|
||||||
|
getCustomData: (tile, cb) => {
|
||||||
|
const url = `https://gridwise.alibaba-inc.com/tile/test?z=${tile.z}&x=${tile.x}&y=${tile.y}`;
|
||||||
|
fetch(url)
|
||||||
|
.then((res) => res.arrayBuffer())
|
||||||
|
.then((data) => {
|
||||||
|
cb(null, data);
|
||||||
|
});
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
);
|
||||||
|
```
|
||||||
|
|
|
@ -29,27 +29,43 @@ const getVectorTile = async (
|
||||||
tileParams: TileLoadParams,
|
tileParams: TileLoadParams,
|
||||||
tile: SourceTile,
|
tile: SourceTile,
|
||||||
requestParameters?: Partial<RequestParameters>,
|
requestParameters?: Partial<RequestParameters>,
|
||||||
|
getCustomData?: ITileParserCFG['getCustomData'],
|
||||||
): Promise<ITileSource | undefined> => {
|
): Promise<ITileSource | undefined> => {
|
||||||
const tileUrl = getURLFromTemplate(url, tileParams);
|
const tileUrl = getURLFromTemplate(url, tileParams);
|
||||||
return new Promise((resolve) => {
|
return new Promise((resolve) => {
|
||||||
const xhr = getArrayBuffer(
|
if (getCustomData) {
|
||||||
{
|
getCustomData(
|
||||||
...requestParameters,
|
{
|
||||||
url: tileUrl,
|
x: tile.x,
|
||||||
},
|
y: tile.y,
|
||||||
(err, data) => {
|
z: tile.z,
|
||||||
if (err || !data) {
|
},
|
||||||
resolve(undefined);
|
(err, data) => {
|
||||||
} else {
|
if (err || !data) {
|
||||||
const vectorSource = new VectorSource(data, tile.x, tile.y, tile.z);
|
resolve(undefined);
|
||||||
// const vectorTile = new VectorTile(
|
} else {
|
||||||
// new Protobuf(data),
|
const vectorSource = new VectorSource(data, tile.x, tile.y, tile.z);
|
||||||
// ) as MapboxVectorTile;
|
resolve(vectorSource);
|
||||||
resolve(vectorSource);
|
}
|
||||||
}
|
},
|
||||||
},
|
);
|
||||||
);
|
} else {
|
||||||
tile.xhrCancel = () => xhr.abort();
|
const xhr = getArrayBuffer(
|
||||||
|
{
|
||||||
|
...requestParameters,
|
||||||
|
url: tileUrl,
|
||||||
|
},
|
||||||
|
(err, data) => {
|
||||||
|
if (err || !data) {
|
||||||
|
resolve(undefined);
|
||||||
|
} else {
|
||||||
|
const vectorSource = new VectorSource(data, tile.x, tile.y, tile.z);
|
||||||
|
resolve(vectorSource);
|
||||||
|
}
|
||||||
|
},
|
||||||
|
);
|
||||||
|
tile.xhrCancel = () => xhr.abort();
|
||||||
|
}
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -59,9 +75,14 @@ export default function mapboxVectorTile(
|
||||||
): IParserData {
|
): IParserData {
|
||||||
// TODO: 后续考虑支持多服务
|
// TODO: 后续考虑支持多服务
|
||||||
const url = Array.isArray(data) ? data[0] : data;
|
const url = Array.isArray(data) ? data[0] : data;
|
||||||
|
|
||||||
const getTileData = (tileParams: TileLoadParams, tile: SourceTile) =>
|
const getTileData = (tileParams: TileLoadParams, tile: SourceTile) =>
|
||||||
getVectorTile(url, tileParams, tile, cfg?.requestParameters);
|
getVectorTile(
|
||||||
|
url,
|
||||||
|
tileParams,
|
||||||
|
tile,
|
||||||
|
cfg?.requestParameters,
|
||||||
|
cfg?.getCustomData,
|
||||||
|
);
|
||||||
|
|
||||||
const tilesetOptions = {
|
const tilesetOptions = {
|
||||||
...DEFAULT_CONFIG,
|
...DEFAULT_CONFIG,
|
||||||
|
|
Loading…
Reference in New Issue