forked from openlayers/openlayers
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathVectorTile.js
149 lines (130 loc) · 3.39 KB
/
VectorTile.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
/**
* @module ol/VectorTile
*/
import Tile from './Tile.js';
import TileState from './TileState.js';
/**
* @template {import('./Feature.js').FeatureLike} FeatureType
*/
class VectorTile extends Tile {
/**
* @param {import("./tilecoord.js").TileCoord} tileCoord Tile coordinate.
* @param {import("./TileState.js").default} state State.
* @param {string} src Data source url.
* @param {import("./format/Feature.js").default<FeatureType>} format Feature format.
* @param {import("./Tile.js").LoadFunction} tileLoadFunction Tile load function.
* @param {import("./Tile.js").Options} [options] Tile options.
*/
constructor(tileCoord, state, src, format, tileLoadFunction, options) {
super(tileCoord, state, options);
/**
* Extent of this tile; set by the source.
* @type {import("./extent.js").Extent}
*/
this.extent = null;
/**
* @private
* @type {import("./format/Feature.js").default<FeatureType>}
*/
this.format_ = format;
/**
* @private
* @type {Array<FeatureType>}
*/
this.features_ = null;
/**
* @private
* @type {import("./featureloader.js").FeatureLoader<FeatureType>}
*/
this.loader_;
/**
* Feature projection of this tile; set by the source.
* @type {import("./proj/Projection.js").default}
*/
this.projection = null;
/**
* Resolution of this tile; set by the source.
* @type {number}
*/
this.resolution;
/**
* @private
* @type {import("./Tile.js").LoadFunction}
*/
this.tileLoadFunction_ = tileLoadFunction;
/**
* @private
* @type {string}
*/
this.url_ = src;
this.key = src;
}
/**
* @return {string} Tile url.
*/
getTileUrl() {
return this.url_;
}
/**
* Get the feature format assigned for reading this tile's features.
* @return {import("./format/Feature.js").default<FeatureType>} Feature format.
* @api
*/
getFormat() {
return this.format_;
}
/**
* Get the features for this tile. Geometries will be in the view projection.
* @return {Array<FeatureType>} Features.
* @api
*/
getFeatures() {
return this.features_;
}
/**
* Load not yet loaded URI.
* @override
*/
load() {
if (this.state == TileState.IDLE) {
this.setState(TileState.LOADING);
this.tileLoadFunction_(this, this.url_);
if (this.loader_) {
this.loader_(this.extent, this.resolution, this.projection);
}
}
}
/**
* Handler for successful tile load.
* @param {Array<FeatureType>} features The loaded features.
* @param {import("./proj/Projection.js").default} dataProjection Data projection.
*/
onLoad(features, dataProjection) {
this.setFeatures(features);
}
/**
* Handler for tile load errors.
*/
onError() {
this.setState(TileState.ERROR);
}
/**
* Function for use in a {@link module:ol/source/VectorTile~VectorTile}'s `tileLoadFunction`.
* Sets the features for the tile.
* @param {Array<FeatureType>} features Features.
* @api
*/
setFeatures(features) {
this.features_ = features;
this.setState(TileState.LOADED);
}
/**
* Set the feature loader for reading this tile's features.
* @param {import("./featureloader.js").FeatureLoader<FeatureType>} loader Feature loader.
* @api
*/
setLoader(loader) {
this.loader_ = loader;
}
}
export default VectorTile;