From d95e7829c99083de0b411ef2aa952287981a0734 Mon Sep 17 00:00:00 2001 From: "kip.song" Date: Fri, 27 Oct 2023 09:39:57 +0800 Subject: [PATCH 1/2] feat: add tile_json_parser --- dev-demos/bugs/scene/demos/bmap.tsx | 42 +++++----- packages/source/src/index.ts | 2 + packages/source/src/parser/jsonTile.ts | 109 +++++++++++++++++++++++++ packages/utils/src/ajax.ts | 7 ++ 4 files changed, 139 insertions(+), 21 deletions(-) create mode 100644 packages/source/src/parser/jsonTile.ts diff --git a/dev-demos/bugs/scene/demos/bmap.tsx b/dev-demos/bugs/scene/demos/bmap.tsx index dc3adbb5fb..f9241ff9e9 100644 --- a/dev-demos/bugs/scene/demos/bmap.tsx +++ b/dev-demos/bugs/scene/demos/bmap.tsx @@ -1,5 +1,5 @@ -import { Map, BMap,Scene, ExportImage, PointLayer } from "@antv/l7"; -import React, { useState } from "react"; +import { BaiduMap, Scene, PointLayer } from "@antv/l7"; +import React from "react"; // tslint:disable-next-line:no-duplicate-imports import { FunctionComponent, useEffect } from "react"; @@ -12,14 +12,14 @@ const Demo: FunctionComponent = () => { var marker1 = new BMapGL.Marker(new BMapGL.Point(116.404, 39.925)); bmap.addOverlay(marker1); - console.log('getRotation',bmap) + console.log('getRotation', bmap) const newScene = new Scene({ id: "map", - map:new BMap({mapInstance:bmap}) + map: new BaiduMap({ mapInstance: bmap }) }); newScene.on("loaded", () => { - + fetch( "https://gw.alipayobjects.com/os/basement_prod/d3564b06-670f-46ea-8edb-842f7010a7c6.json" ) @@ -29,15 +29,15 @@ const Demo: FunctionComponent = () => { autoFit: false }) .source([{ - x:116.404, - y:39.925 + x: 116.404, + y: 39.925 - }],{ - parser:{ - type:'json', - x:'x', - y:'y' - } + }], { + parser: { + type: 'json', + x: 'x', + y: 'y' + } }) .shape("circle") .size(10) @@ -56,14 +56,14 @@ const Demo: FunctionComponent = () => { }, []); return ( - -
+ +
); }; diff --git a/packages/source/src/index.ts b/packages/source/src/index.ts index f13fc95451..dd6731c599 100644 --- a/packages/source/src/index.ts +++ b/packages/source/src/index.ts @@ -9,6 +9,7 @@ import raster from './parser/raster'; import rasterTile, { rasterDataTypes } from './parser/raster-tile'; import rasterRgb from './parser/rasterRgb'; import testTile from './parser/testTile'; +import jsonTile from './parser/jsonTile'; import Source from './source'; import { cluster } from './transform/cluster'; import { filter } from './transform/filter'; @@ -31,6 +32,7 @@ registerParser('mvt', mapboxVectorTile); registerParser('geojsonvt', geojsonVTTile); registerParser('testTile', testTile); registerParser('geojson', geojson); +registerParser('jsonTile', jsonTile); registerParser('image', image); registerParser('csv', csv); registerParser('json', json); diff --git a/packages/source/src/parser/jsonTile.ts b/packages/source/src/parser/jsonTile.ts new file mode 100644 index 0000000000..236b427416 --- /dev/null +++ b/packages/source/src/parser/jsonTile.ts @@ -0,0 +1,109 @@ +import { + RequestParameters, + SourceTile, + TileLoadParams, + getData, + getURLFromTemplate, +} from '@antv/l7-utils'; +import { + Feature, +} from '@turf/helpers'; +import { IParserData, ITileSource } from '../interface'; +import VtSource from '../source/geojsonvt'; + +import { ITileParserCFG } from '@antv/l7-core'; + +export type MapboxVectorTile = { + layers: { [key: string]: { features: Feature[] } }; +}; + +const getVectorTile = async ( + url: string, + tile: SourceTile, + requestParameters?: Partial, + getCustomData?: ITileParserCFG['getCustomData'], +): Promise => { + const tileUrl = getURLFromTemplate(url, { x: tile.x, y: tile.y, z: tile.z }); + return new Promise((resolve) => { + if (getCustomData) { + getCustomData( + { + x: tile.x, + y: tile.y, + z: tile.z, + }, + (err, data) => { + if (err || !data) { + const vectorTile: MapboxVectorTile = { + layers: { + defaultLayer: { + features: [], + }, + }, + }; + const vectorSource = new VtSource(vectorTile, tile.x, tile.y, tile.z); + resolve(vectorSource); + } else { + const vectorTile: MapboxVectorTile = { + layers: { + defaultLayer: { + features: data.features, + }, + }, + }; + const vectorSource = new VtSource(vectorTile, tile.x, tile.y, tile.z); + resolve(vectorSource); + } + }, + ); + } else { + getData( + { + ...requestParameters, + url: tileUrl, + }, + (err, data) => { + if (err || !data) { + const vectorTile: MapboxVectorTile = { + layers: { + defaultLayer: { + features: [], + }, + }, + }; + const vectorSource = new VtSource(vectorTile, tile.x, tile.y, tile.z); + resolve(vectorSource); + } else { + const json = JSON.parse(data) + const vectorTile: MapboxVectorTile = { + layers: { + defaultLayer: { + features: json + }, + }, + }; + const vectorSource = new VtSource(vectorTile, tile.x, tile.y, tile.z); + resolve(vectorSource); + } + }, + ); + } + }); +}; + +export default function jsonTile(url: string, cfg: ITileParserCFG): IParserData { + const getTileData = (_tileParams: TileLoadParams, tile: SourceTile) => { + return getVectorTile(url, tile, cfg?.requestParameters, cfg.getCustomData); + }; + + const tilesetOptions = { + ...cfg, + getTileData, + }; + + return { + dataArray: [], + tilesetOptions, + isTile: true, + }; +} diff --git a/packages/utils/src/ajax.ts b/packages/utils/src/ajax.ts index 1a73d3ec8c..5c4aff1636 100644 --- a/packages/utils/src/ajax.ts +++ b/packages/utils/src/ajax.ts @@ -190,6 +190,13 @@ export const postData = ( return makeRequest({ ...requestParameters, method: 'POST' }, callback); }; +export const getData = ( + requestParameters: RequestParameters, + callback: ResponseCallback, +) => { + return makeRequest({ ...requestParameters, method: 'GET' }, callback); +}; + export function sameOrigin(url: string) { const a = window.document.createElement('a'); a.href = url; From 596aa3a11a26b462a14eea0ce924cc208ddd2de0 Mon Sep 17 00:00:00 2001 From: "kip.song" Date: Fri, 27 Oct 2023 11:33:51 +0800 Subject: [PATCH 2/2] feat: update lint --- packages/source/src/index.ts | 2 +- packages/source/src/parser/jsonTile.ts | 81 +++++++++++++------------- 2 files changed, 40 insertions(+), 43 deletions(-) diff --git a/packages/source/src/index.ts b/packages/source/src/index.ts index dd6731c599..e0660d707a 100644 --- a/packages/source/src/index.ts +++ b/packages/source/src/index.ts @@ -4,12 +4,12 @@ import geojson from './parser/geojson'; import geojsonVTTile from './parser/geojsonvt'; import image from './parser/image'; import json from './parser/json'; +import jsonTile from './parser/jsonTile'; import mapboxVectorTile from './parser/mvt'; import raster from './parser/raster'; import rasterTile, { rasterDataTypes } from './parser/raster-tile'; import rasterRgb from './parser/rasterRgb'; import testTile from './parser/testTile'; -import jsonTile from './parser/jsonTile'; import Source from './source'; import { cluster } from './transform/cluster'; import { filter } from './transform/filter'; diff --git a/packages/source/src/parser/jsonTile.ts b/packages/source/src/parser/jsonTile.ts index 236b427416..79e6acbfe9 100644 --- a/packages/source/src/parser/jsonTile.ts +++ b/packages/source/src/parser/jsonTile.ts @@ -1,13 +1,11 @@ import { + getData, + getURLFromTemplate, RequestParameters, SourceTile, TileLoadParams, - getData, - getURLFromTemplate, } from '@antv/l7-utils'; -import { - Feature, -} from '@turf/helpers'; +import { Feature } from '@turf/helpers'; import { IParserData, ITileSource } from '../interface'; import VtSource from '../source/geojsonvt'; @@ -23,39 +21,25 @@ const getVectorTile = async ( requestParameters?: Partial, getCustomData?: ITileParserCFG['getCustomData'], ): Promise => { - const tileUrl = getURLFromTemplate(url, { x: tile.x, y: tile.y, z: tile.z }); + const params = { x: tile.x, y: tile.y, z: tile.z }; + const tileUrl = getURLFromTemplate(url, params); return new Promise((resolve) => { if (getCustomData) { - getCustomData( - { - x: tile.x, - y: tile.y, - z: tile.z, - }, - (err, data) => { - if (err || !data) { - const vectorTile: MapboxVectorTile = { - layers: { - defaultLayer: { - features: [], - }, - }, - }; - const vectorSource = new VtSource(vectorTile, tile.x, tile.y, tile.z); - resolve(vectorSource); - } else { - const vectorTile: MapboxVectorTile = { - layers: { - defaultLayer: { - features: data.features, - }, - }, - }; - const vectorSource = new VtSource(vectorTile, tile.x, tile.y, tile.z); - resolve(vectorSource); - } - }, - ); + getCustomData(params, (err, data) => { + if (err || !data) { + const vectorTile: MapboxVectorTile = { + layers: { defaultLayer: { features: [] } }, + }; + const vectorSource = new VtSource(vectorTile, tile.x, tile.y, tile.z); + resolve(vectorSource); + } else { + const vectorTile: MapboxVectorTile = { + layers: { defaultLayer: { features: data.features } }, + }; + const vectorSource = new VtSource(vectorTile, tile.x, tile.y, tile.z); + resolve(vectorSource); + } + }); } else { getData( { @@ -71,18 +55,28 @@ const getVectorTile = async ( }, }, }; - const vectorSource = new VtSource(vectorTile, tile.x, tile.y, tile.z); + const vectorSource = new VtSource( + vectorTile, + tile.x, + tile.y, + tile.z, + ); resolve(vectorSource); } else { - const json = JSON.parse(data) + const json = JSON.parse(data); const vectorTile: MapboxVectorTile = { layers: { defaultLayer: { - features: json + features: json, }, }, }; - const vectorSource = new VtSource(vectorTile, tile.x, tile.y, tile.z); + const vectorSource = new VtSource( + vectorTile, + tile.x, + tile.y, + tile.z, + ); resolve(vectorSource); } }, @@ -91,8 +85,11 @@ const getVectorTile = async ( }); }; -export default function jsonTile(url: string, cfg: ITileParserCFG): IParserData { - const getTileData = (_tileParams: TileLoadParams, tile: SourceTile) => { +export default function jsonTile( + url: string, + cfg: ITileParserCFG, +): IParserData { + const getTileData = (_: TileLoadParams, tile: SourceTile) => { return getVectorTile(url, tile, cfg?.requestParameters, cfg.getCustomData); };