@osmix/core 0.0.1 → 0.0.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.
- package/CHANGELOG.md +52 -0
- package/README.md +118 -107
- package/dist/core/src/entities.d.ts +114 -0
- package/dist/core/src/entities.d.ts.map +1 -0
- package/dist/core/src/entities.js +152 -0
- package/dist/core/src/entities.js.map +1 -0
- package/dist/core/src/ids.d.ts +113 -0
- package/dist/core/src/ids.d.ts.map +1 -0
- package/dist/core/src/ids.js +236 -0
- package/dist/core/src/ids.js.map +1 -0
- package/dist/core/src/index.d.ts +32 -0
- package/dist/core/src/index.d.ts.map +1 -0
- package/dist/core/src/index.js +35 -0
- package/dist/core/src/index.js.map +1 -0
- package/dist/core/src/nodes.d.ts +101 -0
- package/dist/core/src/nodes.d.ts.map +1 -0
- package/dist/core/src/nodes.js +309 -0
- package/dist/core/src/nodes.js.map +1 -0
- package/dist/core/src/osm.d.ts +74 -0
- package/dist/core/src/osm.d.ts.map +1 -0
- package/dist/core/src/osm.js +120 -0
- package/dist/core/src/osm.js.map +1 -0
- package/dist/core/src/relations.d.ts +118 -0
- package/dist/core/src/relations.d.ts.map +1 -0
- package/dist/core/src/relations.js +412 -0
- package/dist/core/src/relations.js.map +1 -0
- package/dist/core/src/stringtable.d.ts +95 -0
- package/dist/core/src/stringtable.d.ts.map +1 -0
- package/dist/core/src/stringtable.js +170 -0
- package/dist/core/src/stringtable.js.map +1 -0
- package/dist/core/src/tags.d.ts +126 -0
- package/dist/core/src/tags.d.ts.map +1 -0
- package/dist/core/src/tags.js +228 -0
- package/dist/core/src/tags.js.map +1 -0
- package/dist/core/src/typed-arrays.d.ts +124 -0
- package/dist/core/src/typed-arrays.d.ts.map +1 -0
- package/dist/core/src/typed-arrays.js +198 -0
- package/dist/core/src/typed-arrays.js.map +1 -0
- package/dist/core/src/utils.d.ts +11 -0
- package/dist/core/src/utils.d.ts.map +1 -0
- package/dist/core/src/utils.js +26 -0
- package/dist/core/src/utils.js.map +1 -0
- package/dist/core/src/ways.d.ts +101 -0
- package/dist/core/src/ways.d.ts.map +1 -0
- package/dist/core/src/ways.js +336 -0
- package/dist/core/src/ways.js.map +1 -0
- package/dist/core/test/memory.test.d.ts +7 -0
- package/dist/core/test/memory.test.d.ts.map +1 -0
- package/dist/core/test/memory.test.js +29 -0
- package/dist/core/test/memory.test.js.map +1 -0
- package/dist/core/test/mock-osm.d.ts +13 -0
- package/dist/core/test/mock-osm.d.ts.map +1 -0
- package/dist/core/test/mock-osm.js +122 -0
- package/dist/core/test/mock-osm.js.map +1 -0
- package/dist/core/test/tags-search.test.d.ts +2 -0
- package/dist/core/test/tags-search.test.d.ts.map +1 -0
- package/dist/core/test/tags-search.test.js +56 -0
- package/dist/core/test/tags-search.test.js.map +1 -0
- package/dist/core/test/typed-arrays.test.d.ts +2 -0
- package/dist/core/test/typed-arrays.test.d.ts.map +1 -0
- package/dist/core/test/typed-arrays.test.js +102 -0
- package/dist/core/test/typed-arrays.test.js.map +1 -0
- package/dist/osmix/src/extract.d.ts +43 -0
- package/dist/osmix/src/extract.d.ts.map +1 -0
- package/dist/osmix/src/extract.js +156 -0
- package/dist/osmix/src/extract.js.map +1 -0
- package/dist/osmix/src/pbf.d.ts +55 -0
- package/dist/osmix/src/pbf.d.ts.map +1 -0
- package/dist/osmix/src/pbf.js +187 -0
- package/dist/osmix/src/pbf.js.map +1 -0
- package/dist/osmix/src/utils.d.ts +36 -0
- package/dist/osmix/src/utils.d.ts.map +1 -0
- package/dist/osmix/src/utils.js +108 -0
- package/dist/osmix/src/utils.js.map +1 -0
- package/dist/osmix/test/extract.bench.d.ts +2 -0
- package/dist/osmix/test/extract.bench.d.ts.map +1 -0
- package/dist/osmix/test/extract.bench.js +26 -0
- package/dist/osmix/test/extract.bench.js.map +1 -0
- package/dist/osmix/test/extract.test.d.ts +2 -0
- package/dist/osmix/test/extract.test.d.ts.map +1 -0
- package/dist/osmix/test/extract.test.js +392 -0
- package/dist/osmix/test/extract.test.js.map +1 -0
- package/package.json +11 -11
- package/src/entities.ts +138 -22
- package/src/ids.ts +117 -45
- package/src/index.ts +34 -5
- package/src/nodes.ts +237 -58
- package/src/osm.ts +174 -0
- package/src/relations.ts +383 -54
- package/src/stringtable.ts +111 -36
- package/src/tags.ts +207 -46
- package/src/typed-arrays.ts +97 -10
- package/src/types/geoflatbush.d.ts +37 -0
- package/src/types/geokdbush.d.ts +37 -0
- package/src/types/kdbush.d.ts +24 -6
- package/src/utils.ts +9 -14
- package/src/ways.ts +248 -84
- package/test/memory.test.ts +38 -0
- package/test/mock-osm.ts +8 -8
- package/test/tags-search.test.ts +60 -0
- package/test/typed-arrays.test.ts +5 -6
- package/tsconfig.json +7 -1
- package/src/osmix.ts +0 -556
- package/test/extract.bench.ts +0 -29
- package/test/extract.test.ts +0 -156
- package/test/read.test.ts +0 -22
- package/test/write.test.ts +0 -66
package/test/extract.test.ts
DELETED
|
@@ -1,156 +0,0 @@
|
|
|
1
|
-
import { getFixtureFileReadStream } from "@osmix/shared/test/fixtures"
|
|
2
|
-
import type { GeoBbox2D } from "@osmix/shared/types"
|
|
3
|
-
import { assert, test } from "vitest"
|
|
4
|
-
import { Osmix } from "../src/osmix"
|
|
5
|
-
|
|
6
|
-
const TEST_BBOX: GeoBbox2D = [-0.1, -0.1, 1, 1]
|
|
7
|
-
const SEATTLE_BBOX: GeoBbox2D = [-122.463226, 47.469878, -122.180328, 47.82883]
|
|
8
|
-
|
|
9
|
-
function buildSourceOsm() {
|
|
10
|
-
const osm = new Osmix({ id: "source" })
|
|
11
|
-
osm.nodes.addNode({
|
|
12
|
-
id: 1,
|
|
13
|
-
lat: 0,
|
|
14
|
-
lon: 0,
|
|
15
|
-
tags: {
|
|
16
|
-
name: "inside-a",
|
|
17
|
-
},
|
|
18
|
-
})
|
|
19
|
-
osm.nodes.addNode({
|
|
20
|
-
id: 2,
|
|
21
|
-
lat: 0,
|
|
22
|
-
lon: 2,
|
|
23
|
-
tags: {
|
|
24
|
-
name: "outside-a",
|
|
25
|
-
},
|
|
26
|
-
})
|
|
27
|
-
osm.nodes.addNode({
|
|
28
|
-
id: 3,
|
|
29
|
-
lat: 0.5,
|
|
30
|
-
lon: 0.5,
|
|
31
|
-
})
|
|
32
|
-
osm.nodes.addNode({
|
|
33
|
-
id: 4,
|
|
34
|
-
lat: 0.5,
|
|
35
|
-
lon: 1.5,
|
|
36
|
-
})
|
|
37
|
-
|
|
38
|
-
osm.ways.addWay({
|
|
39
|
-
id: 10,
|
|
40
|
-
refs: [1, 2],
|
|
41
|
-
tags: {
|
|
42
|
-
highway: "residential",
|
|
43
|
-
},
|
|
44
|
-
})
|
|
45
|
-
osm.ways.addWay({
|
|
46
|
-
id: 11,
|
|
47
|
-
refs: [3, 4],
|
|
48
|
-
tags: {
|
|
49
|
-
highway: "service",
|
|
50
|
-
},
|
|
51
|
-
})
|
|
52
|
-
|
|
53
|
-
osm.relations.addRelation({
|
|
54
|
-
id: 20,
|
|
55
|
-
members: [
|
|
56
|
-
{
|
|
57
|
-
type: "way",
|
|
58
|
-
ref: 10,
|
|
59
|
-
role: "outer",
|
|
60
|
-
},
|
|
61
|
-
],
|
|
62
|
-
tags: {
|
|
63
|
-
type: "multipolygon",
|
|
64
|
-
},
|
|
65
|
-
})
|
|
66
|
-
|
|
67
|
-
osm.buildIndexes()
|
|
68
|
-
return osm
|
|
69
|
-
}
|
|
70
|
-
|
|
71
|
-
test("extract a BBOX while reading a PBF", async () => {
|
|
72
|
-
const source = buildSourceOsm()
|
|
73
|
-
const transform = new TransformStream<Uint8Array, ArrayBufferLike>()
|
|
74
|
-
const extract = new Osmix()
|
|
75
|
-
const extractPromise = extract.readPbf(transform.readable, {
|
|
76
|
-
extractBbox: TEST_BBOX,
|
|
77
|
-
})
|
|
78
|
-
await source.toPbfStream().pipeTo(transform.writable)
|
|
79
|
-
await extractPromise
|
|
80
|
-
|
|
81
|
-
assert.equal(extract.nodes.size, 2)
|
|
82
|
-
assert.isTrue(extract.nodes.ids.has(1))
|
|
83
|
-
assert.isTrue(extract.nodes.ids.has(3))
|
|
84
|
-
assert.isNotTrue(extract.nodes.ids.has(2))
|
|
85
|
-
assert.isNotTrue(extract.nodes.ids.has(4))
|
|
86
|
-
|
|
87
|
-
const truncatedWay = extract.ways.getById(10)
|
|
88
|
-
assert.exists(truncatedWay)
|
|
89
|
-
assert.deepEqual(truncatedWay?.refs, [1])
|
|
90
|
-
|
|
91
|
-
assert.isTrue(extract.ways.ids.has(11))
|
|
92
|
-
assert.isTrue(extract.relations.ids.has(20))
|
|
93
|
-
})
|
|
94
|
-
|
|
95
|
-
test("extract a BBOX after reading a PBF", async () => {
|
|
96
|
-
const source = buildSourceOsm()
|
|
97
|
-
const buffer = await source.toPbfBuffer()
|
|
98
|
-
|
|
99
|
-
const streaming = new Osmix()
|
|
100
|
-
await streaming.readPbf(buffer.slice(0), { extractBbox: TEST_BBOX })
|
|
101
|
-
|
|
102
|
-
const twoStepOsmix = new Osmix()
|
|
103
|
-
await twoStepOsmix.readPbf(buffer.slice(0))
|
|
104
|
-
const twoStep = twoStepOsmix.extract(TEST_BBOX)
|
|
105
|
-
|
|
106
|
-
assert.equal(streaming.nodes.size, twoStep.nodes.size)
|
|
107
|
-
assert.equal(streaming.ways.size, twoStep.ways.size)
|
|
108
|
-
assert.equal(streaming.relations.size, twoStep.relations.size)
|
|
109
|
-
|
|
110
|
-
assert.deepEqual(
|
|
111
|
-
Array.from(streaming.nodes.ids.sorted),
|
|
112
|
-
Array.from(twoStep.nodes.ids.sorted),
|
|
113
|
-
)
|
|
114
|
-
assert.deepEqual(
|
|
115
|
-
Array.from(streaming.ways.ids.sorted),
|
|
116
|
-
Array.from(twoStep.ways.ids.sorted),
|
|
117
|
-
)
|
|
118
|
-
assert.deepEqual(
|
|
119
|
-
Array.from(streaming.relations.ids.sorted),
|
|
120
|
-
Array.from(twoStep.relations.ids.sorted),
|
|
121
|
-
)
|
|
122
|
-
|
|
123
|
-
for (const nodeId of streaming.nodes.ids.sorted) {
|
|
124
|
-
const streamingNode = streaming.nodes.getById(nodeId)
|
|
125
|
-
const twoStepNode = twoStep.nodes.getById(nodeId)
|
|
126
|
-
assert.deepEqual(streamingNode, twoStepNode)
|
|
127
|
-
}
|
|
128
|
-
|
|
129
|
-
for (const wayId of streaming.ways.ids.sorted) {
|
|
130
|
-
const streamingWay = streaming.ways.getById(wayId)
|
|
131
|
-
const twoStepWay = twoStep.ways.getById(wayId)
|
|
132
|
-
assert.deepEqual(streamingWay, twoStepWay)
|
|
133
|
-
}
|
|
134
|
-
|
|
135
|
-
for (const relationId of streaming.relations.ids.sorted) {
|
|
136
|
-
const streamingRelation = streaming.relations.getById(relationId)
|
|
137
|
-
const twoStepRelation = twoStep.relations.getById(relationId)
|
|
138
|
-
assert.deepEqual(streamingRelation, twoStepRelation)
|
|
139
|
-
}
|
|
140
|
-
})
|
|
141
|
-
|
|
142
|
-
test.skip("extract from a large PBF", { timeout: 500_000 }, async () => {
|
|
143
|
-
const seattle = new Osmix({ logger: console.error })
|
|
144
|
-
await seattle.readPbf(getFixtureFileReadStream("usa.pbf"), {
|
|
145
|
-
extractBbox: SEATTLE_BBOX,
|
|
146
|
-
})
|
|
147
|
-
|
|
148
|
-
assert.deepEqual(
|
|
149
|
-
{
|
|
150
|
-
nodes: seattle.nodes.size,
|
|
151
|
-
ways: seattle.ways.size,
|
|
152
|
-
relations: seattle.relations.size,
|
|
153
|
-
},
|
|
154
|
-
{ nodes: 802_541, ways: 241_248, relations: 3_622 },
|
|
155
|
-
)
|
|
156
|
-
})
|
package/test/read.test.ts
DELETED
|
@@ -1,22 +0,0 @@
|
|
|
1
|
-
import {
|
|
2
|
-
getFixtureFile,
|
|
3
|
-
getFixtureFileReadStream,
|
|
4
|
-
PBFs,
|
|
5
|
-
} from "@osmix/shared/test/fixtures"
|
|
6
|
-
import { assert, beforeAll, describe, it } from "vitest"
|
|
7
|
-
import { Osmix } from "../src/osmix"
|
|
8
|
-
|
|
9
|
-
describe("read", () => {
|
|
10
|
-
describe.each(Object.entries(PBFs))("%s", async (name, pbf) => {
|
|
11
|
-
beforeAll(() => getFixtureFile(pbf.url))
|
|
12
|
-
|
|
13
|
-
it("into OSM class", async () => {
|
|
14
|
-
const fileStream = getFixtureFileReadStream(pbf.url)
|
|
15
|
-
const osm = await Osmix.fromPbf(fileStream, { id: name })
|
|
16
|
-
assert.equal(osm.nodes.size, pbf.nodes)
|
|
17
|
-
assert.equal(osm.stringTable.length, pbf.uniqueStrings)
|
|
18
|
-
assert.deepEqual(osm.nodes.getByIndex(0), pbf.node0)
|
|
19
|
-
assert.equal(osm.ways.size, pbf.ways)
|
|
20
|
-
})
|
|
21
|
-
})
|
|
22
|
-
})
|
package/test/write.test.ts
DELETED
|
@@ -1,66 +0,0 @@
|
|
|
1
|
-
import {
|
|
2
|
-
getFixtureFile,
|
|
3
|
-
getFixtureFileReadStream,
|
|
4
|
-
PBFs,
|
|
5
|
-
} from "@osmix/shared/test/fixtures"
|
|
6
|
-
import { assert, beforeAll, describe, it } from "vitest"
|
|
7
|
-
import { Osmix } from "../src/osmix"
|
|
8
|
-
|
|
9
|
-
describe("write", () => {
|
|
10
|
-
describe.each(Object.entries(PBFs))("%s", async (name, pbf) => {
|
|
11
|
-
beforeAll(() => getFixtureFile(pbf.url))
|
|
12
|
-
|
|
13
|
-
it("write osm primitive blocks", async () => {
|
|
14
|
-
// Parse the original PBF
|
|
15
|
-
const fileStream = getFixtureFileReadStream(pbf.url)
|
|
16
|
-
const osm = await Osmix.fromPbf(fileStream, { id: name })
|
|
17
|
-
|
|
18
|
-
// Get the first node, way, and relation
|
|
19
|
-
const node1 = osm.nodes.getByIndex(0)
|
|
20
|
-
const way1 = osm.ways.getByIndex(0)
|
|
21
|
-
const relation1 = osm.relations.getByIndex(0)
|
|
22
|
-
assert.exists(node1)
|
|
23
|
-
assert.exists(way1)
|
|
24
|
-
assert.exists(relation1)
|
|
25
|
-
|
|
26
|
-
const transformStream = new TransformStream<Uint8Array, ArrayBufferLike>()
|
|
27
|
-
const testOsmPromise = Osmix.fromPbf(transformStream.readable, {
|
|
28
|
-
id: `${name}-reparsed`,
|
|
29
|
-
})
|
|
30
|
-
|
|
31
|
-
// Write the PBF to an array buffer
|
|
32
|
-
// let data = new Uint8Array(0)
|
|
33
|
-
await osm.toPbfStream().pipeTo(transformStream.writable)
|
|
34
|
-
|
|
35
|
-
// Re-parse the new PBF
|
|
36
|
-
// assert.exists(data.buffer)
|
|
37
|
-
const testOsm = await testOsmPromise
|
|
38
|
-
|
|
39
|
-
// Compare the original parsed PBF and newly parsed/written/re-parsed PBF
|
|
40
|
-
assert.equal(osm.nodes.size, testOsm.nodes.size)
|
|
41
|
-
assert.equal(osm.ways.size, testOsm.ways.size)
|
|
42
|
-
assert.equal(osm.relations.size, testOsm.relations.size)
|
|
43
|
-
|
|
44
|
-
if (node1) {
|
|
45
|
-
const testNode1 = testOsm.nodes.getById(node1.id)
|
|
46
|
-
assert.deepEqual(testNode1, node1)
|
|
47
|
-
assert.equal(testNode1?.id, node1.id)
|
|
48
|
-
assert.equal(testNode1?.lon, node1.lon)
|
|
49
|
-
assert.equal(testNode1?.lat, node1.lat)
|
|
50
|
-
assert.deepEqual(testNode1?.tags, node1.tags)
|
|
51
|
-
}
|
|
52
|
-
if (way1) {
|
|
53
|
-
const testWay1 = testOsm.ways.getById(way1.id)
|
|
54
|
-
assert.equal(testWay1?.id, way1.id)
|
|
55
|
-
assert.deepEqual(testWay1?.refs, way1.refs)
|
|
56
|
-
assert.deepEqual(testWay1?.tags, way1.tags)
|
|
57
|
-
}
|
|
58
|
-
if (relation1) {
|
|
59
|
-
const testRelation1 = testOsm.relations.getById(relation1.id)
|
|
60
|
-
assert.equal(testRelation1?.id, relation1.id)
|
|
61
|
-
assert.deepEqual(testRelation1?.members, relation1.members)
|
|
62
|
-
assert.deepEqual(testRelation1?.tags, relation1.tags)
|
|
63
|
-
}
|
|
64
|
-
})
|
|
65
|
-
})
|
|
66
|
-
})
|