@maplibre/mlt 0.0.1-alpha.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (215) hide show
  1. package/README.md +28 -0
  2. package/dist/encodings/decodingUtils.d.ts +13 -0
  3. package/dist/encodings/decodingUtils.js +194 -0
  4. package/dist/encodings/decodingUtils.js.map +1 -0
  5. package/dist/encodings/doubleDecoder.d.ts +4 -0
  6. package/dist/encodings/doubleDecoder.js +22 -0
  7. package/dist/encodings/doubleDecoder.js.map +1 -0
  8. package/dist/encodings/fastpfor/bitpacking.d.ts +51 -0
  9. package/dist/encodings/fastpfor/bitpacking.js +4444 -0
  10. package/dist/encodings/fastpfor/bitpacking.js.map +1 -0
  11. package/dist/encodings/fastpfor/codec.d.ts +19 -0
  12. package/dist/encodings/fastpfor/codec.js +3 -0
  13. package/dist/encodings/fastpfor/codec.js.map +1 -0
  14. package/dist/encodings/fastpfor/fastpfor.d.ts +38 -0
  15. package/dist/encodings/fastpfor/fastpfor.js +123 -0
  16. package/dist/encodings/fastpfor/fastpfor.js.map +1 -0
  17. package/dist/encodings/fastpfor/index.d.ts +20 -0
  18. package/dist/encodings/fastpfor/index.js +47 -0
  19. package/dist/encodings/fastpfor/index.js.map +1 -0
  20. package/dist/encodings/fastpfor/util.d.ts +2 -0
  21. package/dist/encodings/fastpfor/util.js +16 -0
  22. package/dist/encodings/fastpfor/util.js.map +1 -0
  23. package/dist/encodings/fastpfor/varint.d.ts +18 -0
  24. package/dist/encodings/fastpfor/varint.js +125 -0
  25. package/dist/encodings/fastpfor/varint.js.map +1 -0
  26. package/dist/encodings/fsstDecoder.d.ts +9 -0
  27. package/dist/encodings/fsstDecoder.js +34 -0
  28. package/dist/encodings/fsstDecoder.js.map +1 -0
  29. package/dist/encodings/geometryDecoder.d.ts +5 -0
  30. package/dist/encodings/geometryDecoder.js +453 -0
  31. package/dist/encodings/geometryDecoder.js.map +1 -0
  32. package/dist/encodings/geometryScaling.d.ts +6 -0
  33. package/dist/encodings/geometryScaling.js +3 -0
  34. package/dist/encodings/geometryScaling.js.map +1 -0
  35. package/dist/encodings/intWrapper.d.ts +8 -0
  36. package/dist/encodings/intWrapper.js +22 -0
  37. package/dist/encodings/intWrapper.js.map +1 -0
  38. package/dist/encodings/integerDecodingUtils.d.ts +46 -0
  39. package/dist/encodings/integerDecodingUtils.js +703 -0
  40. package/dist/encodings/integerDecodingUtils.js.map +1 -0
  41. package/dist/encodings/integerStreamDecoder.d.ts +26 -0
  42. package/dist/encodings/integerStreamDecoder.js +254 -0
  43. package/dist/encodings/integerStreamDecoder.js.map +1 -0
  44. package/dist/encodings/propertyDecoder.d.ts +4 -0
  45. package/dist/encodings/propertyDecoder.js +194 -0
  46. package/dist/encodings/propertyDecoder.js.map +1 -0
  47. package/dist/encodings/stringDecoder.d.ts +11 -0
  48. package/dist/encodings/stringDecoder.js +148 -0
  49. package/dist/encodings/stringDecoder.js.map +1 -0
  50. package/dist/index.d.ts +8 -0
  51. package/dist/index.js +19 -0
  52. package/dist/index.js.map +1 -0
  53. package/dist/metadata/tile/dictionaryType.d.ts +8 -0
  54. package/dist/metadata/tile/dictionaryType.js +13 -0
  55. package/dist/metadata/tile/dictionaryType.js.map +1 -0
  56. package/dist/metadata/tile/lengthType.d.ts +9 -0
  57. package/dist/metadata/tile/lengthType.js +14 -0
  58. package/dist/metadata/tile/lengthType.js.map +1 -0
  59. package/dist/metadata/tile/logicalLevelTechnique.d.ts +8 -0
  60. package/dist/metadata/tile/logicalLevelTechnique.js +15 -0
  61. package/dist/metadata/tile/logicalLevelTechnique.js.map +1 -0
  62. package/dist/metadata/tile/logicalStreamType.d.ts +12 -0
  63. package/dist/metadata/tile/logicalStreamType.js +21 -0
  64. package/dist/metadata/tile/logicalStreamType.js.map +1 -0
  65. package/dist/metadata/tile/mortonEncodedStreamMetadata.d.ts +15 -0
  66. package/dist/metadata/tile/mortonEncodedStreamMetadata.js +29 -0
  67. package/dist/metadata/tile/mortonEncodedStreamMetadata.js.map +1 -0
  68. package/dist/metadata/tile/offsetType.d.ts +6 -0
  69. package/dist/metadata/tile/offsetType.js +11 -0
  70. package/dist/metadata/tile/offsetType.js.map +1 -0
  71. package/dist/metadata/tile/physicalLevelTechnique.d.ts +17 -0
  72. package/dist/metadata/tile/physicalLevelTechnique.js +22 -0
  73. package/dist/metadata/tile/physicalLevelTechnique.js.map +1 -0
  74. package/dist/metadata/tile/physicalStreamType.d.ts +6 -0
  75. package/dist/metadata/tile/physicalStreamType.js +11 -0
  76. package/dist/metadata/tile/physicalStreamType.js.map +1 -0
  77. package/dist/metadata/tile/rleEncodedStreamMetadata.d.ts +20 -0
  78. package/dist/metadata/tile/rleEncodedStreamMetadata.js +34 -0
  79. package/dist/metadata/tile/rleEncodedStreamMetadata.js.map +1 -0
  80. package/dist/metadata/tile/scalarType.d.ts +12 -0
  81. package/dist/metadata/tile/scalarType.js +17 -0
  82. package/dist/metadata/tile/scalarType.js.map +1 -0
  83. package/dist/metadata/tile/streamMetadata.d.ts +23 -0
  84. package/dist/metadata/tile/streamMetadata.js +71 -0
  85. package/dist/metadata/tile/streamMetadata.js.map +1 -0
  86. package/dist/metadata/tile/streamMetadataDecoder.d.ts +5 -0
  87. package/dist/metadata/tile/streamMetadataDecoder.js +24 -0
  88. package/dist/metadata/tile/streamMetadataDecoder.js.map +1 -0
  89. package/dist/metadata/tileset/embeddedTilesetMetadataDecoder.d.ts +10 -0
  90. package/dist/metadata/tileset/embeddedTilesetMetadataDecoder.js +112 -0
  91. package/dist/metadata/tileset/embeddedTilesetMetadataDecoder.js.map +1 -0
  92. package/dist/metadata/tileset/tilesetMetadata.g.d.ts +418 -0
  93. package/dist/metadata/tileset/tilesetMetadata.g.js +476 -0
  94. package/dist/metadata/tileset/tilesetMetadata.g.js.map +1 -0
  95. package/dist/metadata/tileset/typeMap.d.ts +38 -0
  96. package/dist/metadata/tileset/typeMap.js +185 -0
  97. package/dist/metadata/tileset/typeMap.js.map +1 -0
  98. package/dist/mltDecoder.d.ts +11 -0
  99. package/dist/mltDecoder.js +146 -0
  100. package/dist/mltDecoder.js.map +1 -0
  101. package/dist/mltMetadata.d.ts +40 -0
  102. package/dist/mltMetadata.js +34 -0
  103. package/dist/mltMetadata.js.map +1 -0
  104. package/dist/vector/constant/intConstVector.d.ts +19 -0
  105. package/dist/vector/constant/intConstVector.js +89 -0
  106. package/dist/vector/constant/intConstVector.js.map +1 -0
  107. package/dist/vector/constant/longConstVector.d.ts +19 -0
  108. package/dist/vector/constant/longConstVector.js +87 -0
  109. package/dist/vector/constant/longConstVector.js.map +1 -0
  110. package/dist/vector/dictionary/stringDictionaryVector.d.ts +22 -0
  111. package/dist/vector/dictionary/stringDictionaryVector.js +180 -0
  112. package/dist/vector/dictionary/stringDictionaryVector.js.map +1 -0
  113. package/dist/vector/featureTable.d.ts +29 -0
  114. package/dist/vector/featureTable.js +70 -0
  115. package/dist/vector/featureTable.js.map +1 -0
  116. package/dist/vector/filter/constSelectionVector.d.ts +0 -0
  117. package/dist/vector/filter/constSelectionVector.js +1 -0
  118. package/dist/vector/filter/constSelectionVector.js.map +1 -0
  119. package/dist/vector/filter/flatSelectionVector.d.ts +16 -0
  120. package/dist/vector/filter/flatSelectionVector.js +42 -0
  121. package/dist/vector/filter/flatSelectionVector.js.map +1 -0
  122. package/dist/vector/filter/selectionVector.d.ts +8 -0
  123. package/dist/vector/filter/selectionVector.js +3 -0
  124. package/dist/vector/filter/selectionVector.js.map +1 -0
  125. package/dist/vector/filter/selectionVectorUtils.d.ts +7 -0
  126. package/dist/vector/filter/selectionVectorUtils.js +44 -0
  127. package/dist/vector/filter/selectionVectorUtils.js.map +1 -0
  128. package/dist/vector/filter/sequenceSelectionVector.d.ts +0 -0
  129. package/dist/vector/filter/sequenceSelectionVector.js +1 -0
  130. package/dist/vector/filter/sequenceSelectionVector.js.map +1 -0
  131. package/dist/vector/fixedSizeVector.d.ts +5 -0
  132. package/dist/vector/fixedSizeVector.js +14 -0
  133. package/dist/vector/fixedSizeVector.js.map +1 -0
  134. package/dist/vector/flat/bitVector.d.ts +14 -0
  135. package/dist/vector/flat/bitVector.js +38 -0
  136. package/dist/vector/flat/bitVector.js.map +1 -0
  137. package/dist/vector/flat/booleanFlatVector.d.ts +20 -0
  138. package/dist/vector/flat/booleanFlatVector.js +55 -0
  139. package/dist/vector/flat/booleanFlatVector.js.map +1 -0
  140. package/dist/vector/flat/doubleFlatVector.d.ts +19 -0
  141. package/dist/vector/flat/doubleFlatVector.js +109 -0
  142. package/dist/vector/flat/doubleFlatVector.js.map +1 -0
  143. package/dist/vector/flat/floatFlatVector.d.ts +19 -0
  144. package/dist/vector/flat/floatFlatVector.js +109 -0
  145. package/dist/vector/flat/floatFlatVector.js.map +1 -0
  146. package/dist/vector/flat/intFlatVector.d.ts +19 -0
  147. package/dist/vector/flat/intFlatVector.js +123 -0
  148. package/dist/vector/flat/intFlatVector.js.map +1 -0
  149. package/dist/vector/flat/longFlatVector.d.ts +19 -0
  150. package/dist/vector/flat/longFlatVector.js +124 -0
  151. package/dist/vector/flat/longFlatVector.js.map +1 -0
  152. package/dist/vector/flat/stringFlatVector.d.ts +20 -0
  153. package/dist/vector/flat/stringFlatVector.js +165 -0
  154. package/dist/vector/flat/stringFlatVector.js.map +1 -0
  155. package/dist/vector/fsst-dictionary/stringFsstDictionaryVector.d.ts +27 -0
  156. package/dist/vector/fsst-dictionary/stringFsstDictionaryVector.js +115 -0
  157. package/dist/vector/fsst-dictionary/stringFsstDictionaryVector.js.map +1 -0
  158. package/dist/vector/geometry/constGeometryVector.d.ts +17 -0
  159. package/dist/vector/geometry/constGeometryVector.js +51 -0
  160. package/dist/vector/geometry/constGeometryVector.js.map +1 -0
  161. package/dist/vector/geometry/constGpuVector.d.ts +15 -0
  162. package/dist/vector/geometry/constGpuVector.js +66 -0
  163. package/dist/vector/geometry/constGpuVector.js.map +1 -0
  164. package/dist/vector/geometry/flatGeometryVector.d.ts +16 -0
  165. package/dist/vector/geometry/flatGeometryVector.js +64 -0
  166. package/dist/vector/geometry/flatGeometryVector.js.map +1 -0
  167. package/dist/vector/geometry/flatGpuVector.d.ts +14 -0
  168. package/dist/vector/geometry/flatGpuVector.js +67 -0
  169. package/dist/vector/geometry/flatGpuVector.js.map +1 -0
  170. package/dist/vector/geometry/geometryType.d.ts +13 -0
  171. package/dist/vector/geometry/geometryType.js +19 -0
  172. package/dist/vector/geometry/geometryType.js.map +1 -0
  173. package/dist/vector/geometry/geometryVector.d.ts +37 -0
  174. package/dist/vector/geometry/geometryVector.js +73 -0
  175. package/dist/vector/geometry/geometryVector.js.map +1 -0
  176. package/dist/vector/geometry/geometryVectorConverter.d.ts +2 -0
  177. package/dist/vector/geometry/geometryVectorConverter.js +302 -0
  178. package/dist/vector/geometry/geometryVectorConverter.js.map +1 -0
  179. package/dist/vector/geometry/gpuVector.d.ts +21 -0
  180. package/dist/vector/geometry/gpuVector.js +38 -0
  181. package/dist/vector/geometry/gpuVector.js.map +1 -0
  182. package/dist/vector/geometry/point.d.ts +195 -0
  183. package/dist/vector/geometry/point.js +283 -0
  184. package/dist/vector/geometry/point.js.map +1 -0
  185. package/dist/vector/geometry/spaceFillingCurve.d.ts +22 -0
  186. package/dist/vector/geometry/spaceFillingCurve.js +26 -0
  187. package/dist/vector/geometry/spaceFillingCurve.js.map +1 -0
  188. package/dist/vector/geometry/topologyVector.d.ts +9 -0
  189. package/dist/vector/geometry/topologyVector.js +21 -0
  190. package/dist/vector/geometry/topologyVector.js.map +1 -0
  191. package/dist/vector/geometry/zOrderCurve.d.ts +17 -0
  192. package/dist/vector/geometry/zOrderCurve.js +44 -0
  193. package/dist/vector/geometry/zOrderCurve.js.map +1 -0
  194. package/dist/vector/intVector.d.ts +8 -0
  195. package/dist/vector/intVector.js +3 -0
  196. package/dist/vector/intVector.js.map +1 -0
  197. package/dist/vector/sequence/intSequenceVector.d.ts +18 -0
  198. package/dist/vector/sequence/intSequenceVector.js +72 -0
  199. package/dist/vector/sequence/intSequenceVector.js.map +1 -0
  200. package/dist/vector/sequence/longSequenceVector.d.ts +18 -0
  201. package/dist/vector/sequence/longSequenceVector.js +57 -0
  202. package/dist/vector/sequence/longSequenceVector.js.map +1 -0
  203. package/dist/vector/sequence/sequenceVector.d.ts +5 -0
  204. package/dist/vector/sequence/sequenceVector.js +15 -0
  205. package/dist/vector/sequence/sequenceVector.js.map +1 -0
  206. package/dist/vector/variableSizeVector.d.ts +6 -0
  207. package/dist/vector/variableSizeVector.js +16 -0
  208. package/dist/vector/variableSizeVector.js.map +1 -0
  209. package/dist/vector/vector.d.ts +30 -0
  210. package/dist/vector/vector.js +73 -0
  211. package/dist/vector/vector.js.map +1 -0
  212. package/dist/vector/vectorType.d.ts +7 -0
  213. package/dist/vector/vectorType.js +12 -0
  214. package/dist/vector/vectorType.js.map +1 -0
  215. package/package.json +81 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"constGpuVector.js","sourceRoot":"","sources":["../../../src/vector/geometry/constGpuVector.ts"],"names":[],"mappings":";;;AACA,uEAAkE;AAClE,2CAAsC;AAKtC,mEAAmE;AACnE,MAAa,cAAe,SAAQ,qBAAS;IACzC,YACqB,cAAsB,EACtB,aAAqB,EACtC,eAA2B,EAC3B,WAAuB,EACvB,YAAwB,EACxB,cAAsC;QAEtC,KAAK,CAAC,eAAe,EAAE,WAAW,EAAE,YAAY,EAAE,cAAc,CAAC,CAAC;QAPjD,mBAAc,GAAd,cAAc,CAAQ;QACtB,kBAAa,GAAb,aAAa,CAAQ;IAO1C,CAAC;IAED,MAAM,CAAC,MAAM,CACT,aAAqB,EACrB,YAAoB,EACpB,eAA2B,EAC3B,WAAuB,EACvB,YAAwB,EACxB,cAAsC;QAEtC,OAAO,IAAI,cAAc,CACrB,aAAa,EACb,YAAY,EACZ,eAAe,EACf,WAAW,EACX,YAAY,EACZ,cAAc,CACjB,CAAC;IACN,CAAC;IAED;;;;;;;;;;;;;;;;;;;;OAoBG;IAEH,YAAY,CAAC,KAAa;QACtB,OAAO,IAAI,CAAC,aAAa,CAAC;IAC9B,CAAC;IAED,IAAI,aAAa;QACb,OAAO,IAAI,CAAC,cAAc,CAAC;IAC/B,CAAC;IAED,mGAAmG;IACnG,iEAAiE;IACjE,MAAM,CAAC,YAAuC;QAC1C,IAAG,YAAY,KAAK,IAAI,CAAC,aAAa,IAAI,CAAC,YAAY,GAAG,CAAC,CAAC,KAAK,IAAI,CAAC,aAAa,EAAC,CAAC;YACjF,OAAO,IAAI,yCAAmB,CAAC,EAAE,CAAC,CAAC;QACvC,CAAC;QAED,gCAAgC;QAChC,MAAM,eAAe,GAAG,IAAI,KAAK,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;QACtD,KAAI,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,aAAa,EAAE,CAAC,EAAE,EAAC,CAAC;YACxC,eAAe,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;QAC3B,CAAC;QACD,OAAO,IAAI,yCAAmB,CAAC,eAAe,CAAC,CAAC;IACpD,CAAC;IAED,cAAc,CAAC,YAAuC,EAAE,eAAgC;QACpF,IAAG,YAAY,KAAK,IAAI,CAAC,aAAa,IAAI,CAAC,YAAY,GAAG,CAAC,CAAC,KAAK,IAAI,CAAC,aAAa,EAAC,CAAC;YACjF,eAAe,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;QAChC,CAAC;IACL,CAAC;IAED,0BAA0B;QACtB,OAAO,IAAI,CAAC;IAChB,CAAC;CAEJ;AArFD,wCAqFC"}
@@ -0,0 +1,16 @@
1
+ import { GeometryVector, MortonSettings, VertexBufferType } from "./geometryVector";
2
+ import TopologyVector from "../../vector/geometry/topologyVector";
3
+ import { SelectionVector } from "../filter/selectionVector";
4
+ import { SINGLE_PART_GEOMETRY_TYPE } from "./geometryType";
5
+ export declare class FlatGeometryVector extends GeometryVector {
6
+ private readonly _geometryTypes;
7
+ constructor(vertexBufferType: VertexBufferType, _geometryTypes: Int32Array, topologyVector: TopologyVector, vertexOffsets: Int32Array, vertexBuffer: Int32Array, mortonSettings?: MortonSettings);
8
+ static createMortonEncoded(geometryTypes: Int32Array, topologyVector: TopologyVector, vertexOffsets: Int32Array, vertexBuffer: Int32Array, mortonInfo: MortonSettings): FlatGeometryVector;
9
+ static create(geometryTypes: Int32Array, topologyVector: TopologyVector, vertexOffsets: Int32Array, vertexBuffer: Int32Array): FlatGeometryVector;
10
+ geometryType(index: number): number;
11
+ get numGeometries(): number;
12
+ containsPolygonGeometry(): boolean;
13
+ filter(geometryType: SINGLE_PART_GEOMETRY_TYPE): SelectionVector;
14
+ filterSelected(predicateGeometryType: SINGLE_PART_GEOMETRY_TYPE, selectionVector: SelectionVector): void;
15
+ containsSingleGeometryType(): boolean;
16
+ }
@@ -0,0 +1,64 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.FlatGeometryVector = void 0;
4
+ const geometryVector_1 = require("./geometryVector");
5
+ const flatSelectionVector_1 = require("../filter/flatSelectionVector");
6
+ const geometryType_1 = require("./geometryType");
7
+ class FlatGeometryVector extends geometryVector_1.GeometryVector {
8
+ constructor(vertexBufferType,
9
+ //TODO: refactor -> use UInt8Array
10
+ _geometryTypes, topologyVector, vertexOffsets, vertexBuffer, mortonSettings) {
11
+ super(vertexBufferType, topologyVector, vertexOffsets, vertexBuffer, mortonSettings);
12
+ this._geometryTypes = _geometryTypes;
13
+ }
14
+ static createMortonEncoded(geometryTypes, topologyVector, vertexOffsets, vertexBuffer, mortonInfo) {
15
+ //TODO: refactor to use unsigned integers
16
+ return new FlatGeometryVector(geometryVector_1.VertexBufferType.MORTON, geometryTypes, topologyVector, vertexOffsets, vertexBuffer, mortonInfo);
17
+ }
18
+ static create(geometryTypes, topologyVector, vertexOffsets, vertexBuffer) {
19
+ return new FlatGeometryVector(geometryVector_1.VertexBufferType.VEC_2, geometryTypes, topologyVector, vertexOffsets, vertexBuffer);
20
+ }
21
+ geometryType(index) {
22
+ return this._geometryTypes[index];
23
+ }
24
+ get numGeometries() {
25
+ return this._geometryTypes.length;
26
+ }
27
+ containsPolygonGeometry() {
28
+ for (let i = 0; i < this.numGeometries; i++) {
29
+ if (this.geometryType(i) === geometryType_1.GEOMETRY_TYPE.POLYGON ||
30
+ this.geometryType(i) === geometryType_1.GEOMETRY_TYPE.MULTIPOLYGON) {
31
+ return true;
32
+ }
33
+ }
34
+ return false;
35
+ }
36
+ //TODO: refactor -> quick and dirty -> let a multi part geometry be equal to a single part geometry
37
+ //to produce the same results as with MVT and the existing styles
38
+ filter(geometryType) {
39
+ const selectionVector = [];
40
+ for (let i = 0; i < this.numGeometries; i++) {
41
+ if (this.geometryType(i) === geometryType || this.geometryType(i) === (geometryType + 3)) {
42
+ selectionVector.push(i);
43
+ }
44
+ }
45
+ return new flatSelectionVector_1.FlatSelectionVector(selectionVector);
46
+ }
47
+ filterSelected(predicateGeometryType, selectionVector) {
48
+ let limit = 0;
49
+ const vector = selectionVector.selectionValues();
50
+ for (let i = 0; i < selectionVector.limit; i++) {
51
+ const index = vector[i];
52
+ const geometryType = this.geometryType(index);
53
+ if (predicateGeometryType === geometryType || (predicateGeometryType + 3) === geometryType) {
54
+ vector[limit++] = index;
55
+ }
56
+ }
57
+ selectionVector.setLimit(limit);
58
+ }
59
+ containsSingleGeometryType() {
60
+ return false;
61
+ }
62
+ }
63
+ exports.FlatGeometryVector = FlatGeometryVector;
64
+ //# sourceMappingURL=flatGeometryVector.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"flatGeometryVector.js","sourceRoot":"","sources":["../../../src/vector/geometry/flatGeometryVector.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,14 @@
1
+ import { SelectionVector } from "../filter/selectionVector";
2
+ import { GpuVector } from "./gpuVector";
3
+ import { SINGLE_PART_GEOMETRY_TYPE } from "./geometryType";
4
+ import TopologyVector from "./topologyVector";
5
+ export declare class FlatGpuVector extends GpuVector {
6
+ private readonly _geometryTypes;
7
+ constructor(_geometryTypes: Int32Array, triangleOffsets: Int32Array, indexBuffer: Int32Array, vertexBuffer: Int32Array, topologyVector: TopologyVector | null);
8
+ static create(geometryTypes: Int32Array, triangleOffsets: Int32Array, indexBuffer: Int32Array, vertexBuffer: Int32Array, topologyVector?: TopologyVector | null): GpuVector;
9
+ geometryType(index: number): number;
10
+ get numGeometries(): number;
11
+ filter(geometryType: SINGLE_PART_GEOMETRY_TYPE): SelectionVector;
12
+ filterSelected(geometryType: SINGLE_PART_GEOMETRY_TYPE, selectionVector: SelectionVector): void;
13
+ containsSingleGeometryType(): boolean;
14
+ }
@@ -0,0 +1,67 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.FlatGpuVector = void 0;
4
+ const flatSelectionVector_1 = require("../filter/flatSelectionVector");
5
+ const gpuVector_1 = require("./gpuVector");
6
+ //TODO: extend from GeometryVector -> make topology vector optional
7
+ class FlatGpuVector extends gpuVector_1.GpuVector {
8
+ constructor(_geometryTypes, triangleOffsets, indexBuffer, vertexBuffer, topologyVector) {
9
+ super(triangleOffsets, indexBuffer, vertexBuffer, topologyVector);
10
+ this._geometryTypes = _geometryTypes;
11
+ }
12
+ static create(geometryTypes, triangleOffsets, indexBuffer, vertexBuffer, topologyVector) {
13
+ return new FlatGpuVector(geometryTypes, triangleOffsets, indexBuffer, vertexBuffer, topologyVector);
14
+ }
15
+ /*static createMortonEncoded(
16
+ geometryTypes: Int32Array,
17
+ triangleOffsets: Int32Array,
18
+ indexBuffer: Int32Array,
19
+ vertexOffsets: Int32Array,
20
+ vertexBuffer: Int32Array,
21
+ mortonInfo: MortonSettings
22
+ ): GpuVector {
23
+ //TODO: refactor to use unsigned integers
24
+ return new FlatGpuVector(
25
+ VertexBufferType.MORTON,
26
+ geometryTypes,
27
+ triangleOffsets,
28
+ indexBuffer,
29
+ vertexOffsets,
30
+ vertexBuffer,
31
+ mortonInfo
32
+ );
33
+ }*/
34
+ geometryType(index) {
35
+ return this._geometryTypes[index];
36
+ }
37
+ get numGeometries() {
38
+ return this._geometryTypes.length;
39
+ }
40
+ //TODO: refactor -> quick and dirty -> let a multi part geometry be equal to a single part geometry
41
+ //to produce the same results as with MVT and the existing styles
42
+ filter(geometryType) {
43
+ const selectionVector = [];
44
+ for (let i = 0; i < this.numGeometries; i++) {
45
+ if (this.geometryType(i) === geometryType || this.geometryType(i) === (geometryType + 3)) {
46
+ selectionVector.push(i);
47
+ }
48
+ }
49
+ return new flatSelectionVector_1.FlatSelectionVector(selectionVector);
50
+ }
51
+ filterSelected(geometryType, selectionVector) {
52
+ let limit = 0;
53
+ const vector = selectionVector.selectionValues();
54
+ for (let i = 0; i < selectionVector.limit; i++) {
55
+ const index = selectionVector[i];
56
+ if (this.geometryType(index) === geometryType || this.geometryType(index) === (geometryType + 3)) {
57
+ vector[limit++] = index;
58
+ }
59
+ }
60
+ selectionVector.setLimit(limit);
61
+ }
62
+ containsSingleGeometryType() {
63
+ return false;
64
+ }
65
+ }
66
+ exports.FlatGpuVector = FlatGpuVector;
67
+ //# sourceMappingURL=flatGpuVector.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"flatGpuVector.js","sourceRoot":"","sources":["../../../src/vector/geometry/flatGpuVector.ts"],"names":[],"mappings":";;;AACA,uEAAkE;AAClE,2CAAsC;AAKtC,mEAAmE;AACnE,MAAa,aAAc,SAAQ,qBAAS;IACxC,YACqB,cAA0B,EAC3C,eAA2B,EAC3B,WAAuB,EACvB,YAAwB,EACxB,cAAqC;QAErC,KAAK,CAAC,eAAe,EAAE,WAAW,EAAE,YAAY,EAAE,cAAc,CAAC,CAAC;QANjD,mBAAc,GAAd,cAAc,CAAY;IAO/C,CAAC;IAED,MAAM,CAAC,MAAM,CACT,aAAyB,EACzB,eAA2B,EAC3B,WAAuB,EACvB,YAAwB,EACxB,cAAsC;QAEtC,OAAO,IAAI,aAAa,CACpB,aAAa,EACb,eAAe,EACf,WAAW,EACX,YAAY,EACZ,cAAc,CACjB,CAAC;IACN,CAAC;IAED;;;;;;;;;;;;;;;;;;OAkBG;IAEH,YAAY,CAAC,KAAa;QACtB,OAAO,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC;IACtC,CAAC;IAED,IAAI,aAAa;QACb,OAAO,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC;IACtC,CAAC;IAED,mGAAmG;IACnG,iEAAiE;IACjE,MAAM,CAAC,YAAuC;QAC1C,MAAM,eAAe,GAAG,EAAE,CAAC;QAC3B,KAAI,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,aAAa,EAAE,CAAC,EAAE,EAAC,CAAC;YACxC,IAAG,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,KAAK,YAAY,IAAI,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,KAAK,CAAC,YAAY,GAAG,CAAC,CAAC,EAAC,CAAC;gBACrF,eAAe,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAC5B,CAAC;QACL,CAAC;QACD,OAAO,IAAI,yCAAmB,CAAC,eAAe,CAAC,CAAC;IACpD,CAAC;IAED,cAAc,CAAC,YAAuC,EAAE,eAAgC;QACpF,IAAI,KAAK,GAAG,CAAC,CAAC;QACd,MAAM,MAAM,GAAG,eAAe,CAAC,eAAe,EAAE,CAAC;QACjD,KAAI,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,eAAe,CAAC,KAAK,EAAE,CAAC,EAAE,EAAC,CAAC;YAC3C,MAAM,KAAK,GAAG,eAAe,CAAC,CAAC,CAAC,CAAC;YACjC,IAAG,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,KAAK,YAAY,IAAI,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,KAAK,CAAC,YAAY,GAAG,CAAC,CAAC,EAAC,CAAC;gBAC7F,MAAM,CAAC,KAAK,EAAE,CAAC,GAAG,KAAK,CAAC;YAC5B,CAAC;QACL,CAAC;QAED,eAAe,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;IACpC,CAAC;IAGD,0BAA0B;QACtB,OAAO,KAAK,CAAC;IACjB,CAAC;CAEJ;AArFD,sCAqFC"}
@@ -0,0 +1,13 @@
1
+ export declare enum GEOMETRY_TYPE {
2
+ POINT = 0,
3
+ LINESTRING = 1,
4
+ POLYGON = 2,
5
+ MULTIPOINT = 3,
6
+ MULTILINESTRING = 4,
7
+ MULTIPOLYGON = 5
8
+ }
9
+ export declare enum SINGLE_PART_GEOMETRY_TYPE {
10
+ POINT = 0,
11
+ LINESTRING = 1,
12
+ POLYGON = 2
13
+ }
@@ -0,0 +1,19 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.SINGLE_PART_GEOMETRY_TYPE = exports.GEOMETRY_TYPE = void 0;
4
+ var GEOMETRY_TYPE;
5
+ (function (GEOMETRY_TYPE) {
6
+ GEOMETRY_TYPE[GEOMETRY_TYPE["POINT"] = 0] = "POINT";
7
+ GEOMETRY_TYPE[GEOMETRY_TYPE["LINESTRING"] = 1] = "LINESTRING";
8
+ GEOMETRY_TYPE[GEOMETRY_TYPE["POLYGON"] = 2] = "POLYGON";
9
+ GEOMETRY_TYPE[GEOMETRY_TYPE["MULTIPOINT"] = 3] = "MULTIPOINT";
10
+ GEOMETRY_TYPE[GEOMETRY_TYPE["MULTILINESTRING"] = 4] = "MULTILINESTRING";
11
+ GEOMETRY_TYPE[GEOMETRY_TYPE["MULTIPOLYGON"] = 5] = "MULTIPOLYGON";
12
+ })(GEOMETRY_TYPE || (exports.GEOMETRY_TYPE = GEOMETRY_TYPE = {}));
13
+ var SINGLE_PART_GEOMETRY_TYPE;
14
+ (function (SINGLE_PART_GEOMETRY_TYPE) {
15
+ SINGLE_PART_GEOMETRY_TYPE[SINGLE_PART_GEOMETRY_TYPE["POINT"] = 0] = "POINT";
16
+ SINGLE_PART_GEOMETRY_TYPE[SINGLE_PART_GEOMETRY_TYPE["LINESTRING"] = 1] = "LINESTRING";
17
+ SINGLE_PART_GEOMETRY_TYPE[SINGLE_PART_GEOMETRY_TYPE["POLYGON"] = 2] = "POLYGON";
18
+ })(SINGLE_PART_GEOMETRY_TYPE || (exports.SINGLE_PART_GEOMETRY_TYPE = SINGLE_PART_GEOMETRY_TYPE = {}));
19
+ //# sourceMappingURL=geometryType.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"geometryType.js","sourceRoot":"","sources":["../../../src/vector/geometry/geometryType.ts"],"names":[],"mappings":";;;AAAA,IAAY,aAOX;AAPD,WAAY,aAAa;IACrB,mDAAK,CAAA;IACL,6DAAU,CAAA;IACV,uDAAO,CAAA;IACP,6DAAU,CAAA;IACV,uEAAe,CAAA;IACf,iEAAY,CAAA;AAChB,CAAC,EAPW,aAAa,6BAAb,aAAa,QAOxB;AAED,IAAY,yBAIX;AAJD,WAAY,yBAAyB;IACjC,2EAAK,CAAA;IACL,qFAAU,CAAA;IACV,+EAAO,CAAA;AACX,CAAC,EAJW,yBAAyB,yCAAzB,yBAAyB,QAIpC"}
@@ -0,0 +1,37 @@
1
+ import TopologyVector from "../../vector/geometry/topologyVector";
2
+ import { SelectionVector } from "../filter/selectionVector";
3
+ import Point from "./point";
4
+ import { SINGLE_PART_GEOMETRY_TYPE } from "./geometryType";
5
+ export type Geometry = Array<Array<Point>>;
6
+ export interface MortonSettings {
7
+ numBits: number;
8
+ coordinateShift: number;
9
+ }
10
+ export declare enum VertexBufferType {
11
+ MORTON = 0,
12
+ VEC_2 = 1,
13
+ VEC_3 = 2
14
+ }
15
+ export declare abstract class GeometryVector implements Iterable<Geometry> {
16
+ private readonly _vertexBufferType;
17
+ private readonly _topologyVector;
18
+ private readonly _vertexOffsets;
19
+ private readonly _vertexBuffer;
20
+ private readonly _mortonSettings?;
21
+ protected constructor(_vertexBufferType: VertexBufferType, _topologyVector: TopologyVector, _vertexOffsets: Int32Array, _vertexBuffer: Int32Array, _mortonSettings?: MortonSettings);
22
+ get vertexBufferType(): VertexBufferType;
23
+ get topologyVector(): TopologyVector;
24
+ get vertexOffsets(): Int32Array;
25
+ get vertexBuffer(): Int32Array;
26
+ [Symbol.iterator](): Iterator<Geometry>;
27
+ getSimpleEncodedVertex(index: number): [number, number];
28
+ getVertex(index: number): [number, number];
29
+ getGeometries(): Geometry[];
30
+ get mortonSettings(): MortonSettings | undefined;
31
+ abstract containsPolygonGeometry(): boolean;
32
+ abstract geometryType(index: number): number;
33
+ abstract get numGeometries(): number;
34
+ abstract filter(geometryType: SINGLE_PART_GEOMETRY_TYPE): SelectionVector;
35
+ abstract filterSelected(geometryType: SINGLE_PART_GEOMETRY_TYPE, selectionVector: SelectionVector): any;
36
+ abstract containsSingleGeometryType(): boolean;
37
+ }
@@ -0,0 +1,73 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.GeometryVector = exports.VertexBufferType = void 0;
7
+ const geometryVectorConverter_1 = require("./geometryVectorConverter");
8
+ const zOrderCurve_1 = __importDefault(require("./zOrderCurve"));
9
+ var VertexBufferType;
10
+ (function (VertexBufferType) {
11
+ VertexBufferType[VertexBufferType["MORTON"] = 0] = "MORTON";
12
+ VertexBufferType[VertexBufferType["VEC_2"] = 1] = "VEC_2";
13
+ VertexBufferType[VertexBufferType["VEC_3"] = 2] = "VEC_3";
14
+ })(VertexBufferType || (exports.VertexBufferType = VertexBufferType = {}));
15
+ class GeometryVector {
16
+ constructor(_vertexBufferType, _topologyVector, _vertexOffsets, _vertexBuffer, _mortonSettings) {
17
+ this._vertexBufferType = _vertexBufferType;
18
+ this._topologyVector = _topologyVector;
19
+ this._vertexOffsets = _vertexOffsets;
20
+ this._vertexBuffer = _vertexBuffer;
21
+ this._mortonSettings = _mortonSettings;
22
+ }
23
+ get vertexBufferType() {
24
+ return this._vertexBufferType;
25
+ }
26
+ get topologyVector() {
27
+ return this._topologyVector;
28
+ }
29
+ get vertexOffsets() {
30
+ return this._vertexOffsets;
31
+ }
32
+ get vertexBuffer() {
33
+ return this._vertexBuffer;
34
+ }
35
+ *[Symbol.iterator]() {
36
+ const geometries = (0, geometryVectorConverter_1.convertGeometryVector)(this);
37
+ let index = 0;
38
+ while (index < this.numGeometries) {
39
+ yield geometries[index++];
40
+ }
41
+ }
42
+ /* Allows faster access to the vertices since morton encoding is currently not used in the POC. Morton encoding
43
+ will be used after adapting the shader to decode the morton codes on the GPU. */
44
+ getSimpleEncodedVertex(index) {
45
+ const offset = this.vertexOffsets ? this.vertexOffsets[index] * 2 : index * 2;
46
+ const x = this.vertexBuffer[offset];
47
+ const y = this.vertexBuffer[offset + 1];
48
+ return [x, y];
49
+ }
50
+ //TODO: add scaling information to the constructor
51
+ getVertex(index) {
52
+ if (this.vertexOffsets && this.mortonSettings) {
53
+ //TODO: move decoding of the morton codes on the GPU in the vertex shader
54
+ const vertexOffset = this.vertexOffsets[index];
55
+ const mortonEncodedVertex = this.vertexBuffer[vertexOffset];
56
+ //TODO: improve performance -> inline calculation and move to decoding of VertexBuffer
57
+ const vertex = zOrderCurve_1.default.decode(mortonEncodedVertex, this.mortonSettings.numBits, this.mortonSettings.coordinateShift);
58
+ return [vertex.x, vertex.y];
59
+ }
60
+ const offset = this.vertexOffsets ? this.vertexOffsets[index] * 2 : index * 2;
61
+ const x = this.vertexBuffer[offset];
62
+ const y = this.vertexBuffer[offset + 1];
63
+ return [x, y];
64
+ }
65
+ getGeometries() {
66
+ return (0, geometryVectorConverter_1.convertGeometryVector)(this);
67
+ }
68
+ get mortonSettings() {
69
+ return this._mortonSettings;
70
+ }
71
+ }
72
+ exports.GeometryVector = GeometryVector;
73
+ //# sourceMappingURL=geometryVector.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"geometryVector.js","sourceRoot":"","sources":["../../../src/vector/geometry/geometryVector.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ import { GeometryVector, Geometry } from './geometryVector';
2
+ export declare function convertGeometryVector(geometryVector: GeometryVector): Geometry[];
@@ -0,0 +1,302 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.convertGeometryVector = convertGeometryVector;
7
+ const geometryVector_1 = require("./geometryVector");
8
+ const zOrderCurve_1 = __importDefault(require("./zOrderCurve"));
9
+ const point_1 = __importDefault(require("./point"));
10
+ const geometryType_1 = require("./geometryType");
11
+ class MvtGeometryFactory {
12
+ createPoint(coordinate) {
13
+ return [[coordinate]];
14
+ }
15
+ createMultiPoint(points) {
16
+ return points.map(point => [point]);
17
+ }
18
+ createLineString(vertices) {
19
+ return [vertices];
20
+ }
21
+ createMultiLineString(lineStrings) {
22
+ return lineStrings;
23
+ }
24
+ createPolygon(shell, rings) {
25
+ return [shell, ...rings];
26
+ }
27
+ createMultiPolygon(polygons) {
28
+ //TODO: check winding order of shell and holes
29
+ return polygons.flat();
30
+ }
31
+ }
32
+ function convertGeometryVector(geometryVector) {
33
+ const geometries = new Array(geometryVector.numGeometries);
34
+ let partOffsetCounter = 1;
35
+ let ringOffsetsCounter = 1;
36
+ let geometryOffsetsCounter = 1;
37
+ let geometryCounter = 0;
38
+ const geometryFactory = new MvtGeometryFactory();
39
+ let vertexBufferOffset = 0;
40
+ let vertexOffsetsOffset = 0;
41
+ const mortonSettings = geometryVector.mortonSettings;
42
+ const topologyVector = geometryVector.topologyVector;
43
+ const geometryOffsets = topologyVector.geometryOffsets;
44
+ const partOffsets = topologyVector.partOffsets;
45
+ const ringOffsets = topologyVector.ringOffsets;
46
+ const vertexOffsets = geometryVector.vertexOffsets;
47
+ const containsPolygon = geometryVector.containsPolygonGeometry();
48
+ const vertexBuffer = geometryVector.vertexBuffer;
49
+ for (let i = 0; i < geometryVector.numGeometries; i++) {
50
+ const geometryType = geometryVector.geometryType(i);
51
+ if (geometryType === geometryType_1.GEOMETRY_TYPE.POINT) {
52
+ if (!vertexOffsets || vertexOffsets.length === 0) {
53
+ const x = vertexBuffer[vertexBufferOffset++];
54
+ const y = vertexBuffer[vertexBufferOffset++];
55
+ const coordinate = new point_1.default(x, y);
56
+ geometries[geometryCounter++] = geometryFactory.createPoint(coordinate);
57
+ }
58
+ else if (geometryVector.vertexBufferType === geometryVector_1.VertexBufferType.VEC_2) {
59
+ const offset = vertexOffsets[vertexOffsetsOffset++] * 2;
60
+ const x = vertexBuffer[offset];
61
+ const y = vertexBuffer[offset + 1];
62
+ const coordinate = new point_1.default(x, y);
63
+ geometries[geometryCounter++] = geometryFactory.createPoint(coordinate);
64
+ }
65
+ else {
66
+ const offset = vertexOffsets[vertexOffsetsOffset++];
67
+ const mortonCode = vertexBuffer[offset];
68
+ const vertex = zOrderCurve_1.default.decode(mortonCode, mortonSettings.numBits, mortonSettings.coordinateShift);
69
+ const coordinate = new point_1.default(vertex.x, vertex.y);
70
+ geometries[geometryCounter++] = geometryFactory.createPoint(coordinate);
71
+ }
72
+ if (geometryOffsets)
73
+ geometryOffsetsCounter++;
74
+ if (partOffsets)
75
+ partOffsetCounter++;
76
+ if (ringOffsets)
77
+ ringOffsetsCounter++;
78
+ }
79
+ else if (geometryType === geometryType_1.GEOMETRY_TYPE.MULTIPOINT) {
80
+ const numPoints = geometryOffsets[geometryOffsetsCounter] - geometryOffsets[geometryOffsetsCounter - 1];
81
+ geometryOffsetsCounter++;
82
+ const points = new Array(numPoints);
83
+ if (!vertexOffsets || vertexOffsets.length === 0) {
84
+ for (let j = 0; j < numPoints; j++) {
85
+ const x = vertexBuffer[vertexBufferOffset++];
86
+ const y = vertexBuffer[vertexBufferOffset++];
87
+ points[j] = new point_1.default(x, y);
88
+ }
89
+ geometries[geometryCounter++] = geometryFactory.createMultiPoint(points);
90
+ }
91
+ else {
92
+ for (let j = 0; j < numPoints; j++) {
93
+ const offset = vertexOffsets[vertexOffsetsOffset++] * 2;
94
+ const x = vertexBuffer[offset];
95
+ const y = vertexBuffer[offset + 1];
96
+ points[j] = new point_1.default(x, y);
97
+ }
98
+ geometries[geometryCounter++] = geometryFactory.createMultiPoint(points);
99
+ }
100
+ }
101
+ else if (geometryType === geometryType_1.GEOMETRY_TYPE.LINESTRING) {
102
+ let numVertices = 0;
103
+ if (containsPolygon) {
104
+ numVertices = ringOffsets[ringOffsetsCounter] - ringOffsets[ringOffsetsCounter - 1];
105
+ ringOffsetsCounter++;
106
+ }
107
+ else {
108
+ numVertices = partOffsets[partOffsetCounter] - partOffsets[partOffsetCounter - 1];
109
+ }
110
+ partOffsetCounter++;
111
+ let vertices;
112
+ if (!vertexOffsets || vertexOffsets.length === 0) {
113
+ vertices = getLineString(vertexBuffer, vertexBufferOffset, numVertices, false);
114
+ vertexBufferOffset += numVertices * 2;
115
+ }
116
+ else {
117
+ vertices = geometryVector.vertexBufferType === geometryVector_1.VertexBufferType.VEC_2
118
+ ? decodeDictionaryEncodedLineString(vertexBuffer, vertexOffsets, vertexOffsetsOffset, numVertices, false)
119
+ : decodeMortonDictionaryEncodedLineString(vertexBuffer, vertexOffsets, vertexOffsetsOffset, numVertices, false, mortonSettings);
120
+ vertexOffsetsOffset += numVertices;
121
+ }
122
+ geometries[geometryCounter++] = geometryFactory.createLineString(vertices);
123
+ if (geometryOffsets)
124
+ geometryOffsetsCounter++;
125
+ }
126
+ else if (geometryType === geometryType_1.GEOMETRY_TYPE.POLYGON) {
127
+ const numRings = partOffsets[partOffsetCounter] - partOffsets[partOffsetCounter - 1];
128
+ partOffsetCounter++;
129
+ const rings = new Array(numRings - 1);
130
+ let numVertices = ringOffsets[ringOffsetsCounter] - ringOffsets[ringOffsetsCounter - 1];
131
+ ringOffsetsCounter++;
132
+ if (!vertexOffsets || vertexOffsets.length === 0) {
133
+ const shell = getLinearRing(vertexBuffer, vertexBufferOffset, numVertices);
134
+ vertexBufferOffset += numVertices * 2;
135
+ for (let j = 0; j < rings.length; j++) {
136
+ numVertices = ringOffsets[ringOffsetsCounter] - ringOffsets[ringOffsetsCounter - 1];
137
+ ringOffsetsCounter++;
138
+ rings[j] = getLinearRing(vertexBuffer, vertexBufferOffset, numVertices);
139
+ vertexBufferOffset += numVertices * 2;
140
+ }
141
+ geometries[geometryCounter++] = geometryFactory.createPolygon(shell, rings);
142
+ }
143
+ else {
144
+ const shell = geometryVector.vertexBufferType === geometryVector_1.VertexBufferType.VEC_2
145
+ ? decodeDictionaryEncodedLinearRing(vertexBuffer, vertexOffsets, vertexOffsetsOffset, numVertices)
146
+ : decodeMortonDictionaryEncodedLinearRing(vertexBuffer, vertexOffsets, vertexOffsetsOffset, numVertices, geometryFactory, mortonSettings);
147
+ vertexOffsetsOffset += numVertices;
148
+ for (let j = 0; j < rings.length; j++) {
149
+ numVertices = ringOffsets[ringOffsetsCounter] - ringOffsets[ringOffsetsCounter - 1];
150
+ ringOffsetsCounter++;
151
+ rings[j] = geometryVector.vertexBufferType === geometryVector_1.VertexBufferType.VEC_2
152
+ ? decodeDictionaryEncodedLinearRing(vertexBuffer, vertexOffsets, vertexOffsetsOffset, numVertices)
153
+ : decodeMortonDictionaryEncodedLinearRing(vertexBuffer, vertexOffsets, vertexOffsetsOffset, numVertices, geometryFactory, mortonSettings);
154
+ vertexOffsetsOffset += numVertices;
155
+ }
156
+ geometries[geometryCounter++] = geometryFactory.createPolygon(shell, rings);
157
+ }
158
+ if (geometryOffsets)
159
+ geometryOffsetsCounter++;
160
+ }
161
+ else if (geometryType === geometryType_1.GEOMETRY_TYPE.MULTILINESTRING) {
162
+ const numLineStrings = geometryOffsets[geometryOffsetsCounter] - geometryOffsets[geometryOffsetsCounter - 1];
163
+ geometryOffsetsCounter++;
164
+ const lineStrings = new Array(numLineStrings);
165
+ if (!vertexOffsets || vertexOffsets.length === 0) {
166
+ for (let j = 0; j < numLineStrings; j++) {
167
+ let numVertices = 0;
168
+ if (containsPolygon) {
169
+ numVertices = ringOffsets[ringOffsetsCounter] - ringOffsets[ringOffsetsCounter - 1];
170
+ ringOffsetsCounter++;
171
+ }
172
+ else {
173
+ numVertices = partOffsets[partOffsetCounter] - partOffsets[partOffsetCounter - 1];
174
+ }
175
+ partOffsetCounter++;
176
+ lineStrings[j] = getLineString(vertexBuffer, vertexBufferOffset, numVertices, false);
177
+ vertexBufferOffset += numVertices * 2;
178
+ }
179
+ geometries[geometryCounter++] = geometryFactory.createMultiLineString(lineStrings);
180
+ }
181
+ else {
182
+ for (let j = 0; j < numLineStrings; j++) {
183
+ let numVertices = 0;
184
+ if (containsPolygon) {
185
+ numVertices = ringOffsets[ringOffsetsCounter] - ringOffsets[ringOffsetsCounter - 1];
186
+ ringOffsetsCounter++;
187
+ }
188
+ else {
189
+ numVertices = partOffsets[partOffsetCounter] - partOffsets[partOffsetCounter - 1];
190
+ }
191
+ partOffsetCounter++;
192
+ const vertices = geometryVector.vertexBufferType === geometryVector_1.VertexBufferType.VEC_2
193
+ ? decodeDictionaryEncodedLineString(vertexBuffer, vertexOffsets, vertexOffsetsOffset, numVertices, false)
194
+ : decodeMortonDictionaryEncodedLineString(vertexBuffer, vertexOffsets, vertexOffsetsOffset, numVertices, false, mortonSettings);
195
+ lineStrings[j] = vertices;
196
+ vertexOffsetsOffset += numVertices;
197
+ }
198
+ geometries[geometryCounter++] = geometryFactory.createMultiLineString(lineStrings);
199
+ }
200
+ }
201
+ else if (geometryType === geometryType_1.GEOMETRY_TYPE.MULTIPOLYGON) {
202
+ const numPolygons = geometryOffsets[geometryOffsetsCounter] - geometryOffsets[geometryOffsetsCounter - 1];
203
+ geometryOffsetsCounter++;
204
+ const polygons = new Array(numPolygons);
205
+ let numVertices = 0;
206
+ if (!vertexOffsets || vertexOffsets.length === 0) {
207
+ for (let j = 0; j < numPolygons; j++) {
208
+ const numRings = partOffsets[partOffsetCounter] - partOffsets[partOffsetCounter - 1];
209
+ partOffsetCounter++;
210
+ const rings = new Array(numRings - 1);
211
+ numVertices = ringOffsets[ringOffsetsCounter] - ringOffsets[ringOffsetsCounter - 1];
212
+ ringOffsetsCounter++;
213
+ const shell = getLinearRing(vertexBuffer, vertexBufferOffset, numVertices);
214
+ vertexBufferOffset += numVertices * 2;
215
+ for (let k = 0; k < rings.length; k++) {
216
+ const numRingVertices = ringOffsets[ringOffsetsCounter] - ringOffsets[ringOffsetsCounter - 1];
217
+ ringOffsetsCounter++;
218
+ rings[k] = getLinearRing(vertexBuffer, vertexBufferOffset, numRingVertices);
219
+ vertexBufferOffset += numRingVertices * 2;
220
+ }
221
+ polygons[j] = geometryFactory.createPolygon(shell, rings);
222
+ }
223
+ geometries[geometryCounter++] = geometryFactory.createMultiPolygon(polygons);
224
+ }
225
+ else {
226
+ for (let j = 0; j < numPolygons; j++) {
227
+ const numRings = partOffsets[partOffsetCounter] - partOffsets[partOffsetCounter - 1];
228
+ partOffsetCounter++;
229
+ const rings = new Array(numRings - 1);
230
+ numVertices = ringOffsets[ringOffsetsCounter] - ringOffsets[ringOffsetsCounter - 1];
231
+ ringOffsetsCounter++;
232
+ const shell = geometryVector.vertexBufferType === geometryVector_1.VertexBufferType.VEC_2
233
+ ? decodeDictionaryEncodedLinearRing(vertexBuffer, vertexOffsets, vertexOffsetsOffset, numVertices)
234
+ : decodeMortonDictionaryEncodedLinearRing(vertexBuffer, vertexOffsets, vertexOffsetsOffset, numVertices, geometryFactory, mortonSettings);
235
+ vertexOffsetsOffset += numVertices;
236
+ for (let k = 0; k < rings.length; k++) {
237
+ numVertices = ringOffsets[ringOffsetsCounter] - ringOffsets[ringOffsetsCounter - 1];
238
+ ringOffsetsCounter++;
239
+ rings[k] = geometryVector.vertexBufferType === geometryVector_1.VertexBufferType.VEC_2
240
+ ? decodeDictionaryEncodedLinearRing(vertexBuffer, vertexOffsets, vertexOffsetsOffset, numVertices)
241
+ : decodeMortonDictionaryEncodedLinearRing(vertexBuffer, vertexOffsets, vertexOffsetsOffset, numVertices, geometryFactory, mortonSettings);
242
+ vertexOffsetsOffset += numVertices;
243
+ }
244
+ polygons[j] = geometryFactory.createPolygon(shell, rings);
245
+ }
246
+ geometries[geometryCounter++] = geometryFactory.createMultiPolygon(polygons);
247
+ }
248
+ }
249
+ else {
250
+ throw new Error("The specified geometry type is currently not supported.");
251
+ }
252
+ }
253
+ return geometries;
254
+ }
255
+ function getLinearRing(vertexBuffer, startIndex, numVertices) {
256
+ return getLineString(vertexBuffer, startIndex, numVertices, true);
257
+ }
258
+ function decodeDictionaryEncodedLinearRing(vertexBuffer, vertexOffsets, vertexOffset, numVertices) {
259
+ return decodeDictionaryEncodedLineString(vertexBuffer, vertexOffsets, vertexOffset, numVertices, true);
260
+ }
261
+ function decodeMortonDictionaryEncodedLinearRing(vertexBuffer, vertexOffsets, vertexOffset, numVertices, geometryFactory, mortonSettings) {
262
+ return decodeMortonDictionaryEncodedLineString(vertexBuffer, vertexOffsets, vertexOffset, numVertices, true, mortonSettings);
263
+ }
264
+ function getLineString(vertexBuffer, startIndex, numVertices, closeLineString) {
265
+ const vertices = new Array(closeLineString ? numVertices + 1 : numVertices);
266
+ for (let i = 0; i < numVertices * 2; i += 2) {
267
+ const x = vertexBuffer[startIndex + i];
268
+ const y = vertexBuffer[startIndex + i + 1];
269
+ vertices[i / 2] = new point_1.default(x, y);
270
+ }
271
+ if (closeLineString) {
272
+ vertices[vertices.length - 1] = vertices[0];
273
+ }
274
+ return vertices;
275
+ }
276
+ function decodeDictionaryEncodedLineString(vertexBuffer, vertexOffsets, vertexOffset, numVertices, closeLineString) {
277
+ const vertices = new Array(closeLineString ? numVertices + 1 : numVertices);
278
+ for (let i = 0; i < numVertices * 2; i += 2) {
279
+ const offset = vertexOffsets[vertexOffset + i / 2] * 2;
280
+ const x = vertexBuffer[offset];
281
+ const y = vertexBuffer[offset + 1];
282
+ vertices[i / 2] = new point_1.default(x, y);
283
+ }
284
+ if (closeLineString) {
285
+ vertices[vertices.length - 1] = vertices[0];
286
+ }
287
+ return vertices;
288
+ }
289
+ function decodeMortonDictionaryEncodedLineString(vertexBuffer, vertexOffsets, vertexOffset, numVertices, closeLineString, mortonSettings) {
290
+ const vertices = new Array(closeLineString ? numVertices + 1 : numVertices);
291
+ for (let i = 0; i < numVertices; i++) {
292
+ const offset = vertexOffsets[vertexOffset + i];
293
+ const mortonEncodedVertex = vertexBuffer[offset];
294
+ const vertex = zOrderCurve_1.default.decode(mortonEncodedVertex, mortonSettings.numBits, mortonSettings.coordinateShift);
295
+ vertices[i] = new point_1.default(vertex.x, vertex.y);
296
+ }
297
+ if (closeLineString) {
298
+ vertices[vertices.length - 1] = vertices[0];
299
+ }
300
+ return vertices;
301
+ }
302
+ //# sourceMappingURL=geometryVectorConverter.js.map