fix(rewind):vector tile not rewind

This commit is contained in:
thinkinggis 2019-07-16 19:36:05 +08:00
parent 4e6ec5a2c4
commit 59a66e93a6
12 changed files with 31 additions and 17 deletions

View File

@ -17,7 +17,7 @@
<body> <body>
<div id="map"></div> <div id="map"></div>
<script src="https://webapi.amap.com/maps?v=1.4.8&key=15cd8a57710d40c9b7c0e3cc120f1200&plugin=Map3D"></script> <script src="https://webapi.amap.com/maps?v=1.4.15&key=15cd8a57710d40c9b7c0e3cc120f1200&plugin=Map3D"></script>
<script src="./assets/jquery-3.2.1.min.js"></script> <script src="./assets/jquery-3.2.1.min.js"></script>
<script src="./assets/dat.gui.min.js"></script> <script src="./assets/dat.gui.min.js"></script>
<script src="../build/L7.js"></script> <script src="../build/L7.js"></script>
@ -28,7 +28,7 @@ const scene = new L7.Scene({
mapStyle: 'light', // 样式URL mapStyle: 'light', // 样式URL
center: [104.838088,34.075889 ], center: [104.838088,34.075889 ],
pitch: 0, pitch: 0,
hash:true, hash:false,
zoom: 3, zoom: 3,
}); });

View File

@ -262,9 +262,6 @@ export default class Layer extends Base {
Util.assign(animateOptions, cfg); Util.assign(animateOptions, cfg);
this.set('animateOptions', animateOptions); this.set('animateOptions', animateOptions);
return this; return this;
}
texture() {
} }
fitBounds() { fitBounds() {
const extent = this.layerSource.data.extent; const extent = this.layerSource.data.extent;

View File

@ -27,7 +27,7 @@ export default class Scene extends Base {
_initEngine(mapContainer) { _initEngine(mapContainer) {
this._engine = new Engine(mapContainer, this); this._engine = new Engine(mapContainer, this);
this.registerMapEvent(); // this.registerMapEvent();
this._engine.run(); this._engine.run();
compileBuiltinModules(); compileBuiltinModules();
} }

View File

@ -1,6 +1,6 @@
import Base from '../core/base'; import Base from '../core/base';
import WorkerPool from '../worker/worker_pool'; import WorkerPool from '../worker/worker_pool';
import { throttle } from '@antv/util'; import throttle from '../util/throttle';
import { toLngLat, Bounds } from '@antv/geo-coord'; import { toLngLat, Bounds } from '@antv/geo-coord';
import SourceCache from '../source/source_cache'; import SourceCache from '../source/source_cache';
import WorkerController from '../worker/worker_controller'; import WorkerController from '../worker/worker_controller';
@ -66,13 +66,13 @@ export default class Style extends Base {
} }
addMapEvent() { addMapEvent() {
this.mapEventHander = () => { this.mapEventHander = throttle(() => {
requestAnimationFrame(() => { requestAnimationFrame(() => {
for (const key in this._sourceCaches) { for (const key in this._sourceCaches) {
this._sourceCaches[key].update(this.layers, this.sourceStyles[key]); this._sourceCaches[key].update(this.layers, this.sourceStyles[key]);
} }
}); });
}; }, 200);
this.scene.map.on('zoomchange', this.mapEventHander); this.scene.map.on('zoomchange', this.mapEventHander);
this.scene.map.on('dragend', this.mapEventHander); this.scene.map.on('dragend', this.mapEventHander);
} }

View File

@ -1,4 +1,5 @@
import 'three/src/polyfills.js'; import 'three/src/polyfills.js';
import { BufferAttribute } from 'three/src/core/BufferAttribute.js';
export * from 'three/src/constants.js'; export * from 'three/src/constants.js';
export { Scene } from 'three/src/scenes/Scene.js'; export { Scene } from 'three/src/scenes/Scene.js';
export { WebGLRenderer } from 'three/src/renderers/WebGLRenderer.js'; export { WebGLRenderer } from 'three/src/renderers/WebGLRenderer.js';
@ -30,7 +31,7 @@ export { DataTexture } from 'three/src/textures/DataTexture.js';
export { Color } from 'three/src/math/Color.js'; export { Color } from 'three/src/math/Color.js';
export { export {
Float64BufferAttribute, Float64BufferAttribute,
Float32BufferAttribute, // Float32BufferAttribute,
Uint32BufferAttribute, Uint32BufferAttribute,
Int32BufferAttribute, Int32BufferAttribute,
Uint16BufferAttribute, Uint16BufferAttribute,
@ -43,3 +44,11 @@ export {
export { InstancedBufferAttribute } from 'three/src/core/InstancedBufferAttribute' export { InstancedBufferAttribute } from 'three/src/core/InstancedBufferAttribute'
// export * from '../../build/three.js'; // export * from '../../build/three.js';
function Float32BufferAttribute( array, itemSize, normalized ) {
BufferAttribute.call( this, array, itemSize, normalized );
}
Float32BufferAttribute.prototype = Object.create( BufferAttribute.prototype );
Float32BufferAttribute.prototype.constructor = Float32BufferAttribute;
export { Float32BufferAttribute }

View File

@ -166,7 +166,7 @@ export default class BufferBase extends Base {
sizes: new Float32Array(polygon.sizes) sizes: new Float32Array(polygon.sizes)
}; };
polygon = {};
return attributes; return attributes;
} }
_toPointShapeAttributes(polygon) { _toPointShapeAttributes(polygon) {
@ -331,7 +331,7 @@ export default class BufferBase extends Base {
colors, colors,
pickingIds pickingIds
}; };
polygonline = {};
return attributes; return attributes;
} }
@ -363,6 +363,7 @@ export default class BufferBase extends Base {
pickingIds pickingIds
}; };
point = {};
return attributes; return attributes;
} }
_generateTexture() { _generateTexture() {

View File

@ -60,7 +60,7 @@ export default function extrudePolygon(points, extrude) {
} }
} }
} }
points = [];
return { return {
positions, positions,
faceUv, faceUv,
@ -100,6 +100,7 @@ export function extrudePolygonLine(points, extrude) {
} }
} }
} }
points = [];
return { return {
positions, positions,
positionsIndex: cells positionsIndex: cells

View File

@ -31,6 +31,7 @@ export default class VectorTileMesh {
this.layer.shape = this.layer._getShape(layerData); this.layer.shape = this.layer._getShape(layerData);
} }
this.mesh = getRender(this.layer.get('type'), this.layer.shape)(null, this.layer, data.attributes); this.mesh = getRender(this.layer.get('type'), this.layer.shape)(null, this.layer, data.attributes);
this.mesh.frustumCulled = false;
if (this.mesh.type !== 'composer') { // 热力图的情况 if (this.mesh.type !== 'composer') { // 热力图的情况
this.mesh.onBeforeRender = renderer => { this.mesh.onBeforeRender = renderer => {
this._renderMask(renderer); this._renderMask(renderer);
@ -86,7 +87,7 @@ export default class VectorTileMesh {
const br = [ tilebound.getBottomRight().x, tilebound.getBottomRight().y, 0 ]; const br = [ tilebound.getBottomRight().x, tilebound.getBottomRight().y, 0 ];
const tl = [ tilebound.getTopLeft().x, tilebound.getTopLeft().y, 0 ]; const tl = [ tilebound.getTopLeft().x, tilebound.getTopLeft().y, 0 ];
const tr = [ tilebound.getTopRight().x, tilebound.getTopRight().y, 0 ]; const tr = [ tilebound.getTopRight().x, tilebound.getTopRight().y, 0 ];
const positions = [ ...bl, ...tr, ...br, ...bl, ...tl, ...tr ]; const positions = new Float32Array([ ...bl, ...tr, ...br, ...bl, ...tl, ...tr ]);
const geometry = new THREE.BufferGeometry(); const geometry = new THREE.BufferGeometry();
geometry.addAttribute('position', new THREE.Float32BufferAttribute(positions, 3)); geometry.addAttribute('position', new THREE.Float32BufferAttribute(positions, 3));
const maskMaterial = new MaskMaterial(); const maskMaterial = new MaskMaterial();

View File

@ -3,7 +3,10 @@ import { getCoords } from '@turf/invariant';
import { djb2hash } from '../../util/bkdr-hash'; import { djb2hash } from '../../util/bkdr-hash';
import rewind from '@mapbox/geojson-rewind'; import rewind from '@mapbox/geojson-rewind';
export default function geoJSON(data, cfg) { export default function geoJSON(data, cfg) {
// 矢量瓦片图层不做 rewind
if (!cfg.hasOwnProperty('sourceLayer')) {
rewind(data, true); rewind(data, true);
}
const resultData = []; const resultData = [];
const featureKeys = {}; const featureKeys = {};
data.features = data.features.filter(item => { data.features = data.features.filter(item => {

View File

@ -88,7 +88,7 @@ export default class SouceCache extends Base {
_calculateTileIDs() { _calculateTileIDs() {
this._tileMap = {}; this._tileMap = {};
this.updateTileList = []; this.updateTileList = [];
const zoom = Math.floor(this.scene.getZoom()); // zoom - 1 const zoom = Math.floor(this.scene.getZoom()) - 1; // zoom - 1
const minSourceZoom = this.get('minZoom'); const minSourceZoom = this.get('minZoom');
const maxSourceZoom = this.get('maxZoom'); const maxSourceZoom = this.get('maxZoom');
this.tileZoom = zoom > maxSourceZoom ? maxSourceZoom : zoom; this.tileZoom = zoom > maxSourceZoom ? maxSourceZoom : zoom;

View File

@ -30,6 +30,7 @@ export default class WorkerTile {
type: 'FeatureCollection', type: 'FeatureCollection',
features features
}; };
delete data.layers[sourcelayer];
for (let i = 0; i < sourceStyle[sourcelayer].length; i++) { for (let i = 0; i < sourceStyle[sourcelayer].length; i++) {
const style = sourceStyle[sourcelayer][i]; const style = sourceStyle[sourcelayer][i];
style.sourceOption.parser.type = 'geojson'; style.sourceOption.parser.type = 'geojson';

View File

@ -35,4 +35,5 @@ export default class WorkerPool {
} }
} }
WorkerPool.workerCount = Math.max(Math.floor(window.navigator.hardwareConcurrency / 2), 1); WorkerPool.workerCount = 1;
// Math.max(Math.floor(window.navigator.hardwareConcurrency / 2), 1);