@mailwoman/resolver-wof-sqlite 8.0.0 → 8.2.0
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/address-point-interpolation.ts +9 -3
- package/address-point-schema.ts +32 -10
- package/address-point.ts +3 -0
- package/ancestry-backfill.ts +18 -5
- package/ancestry.ts +7 -2
- package/build-candidate.ts +29 -6
- package/build-slim.ts +40 -11
- package/candidate-fts.ts +1 -0
- package/candidate-lookup.ts +49 -15
- package/candidate-schema.ts +35 -11
- package/coincident-roles.ts +28 -6
- package/convention.ts +3 -1
- package/coverage-manifest-schema.ts +243 -0
- package/fst-autocomplete.ts +15 -9
- package/fst-builder.ts +65 -9
- package/fst-deserialize-web.ts +46 -9
- package/fst-matcher.ts +12 -5
- package/fst-serialize.ts +83 -9
- package/fst-types.ts +43 -0
- package/fts-query.ts +84 -0
- package/fts.ts +35 -9
- package/geo.ts +9 -3
- package/geonames-aliases.ts +116 -79
- package/geonames-postal.ts +25 -5
- package/index.ts +19 -0
- package/interpolation.ts +59 -55
- package/lookup.ts +103 -292
- package/name-score.ts +76 -0
- package/out/address-point-interpolation.d.ts.map +1 -1
- package/out/address-point-interpolation.js +4 -2
- package/out/address-point-interpolation.js.map +1 -1
- package/out/address-point-schema.d.ts +30 -10
- package/out/address-point-schema.d.ts.map +1 -1
- package/out/address-point-schema.js +6 -2
- package/out/address-point-schema.js.map +1 -1
- package/out/address-point.d.ts.map +1 -1
- package/out/address-point.js.map +1 -1
- package/out/ancestry-backfill.d.ts +6 -2
- package/out/ancestry-backfill.d.ts.map +1 -1
- package/out/ancestry-backfill.js +7 -3
- package/out/ancestry-backfill.js.map +1 -1
- package/out/ancestry.d.ts +6 -2
- package/out/ancestry.d.ts.map +1 -1
- package/out/ancestry.js +3 -1
- package/out/ancestry.js.map +1 -1
- package/out/build-candidate.d.ts +9 -3
- package/out/build-candidate.d.ts.map +1 -1
- package/out/build-candidate.js +5 -3
- package/out/build-candidate.js.map +1 -1
- package/out/build-slim.d.ts +15 -5
- package/out/build-slim.d.ts.map +1 -1
- package/out/build-slim.js +11 -5
- package/out/build-slim.js.map +1 -1
- package/out/candidate-fts.d.ts.map +1 -1
- package/out/candidate-fts.js.map +1 -1
- package/out/candidate-lookup.d.ts +16 -3
- package/out/candidate-lookup.d.ts.map +1 -1
- package/out/candidate-lookup.js +27 -11
- package/out/candidate-lookup.js.map +1 -1
- package/out/candidate-schema.d.ts +33 -11
- package/out/candidate-schema.d.ts.map +1 -1
- package/out/candidate-schema.js.map +1 -1
- package/out/coincident-roles.d.ts +16 -4
- package/out/coincident-roles.d.ts.map +1 -1
- package/out/coincident-roles.js +9 -3
- package/out/coincident-roles.js.map +1 -1
- package/out/convention.d.ts +3 -1
- package/out/convention.d.ts.map +1 -1
- package/out/convention.js.map +1 -1
- package/out/coverage-manifest-schema.d.ts +112 -0
- package/out/coverage-manifest-schema.d.ts.map +1 -0
- package/out/coverage-manifest-schema.js +154 -0
- package/out/coverage-manifest-schema.js.map +1 -0
- package/out/fst-autocomplete.d.ts +1 -1
- package/out/fst-autocomplete.d.ts.map +1 -1
- package/out/fst-autocomplete.js +11 -9
- package/out/fst-autocomplete.js.map +1 -1
- package/out/fst-builder.d.ts.map +1 -1
- package/out/fst-builder.js +42 -9
- package/out/fst-builder.js.map +1 -1
- package/out/fst-deserialize-web.d.ts.map +1 -1
- package/out/fst-deserialize-web.js +34 -9
- package/out/fst-deserialize-web.js.map +1 -1
- package/out/fst-matcher.d.ts +6 -2
- package/out/fst-matcher.d.ts.map +1 -1
- package/out/fst-matcher.js +9 -5
- package/out/fst-matcher.js.map +1 -1
- package/out/fst-serialize.d.ts.map +1 -1
- package/out/fst-serialize.js +62 -9
- package/out/fst-serialize.js.map +1 -1
- package/out/fst-types.d.ts +43 -0
- package/out/fst-types.d.ts.map +1 -1
- package/out/fts-query.d.ts +41 -0
- package/out/fts-query.d.ts.map +1 -0
- package/out/fts-query.js +75 -0
- package/out/fts-query.js.map +1 -0
- package/out/fts.d.ts +21 -7
- package/out/fts.d.ts.map +1 -1
- package/out/fts.js +10 -4
- package/out/fts.js.map +1 -1
- package/out/geo.d.ts +6 -2
- package/out/geo.d.ts.map +1 -1
- package/out/geo.js +3 -1
- package/out/geo.js.map +1 -1
- package/out/geonames-aliases.d.ts +12 -4
- package/out/geonames-aliases.d.ts.map +1 -1
- package/out/geonames-aliases.js +72 -67
- package/out/geonames-aliases.js.map +1 -1
- package/out/geonames-postal.d.ts +9 -3
- package/out/geonames-postal.d.ts.map +1 -1
- package/out/geonames-postal.js +7 -2
- package/out/geonames-postal.js.map +1 -1
- package/out/index.d.ts +2 -0
- package/out/index.d.ts.map +1 -1
- package/out/index.js +1 -0
- package/out/index.js.map +1 -1
- package/out/interpolation.d.ts +24 -6
- package/out/interpolation.d.ts.map +1 -1
- package/out/interpolation.js +32 -40
- package/out/interpolation.js.map +1 -1
- package/out/lookup.d.ts +3 -97
- package/out/lookup.d.ts.map +1 -1
- package/out/lookup.js +52 -184
- package/out/lookup.js.map +1 -1
- package/out/name-score.d.ts +28 -0
- package/out/name-score.d.ts.map +1 -0
- package/out/name-score.js +67 -0
- package/out/name-score.js.map +1 -0
- package/out/poi-lookup.d.ts +24 -8
- package/out/poi-lookup.d.ts.map +1 -1
- package/out/poi-lookup.js +27 -13
- package/out/poi-lookup.js.map +1 -1
- package/out/poi-schema.d.ts +42 -13
- package/out/poi-schema.d.ts.map +1 -1
- package/out/poi-schema.js +12 -3
- package/out/poi-schema.js.map +1 -1
- package/out/postal-city-alias-lookup.d.ts +18 -6
- package/out/postal-city-alias-lookup.d.ts.map +1 -1
- package/out/postal-city-alias-lookup.js.map +1 -1
- package/out/postal-city-alias-schema.d.ts +27 -9
- package/out/postal-city-alias-schema.d.ts.map +1 -1
- package/out/postal-city-alias-schema.js +3 -1
- package/out/postal-city-alias-schema.js.map +1 -1
- package/out/postal-city-candidate-schema.d.ts +15 -5
- package/out/postal-city-candidate-schema.d.ts.map +1 -1
- package/out/postal-city-candidate-schema.js +3 -1
- package/out/postal-city-candidate-schema.js.map +1 -1
- package/out/postcode-point-lookup.d.ts +6 -2
- package/out/postcode-point-lookup.d.ts.map +1 -1
- package/out/postcode-point-lookup.js +6 -2
- package/out/postcode-point-lookup.js.map +1 -1
- package/out/ranking-weights.d.ts +118 -0
- package/out/ranking-weights.d.ts.map +1 -0
- package/out/ranking-weights.js +44 -0
- package/out/ranking-weights.js.map +1 -0
- package/out/reverse.d.ts +9 -3
- package/out/reverse.d.ts.map +1 -1
- package/out/reverse.js +20 -6
- package/out/reverse.js.map +1 -1
- package/out/sharding.d.ts +3 -1
- package/out/sharding.d.ts.map +1 -1
- package/out/sharding.js +7 -5
- package/out/sharding.js.map +1 -1
- package/out/sqlite-convention-source.d.ts.map +1 -1
- package/out/sqlite-convention-source.js +3 -1
- package/out/sqlite-convention-source.js.map +1 -1
- package/out/street-centroid-schema.d.ts +33 -11
- package/out/street-centroid-schema.d.ts.map +1 -1
- package/out/street-centroid-schema.js +3 -1
- package/out/street-centroid-schema.js.map +1 -1
- package/out/street-centroid.d.ts.map +1 -1
- package/out/street-centroid.js +6 -2
- package/out/street-centroid.js.map +1 -1
- package/out/street-morphology-fst-builder.d.ts +6 -2
- package/out/street-morphology-fst-builder.d.ts.map +1 -1
- package/out/street-morphology-fst-builder.js +8 -7
- package/out/street-morphology-fst-builder.js.map +1 -1
- package/out/street-morphology-fst-loader.d.ts +67 -0
- package/out/street-morphology-fst-loader.d.ts.map +1 -0
- package/out/street-morphology-fst-loader.js +59 -0
- package/out/street-morphology-fst-loader.js.map +1 -0
- package/out/street-name-lookup.d.ts +9 -3
- package/out/street-name-lookup.d.ts.map +1 -1
- package/out/street-name-lookup.js +9 -7
- package/out/street-name-lookup.js.map +1 -1
- package/out/street-normalize.d.ts +3 -1
- package/out/street-normalize.d.ts.map +1 -1
- package/out/street-normalize.js +23 -13
- package/out/street-normalize.js.map +1 -1
- package/out/street-segment-schema.d.ts +68 -13
- package/out/street-segment-schema.d.ts.map +1 -1
- package/out/street-segment-schema.js +21 -2
- package/out/street-segment-schema.js.map +1 -1
- package/out/types.d.ts +18 -6
- package/out/types.d.ts.map +1 -1
- package/out/unified-schema.d.ts +1 -1
- package/out/unified-schema.d.ts.map +1 -1
- package/out/unified-schema.js +2 -2
- package/out/unified-schema.js.map +1 -1
- package/package.json +13 -5
- package/poi-lookup.ts +53 -21
- package/poi-schema.ts +43 -13
- package/postal-city-alias-lookup.ts +20 -6
- package/postal-city-alias-schema.ts +28 -9
- package/postal-city-candidate-schema.ts +15 -5
- package/postcode-point-lookup.ts +6 -2
- package/ranking-weights.ts +148 -0
- package/reverse.ts +47 -10
- package/sharding.ts +13 -6
- package/sqlite-convention-source.ts +4 -1
- package/street-centroid-schema.ts +35 -11
- package/street-centroid.ts +10 -3
- package/street-morphology-fst-builder.ts +25 -9
- package/street-morphology-fst-loader.ts +103 -0
- package/street-name-lookup.ts +19 -7
- package/street-normalize.ts +28 -13
- package/street-segment-schema.ts +83 -13
- package/types.ts +18 -6
- package/unified-schema.ts +11 -2
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"geonames-aliases.d.ts","sourceRoot":"","sources":["../geonames-aliases.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AAIH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAA;AAI/C;;;GAGG;AACH,eAAO,MAAM,gBAAgB,gBAAoB,CAAA;AAEjD
|
|
1
|
+
{"version":3,"file":"geonames-aliases.d.ts","sourceRoot":"","sources":["../geonames-aliases.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AAIH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAA;AAI/C;;;GAGG;AACH,eAAO,MAAM,gBAAgB,gBAAoB,CAAA;AAEjD;;GAEG;AACH,MAAM,WAAW,sBAAsB;IACtC;;OAEG;IACH,OAAO,EAAE,MAAM,CAAA;IACf;;OAEG;IACH,MAAM,EAAE,MAAM,CAAA;IACd;;OAEG;IACH,OAAO,EAAE,OAAO,CAAA;CAChB;AA6FD;;;;;;;GAOG;AACH,wBAAgB,qBAAqB,CACpC,EAAE,EAAE,YAAY,EAChB,SAAS,EAAE,MAAM,EAAE,EACnB,WAAW,EAAE,MAAM,EACnB,UAAU,CAAC,EAAE,CAAC,KAAK,EAAE,sBAAsB,KAAK,IAAI,EACpD,IAAI,CAAC,EAAE;IACN;;;;;;OAMG;IACH,iBAAiB,CAAC,EAAE,WAAW,CAAC,MAAM,CAAC,CAAA;IACvC;;;;;;;OAOG;IACH,YAAY,CAAC,EAAE,MAAM,CAAA;CACrB,GACC,MAAM,CA8KR"}
|
package/out/geonames-aliases.js
CHANGED
|
@@ -31,6 +31,77 @@ import { isOfficialLanguage } from "@mailwoman/codex/country";
|
|
|
31
31
|
* Overture, GeoNames) never collide in a combined DB.
|
|
32
32
|
*/
|
|
33
33
|
export const GEONAMES_ID_BASE = 9_000_000_000_000;
|
|
34
|
+
/**
|
|
35
|
+
* Parse a country's alternateNamesV2 file into `geonameid -> spelling -> attribution`, restricted to the populated
|
|
36
|
+
* places (`P`) present in `lines`.
|
|
37
|
+
*/
|
|
38
|
+
function parseAlternateNamesV2(v2File, cc, lines) {
|
|
39
|
+
const wanted = new Set();
|
|
40
|
+
for (const line of lines) {
|
|
41
|
+
const f = line.split("\t");
|
|
42
|
+
if (f[6] === "P") {
|
|
43
|
+
wanted.add(Number(f[0]));
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
const v2 = new Map();
|
|
47
|
+
// V2 columns (0-indexed): 1 geonameid, 2 isolanguage, 3 name, 4 isPreferredName, 5 isShortName,
|
|
48
|
+
// 6 isColloquial, 7 isHistoric, 8 from, 9 to.
|
|
49
|
+
//
|
|
50
|
+
// Two passes, because historic-ness is a fact about the NAME, not the row: GeoNames splits one
|
|
51
|
+
// spelling across rows — Malabo carries "Santa Isabel" as (es, unflagged) AND as (no-language,
|
|
52
|
+
// isHistoric=1, to=1973). Officialness must see the flags from EVERY row for the spelling, or the
|
|
53
|
+
// colonial-era name sails through on the language-tagged row (the #936 review's Malabo finding).
|
|
54
|
+
// Do NOT gate on isPreferredName instead — it's sparse annotation, not a signal (Turku's sv "Åbo"
|
|
55
|
+
// is unflagged; FI has 1,746 flags across the whole dump).
|
|
56
|
+
const v2Lines = readFileSync(v2File, "utf8").split("\n");
|
|
57
|
+
const historicNames = new Set();
|
|
58
|
+
for (const line of v2Lines) {
|
|
59
|
+
if (!line)
|
|
60
|
+
continue;
|
|
61
|
+
const f = line.split("\t");
|
|
62
|
+
if (f[6] === "1" || f[7] === "1" || (f[9] ?? "").trim() !== "") {
|
|
63
|
+
const alt = (f[3] ?? "").trim();
|
|
64
|
+
if (alt && wanted.has(Number(f[1]))) {
|
|
65
|
+
historicNames.add(`${f[1]}|${alt}`);
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
for (const line of v2Lines) {
|
|
70
|
+
if (!line)
|
|
71
|
+
continue;
|
|
72
|
+
const f = line.split("\t");
|
|
73
|
+
const gid = Number(f[1]);
|
|
74
|
+
if (!wanted.has(gid))
|
|
75
|
+
continue;
|
|
76
|
+
const lang = f[2] ?? "";
|
|
77
|
+
// ISO 639 codes are 2-3 letters; GeoNames' pseudo-codes (post, link, iata, wkdt, …) are 4+.
|
|
78
|
+
if (!/^[a-z]{2,3}$/.test(lang))
|
|
79
|
+
continue;
|
|
80
|
+
const alt = (f[3] ?? "").trim();
|
|
81
|
+
if (!alt)
|
|
82
|
+
continue;
|
|
83
|
+
const preferred = f[4] === "1";
|
|
84
|
+
const official = !historicNames.has(`${gid}|${alt}`) && isOfficialLanguage(cc, lang) ? 1 : 0;
|
|
85
|
+
let byName = v2.get(gid);
|
|
86
|
+
if (!byName) {
|
|
87
|
+
v2.set(gid, (byName = new Map()));
|
|
88
|
+
}
|
|
89
|
+
const prev = byName.get(alt);
|
|
90
|
+
if (!prev) {
|
|
91
|
+
byName.set(alt, { language: lang, privateuse: preferred ? "preferred" : "", official });
|
|
92
|
+
}
|
|
93
|
+
else {
|
|
94
|
+
if (official && !prev.official) {
|
|
95
|
+
prev.language = lang;
|
|
96
|
+
prev.official = 1;
|
|
97
|
+
}
|
|
98
|
+
if (preferred && !prev.privateuse) {
|
|
99
|
+
prev.privateuse = "preferred";
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
return v2;
|
|
104
|
+
}
|
|
34
105
|
/**
|
|
35
106
|
* Fold the GeoNames `P`-class places (+ their Latin alt-names) for `countries` into `db`'s `spr` / `names` /
|
|
36
107
|
* `place_population` tables. Returns the total places ingested.
|
|
@@ -83,73 +154,7 @@ export function ingestGeonamesAliases(db, countries, geonamesDir, onProgress, op
|
|
|
83
154
|
// dump repeats one spelling under several languages ("Åbo" sv/da/no); the merged tag is official /
|
|
84
155
|
// preferred if ANY qualifying row is.
|
|
85
156
|
const v2File = opts?.alternateDir ? join(opts.alternateDir, `${cc}.txt`) : undefined;
|
|
86
|
-
|
|
87
|
-
if (v2File && existsSync(v2File)) {
|
|
88
|
-
const wanted = new Set();
|
|
89
|
-
for (const line of lines) {
|
|
90
|
-
const f = line.split("\t");
|
|
91
|
-
if (f[6] === "P") {
|
|
92
|
-
wanted.add(Number(f[0]));
|
|
93
|
-
}
|
|
94
|
-
}
|
|
95
|
-
v2 = new Map();
|
|
96
|
-
// V2 columns (0-indexed): 1 geonameid, 2 isolanguage, 3 name, 4 isPreferredName, 5 isShortName,
|
|
97
|
-
// 6 isColloquial, 7 isHistoric, 8 from, 9 to.
|
|
98
|
-
//
|
|
99
|
-
// Two passes, because historic-ness is a fact about the NAME, not the row: GeoNames splits one
|
|
100
|
-
// spelling across rows — Malabo carries "Santa Isabel" as (es, unflagged) AND as (no-language,
|
|
101
|
-
// isHistoric=1, to=1973). Officialness must see the flags from EVERY row for the spelling, or the
|
|
102
|
-
// colonial-era name sails through on the language-tagged row (the #936 review's Malabo finding).
|
|
103
|
-
// Do NOT gate on isPreferredName instead — it's sparse annotation, not a signal (Turku's sv "Åbo"
|
|
104
|
-
// is unflagged; FI has 1,746 flags across the whole dump).
|
|
105
|
-
const v2Lines = readFileSync(v2File, "utf8").split("\n");
|
|
106
|
-
const historicNames = new Set();
|
|
107
|
-
for (const line of v2Lines) {
|
|
108
|
-
if (!line)
|
|
109
|
-
continue;
|
|
110
|
-
const f = line.split("\t");
|
|
111
|
-
if (f[6] === "1" || f[7] === "1" || (f[9] ?? "").trim() !== "") {
|
|
112
|
-
const alt = (f[3] ?? "").trim();
|
|
113
|
-
if (alt && wanted.has(Number(f[1]))) {
|
|
114
|
-
historicNames.add(`${f[1]}|${alt}`);
|
|
115
|
-
}
|
|
116
|
-
}
|
|
117
|
-
}
|
|
118
|
-
for (const line of v2Lines) {
|
|
119
|
-
if (!line)
|
|
120
|
-
continue;
|
|
121
|
-
const f = line.split("\t");
|
|
122
|
-
const gid = Number(f[1]);
|
|
123
|
-
if (!wanted.has(gid))
|
|
124
|
-
continue;
|
|
125
|
-
const lang = f[2] ?? "";
|
|
126
|
-
// ISO 639 codes are 2-3 letters; GeoNames' pseudo-codes (post, link, iata, wkdt, …) are 4+.
|
|
127
|
-
if (!/^[a-z]{2,3}$/.test(lang))
|
|
128
|
-
continue;
|
|
129
|
-
const alt = (f[3] ?? "").trim();
|
|
130
|
-
if (!alt)
|
|
131
|
-
continue;
|
|
132
|
-
const preferred = f[4] === "1";
|
|
133
|
-
const official = !historicNames.has(`${gid}|${alt}`) && isOfficialLanguage(cc, lang) ? 1 : 0;
|
|
134
|
-
let byName = v2.get(gid);
|
|
135
|
-
if (!byName) {
|
|
136
|
-
v2.set(gid, (byName = new Map()));
|
|
137
|
-
}
|
|
138
|
-
const prev = byName.get(alt);
|
|
139
|
-
if (!prev) {
|
|
140
|
-
byName.set(alt, { language: lang, privateuse: preferred ? "preferred" : "", official });
|
|
141
|
-
}
|
|
142
|
-
else {
|
|
143
|
-
if (official && !prev.official) {
|
|
144
|
-
prev.language = lang;
|
|
145
|
-
prev.official = 1;
|
|
146
|
-
}
|
|
147
|
-
if (preferred && !prev.privateuse) {
|
|
148
|
-
prev.privateuse = "preferred";
|
|
149
|
-
}
|
|
150
|
-
}
|
|
151
|
-
}
|
|
152
|
-
}
|
|
157
|
+
const v2 = v2File && existsSync(v2File) ? parseAlternateNamesV2(v2File, cc, lines) : undefined;
|
|
153
158
|
// #267 admin pre-pass (gap countries): fold the country (PCLI) + regions (ADM1), self+ancestry them, and
|
|
154
159
|
// build the admin1→region map the localities link through. Point bbox (GeoNames gives a centroid only).
|
|
155
160
|
let countryID = -1;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"geonames-aliases.js","sourceRoot":"","sources":["../geonames-aliases.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AAEH,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,SAAS,CAAA;AAClD,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAA;AAGhC,OAAO,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAA;AAE7D;;;GAGG;AACH,MAAM,CAAC,MAAM,gBAAgB,GAAG,iBAAiB,CAAA;
|
|
1
|
+
{"version":3,"file":"geonames-aliases.js","sourceRoot":"","sources":["../geonames-aliases.ts"],"names":[],"mappings":"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"}
|
package/out/geonames-postal.d.ts
CHANGED
|
@@ -47,11 +47,17 @@ export declare const GEONAMES_POSTAL_ID_BASE = 9500000000000;
|
|
|
47
47
|
*/
|
|
48
48
|
export declare function normalizePostcodeName(raw: string): string;
|
|
49
49
|
export interface GeonamesPostalIngestResult {
|
|
50
|
-
/**
|
|
50
|
+
/**
|
|
51
|
+
* Distinct postcodes inserted across all countries.
|
|
52
|
+
*/
|
|
51
53
|
inserted: number;
|
|
52
|
-
/**
|
|
54
|
+
/**
|
|
55
|
+
* Per-country distinct-postcode counts.
|
|
56
|
+
*/
|
|
53
57
|
byCountry: Record<string, number>;
|
|
54
|
-
/**
|
|
58
|
+
/**
|
|
59
|
+
* Countries whose `<CC>.txt` was missing under the postal dir (skipped, reported).
|
|
60
|
+
*/
|
|
55
61
|
missing: string[];
|
|
56
62
|
}
|
|
57
63
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"geonames-postal.d.ts","sourceRoot":"","sources":["../geonames-postal.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkCG;AAIH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAA;
|
|
1
|
+
{"version":3,"file":"geonames-postal.d.ts","sourceRoot":"","sources":["../geonames-postal.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkCG;AAIH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAA;AAQ/C;;;;GAIG;AACH,eAAO,MAAM,uBAAuB,gBAAoB,CAAA;AAExD;;;;GAIG;AACH,wBAAgB,qBAAqB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAEzD;AAED,MAAM,WAAW,0BAA0B;IAC1C;;OAEG;IACH,QAAQ,EAAE,MAAM,CAAA;IAChB;;OAEG;IACH,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IACjC;;OAEG;IACH,OAAO,EAAE,MAAM,EAAE,CAAA;CACjB;AAED;;;;;GAKG;AACH,wBAAgB,oBAAoB,CACnC,EAAE,EAAE,YAAY,EAChB,SAAS,EAAE,SAAS,MAAM,EAAE,EAC5B,SAAS,EAAE,MAAM,GACf,0BAA0B,CAkF5B"}
|
package/out/geonames-postal.js
CHANGED
|
@@ -35,6 +35,11 @@
|
|
|
35
35
|
*/
|
|
36
36
|
import { existsSync, readFileSync } from "node:fs";
|
|
37
37
|
import { join } from "node:path";
|
|
38
|
+
/**
|
|
39
|
+
* Column count of a GeoNames postal-code TSV row. Short rows are truncated or blank and are skipped. See the
|
|
40
|
+
* allCountries.zip readme for the field list.
|
|
41
|
+
*/
|
|
42
|
+
const GEONAMES_POSTAL_COLUMNS = 11;
|
|
38
43
|
/**
|
|
39
44
|
* Synthetic id base for GeoNames-POSTAL rows — its own namespace above the alias fold's {@link GEONAMES_ID_BASE} (9e12)
|
|
40
45
|
* allocation so all four sources (WOF, Overture, GeoNames-alias, GeoNames-postal) coexist collision-free in a combined
|
|
@@ -47,7 +52,7 @@ export const GEONAMES_POSTAL_ID_BASE = 9_500_000_000_000;
|
|
|
47
52
|
* `"11-041"` → `"11041"`, `"AD500"` → `"AD500"`.
|
|
48
53
|
*/
|
|
49
54
|
export function normalizePostcodeName(raw) {
|
|
50
|
-
return raw.
|
|
55
|
+
return raw.replaceAll(/[^\p{L}\p{N}]/gu, "");
|
|
51
56
|
}
|
|
52
57
|
/**
|
|
53
58
|
* Fold GeoNames postal codes for `countries` into an open unified/postcode ingest DB: one `spr` row per distinct
|
|
@@ -74,7 +79,7 @@ export function ingestGeonamesPostal(db, countries, postalDir) {
|
|
|
74
79
|
const members = new Map();
|
|
75
80
|
for (const line of readFileSync(file, "utf8").split("\n")) {
|
|
76
81
|
const cols = line.split("\t");
|
|
77
|
-
if (cols.length <
|
|
82
|
+
if (cols.length < GEONAMES_POSTAL_COLUMNS)
|
|
78
83
|
continue;
|
|
79
84
|
const display = cols[1].trim();
|
|
80
85
|
const name = normalizePostcodeName(display);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"geonames-postal.js","sourceRoot":"","sources":["../geonames-postal.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkCG;AAEH,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,SAAS,CAAA;AAClD,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAA;AAGhC;;;;GAIG;AACH,MAAM,CAAC,MAAM,uBAAuB,GAAG,iBAAiB,CAAA;AAExD;;;;GAIG;AACH,MAAM,UAAU,qBAAqB,CAAC,GAAW;IAChD,OAAO,GAAG,CAAC,
|
|
1
|
+
{"version":3,"file":"geonames-postal.js","sourceRoot":"","sources":["../geonames-postal.ts"],"names":[],"mappings":"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"}
|
package/out/index.d.ts
CHANGED
|
@@ -8,6 +8,8 @@ export type { AncestorsTable, CoincidentRolesTable, ConcordancesTable, GeojsonTa
|
|
|
8
8
|
export { WOFSqlitePlaceLookup, type RankingWeights, type WOFSqlitePlaceLookupOpts } from "./lookup.ts";
|
|
9
9
|
export { CANDIDATE_FTS_TABLE, createCandidateFTS } from "./candidate-fts.ts";
|
|
10
10
|
export { WOFCandidateTableLookup, type WOFCandidateTableLookupOpts } from "./candidate-lookup.ts";
|
|
11
|
+
export { COUNTRY_BBOX_TABLE, COUNTRY_COVERAGE_TABLE, createCountryBBoxTable, createCountryCoverageTable, readGazetteerCoverageManifest, writeGazetteerCoverageManifest, } from "./coverage-manifest-schema.ts";
|
|
12
|
+
export type { CountryBBoxTable, CountryCoverageTable, GazetteerCoverageDatabase } from "./coverage-manifest-schema.ts";
|
|
11
13
|
export { SQLiteStreetNameLookup, type SQLiteStreetNameLookupOpts } from "./street-name-lookup.ts";
|
|
12
14
|
export { GEONAMES_ID_BASE, ingestGeonamesAliases, type GeonamesIngestProgress } from "./geonames-aliases.ts";
|
|
13
15
|
export { ADDRESS_POINT_COLUMNS, createAddressPointIndexes, createAddressPointTable } from "./address-point-schema.ts";
|
package/out/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,YAAY,EAAE,cAAc,EAAE,OAAO,EAAE,QAAQ,EAAE,cAAc,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,YAAY,CAAA;AAE9G,YAAY,EACX,cAAc,EACd,oBAAoB,EACpB,iBAAiB,EACjB,YAAY,EACZ,UAAU,EACV,cAAc,EACd,oBAAoB,EACpB,gBAAgB,EAChB,QAAQ,EACR,WAAW,GACX,MAAM,aAAa,CAAA;AAEpB,OAAO,EAAE,oBAAoB,EAAE,KAAK,cAAc,EAAE,KAAK,wBAAwB,EAAE,MAAM,aAAa,CAAA;AAEtG,OAAO,EAAE,mBAAmB,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAA;AAC5E,OAAO,EAAE,uBAAuB,EAAE,KAAK,2BAA2B,EAAE,MAAM,uBAAuB,CAAA;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":"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"}
|
package/out/index.js
CHANGED
|
@@ -6,6 +6,7 @@
|
|
|
6
6
|
export { WOFSqlitePlaceLookup } from "./lookup.js";
|
|
7
7
|
export { CANDIDATE_FTS_TABLE, createCandidateFTS } from "./candidate-fts.js";
|
|
8
8
|
export { WOFCandidateTableLookup } from "./candidate-lookup.js";
|
|
9
|
+
export { COUNTRY_BBOX_TABLE, COUNTRY_COVERAGE_TABLE, createCountryBBoxTable, createCountryCoverageTable, readGazetteerCoverageManifest, writeGazetteerCoverageManifest, } from "./coverage-manifest-schema.js";
|
|
9
10
|
export { SQLiteStreetNameLookup } from "./street-name-lookup.js";
|
|
10
11
|
export { GEONAMES_ID_BASE, ingestGeonamesAliases } from "./geonames-aliases.js";
|
|
11
12
|
export { ADDRESS_POINT_COLUMNS, createAddressPointIndexes, createAddressPointTable } from "./address-point-schema.js";
|
package/out/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAiBH,OAAO,EAAE,oBAAoB,EAAsD,MAAM,aAAa,CAAA;AAEtG,OAAO,EAAE,mBAAmB,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAA;AAC5E,OAAO,EAAE,uBAAuB,EAAoC,MAAM,uBAAuB,CAAA;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAiBH,OAAO,EAAE,oBAAoB,EAAsD,MAAM,aAAa,CAAA;AAEtG,OAAO,EAAE,mBAAmB,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAA;AAC5E,OAAO,EAAE,uBAAuB,EAAoC,MAAM,uBAAuB,CAAA;AAEjG,OAAO,EACN,kBAAkB,EAClB,sBAAsB,EACtB,sBAAsB,EACtB,0BAA0B,EAC1B,6BAA6B,EAC7B,8BAA8B,GAC9B,MAAM,+BAA+B,CAAA;AAGtC,OAAO,EAAE,sBAAsB,EAAmC,MAAM,yBAAyB,CAAA;AAEjG,OAAO,EAAE,gBAAgB,EAAE,qBAAqB,EAA+B,MAAM,uBAAuB,CAAA;AAE5G,OAAO,EAAE,qBAAqB,EAAE,yBAAyB,EAAE,uBAAuB,EAAE,MAAM,2BAA2B,CAAA;AAGrH,OAAO,EACN,wBAAwB,GAGxB,MAAM,+BAA+B,CAAA;AAItC,OAAO,EACN,6BAA6B,EAC7B,2BAA2B,EAC3B,8BAA8B,GAC9B,MAAM,mCAAmC,CAAA;AAI1C,OAAO,EACN,wBAAwB,EACxB,sBAAsB,EACtB,oBAAoB,EACpB,aAAa,EACb,gBAAgB,EAChB,iBAAiB,GAMjB,MAAM,iBAAiB,CAAA;AAExB,OAAO,EAAE,sBAAsB,EAAE,MAAM,+BAA+B,CAAA;AAEtE,OAAO,EAAE,iBAAiB,EAAsB,MAAM,4BAA4B,CAAA;AAElF,OAAO,EACN,gBAAgB,EAChB,kBAAkB,EAClB,mBAAmB,EACnB,eAAe,EACf,oBAAoB,GAGpB,MAAM,UAAU,CAAA;AAEjB,OAAO,EACN,UAAU,EACV,gBAAgB,EAChB,WAAW,EACX,mBAAmB,EACnB,WAAW,GAMX,MAAM,UAAU,CAAA;AAEjB,OAAO,EAAE,eAAe,EAAE,eAAe,EAAE,cAAc,EAAyB,MAAM,eAAe,CAAA;AAEvG,OAAO,EACN,kBAAkB,GAKlB,MAAM,cAAc,CAAA;AAErB,OAAO,EAAE,wBAAwB,EAAE,MAAM,kCAAkC,CAAA;AAC3E,OAAO,EAAE,wBAAwB,EAAE,MAAM,oBAAoB,CAAA;AAE7D,OAAO,EACN,uBAAuB,EACvB,2BAA2B,EAC3B,yBAAyB,GACzB,MAAM,6BAA6B,CAAA;AAGpC,OAAO,EAAE,0BAA0B,EAAE,MAAM,sBAAsB,CAAA;AAEjE,OAAO,EACN,kBAAkB,GAIlB,MAAM,oBAAoB,CAAA;AAE3B,OAAO,EACN,gBAAgB,EAChB,qBAAqB,EACrB,aAAa,GAGb,MAAM,eAAe,CAAA"}
|
package/out/interpolation.d.ts
CHANGED
|
@@ -36,13 +36,19 @@ import type { InterpolationLookup } from "@mailwoman/resolver";
|
|
|
36
36
|
* fallback for streets too sparse to bracket.
|
|
37
37
|
*/
|
|
38
38
|
export type InterpolationMethod = "address_point" | "tiger_range";
|
|
39
|
-
/**
|
|
39
|
+
/**
|
|
40
|
+
* One interpolated coordinate estimate. Never an exact situs point — see `uncertaintyM`.
|
|
41
|
+
*/
|
|
40
42
|
export interface InterpolatedHit {
|
|
41
43
|
lat: number;
|
|
42
44
|
lon: number;
|
|
43
|
-
/**
|
|
45
|
+
/**
|
|
46
|
+
* Always true — the tier's honesty flag, mirrored into `resolution_tier` when wired.
|
|
47
|
+
*/
|
|
44
48
|
interpolated: true;
|
|
45
|
-
/**
|
|
49
|
+
/**
|
|
50
|
+
* Which rung answered — see {@link InterpolationMethod}.
|
|
51
|
+
*/
|
|
46
52
|
method: InterpolationMethod;
|
|
47
53
|
/**
|
|
48
54
|
* `tiger_range` only. True when the matched segment side's parity agrees with the house number (or the side is
|
|
@@ -59,15 +65,21 @@ export interface InterpolatedHit {
|
|
|
59
65
|
* span (`address_point`/`both`), or the explicitly larger extrapolation penalty (`address_point`/`single`).
|
|
60
66
|
*/
|
|
61
67
|
uncertaintyM: number;
|
|
62
|
-
/**
|
|
68
|
+
/**
|
|
69
|
+
* Provenance, e.g. `"tiger:edges"`.
|
|
70
|
+
*/
|
|
63
71
|
source: string;
|
|
64
|
-
/**
|
|
72
|
+
/**
|
|
73
|
+
* Pinned data vintage, e.g. `"TIGER2023"`.
|
|
74
|
+
*/
|
|
65
75
|
release: string;
|
|
66
76
|
}
|
|
67
77
|
export interface InterpolationQuery {
|
|
68
78
|
street: string;
|
|
69
79
|
number: string;
|
|
70
|
-
/**
|
|
80
|
+
/**
|
|
81
|
+
* ZIP scope — strongly preferred; without it common street names abstain (see module doc).
|
|
82
|
+
*/
|
|
71
83
|
postcode?: string;
|
|
72
84
|
}
|
|
73
85
|
export declare class StreetInterpolator implements InterpolationLookup {
|
|
@@ -76,6 +88,12 @@ export declare class StreetInterpolator implements InterpolationLookup {
|
|
|
76
88
|
dbPath?: string;
|
|
77
89
|
database?: DatabaseSync;
|
|
78
90
|
});
|
|
91
|
+
/**
|
|
92
|
+
* The artifact's own conformal radius multiplier (#374), read from the shard's `interp_calibration` metadata table at
|
|
93
|
+
* construction. `undefined` = the shard predates the table (or carries no valid row) — the resolver then applies no
|
|
94
|
+
* artifact default and callers may supply a legacy fallback.
|
|
95
|
+
*/
|
|
96
|
+
get radiusCalibration(): number | undefined;
|
|
79
97
|
find(query: InterpolationQuery): InterpolatedHit | null;
|
|
80
98
|
close(): void;
|
|
81
99
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"interpolation.d.ts","sourceRoot":"","sources":["../interpolation.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAA;AAE1C,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAA;
|
|
1
|
+
{"version":3,"file":"interpolation.d.ts","sourceRoot":"","sources":["../interpolation.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAA;AAE1C,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAA;AAO9D;;;;;;;GAOG;AACH,MAAM,MAAM,mBAAmB,GAAG,eAAe,GAAG,aAAa,CAAA;AAEjE;;GAEG;AACH,MAAM,WAAW,eAAe;IAC/B,GAAG,EAAE,MAAM,CAAA;IACX,GAAG,EAAE,MAAM,CAAA;IACX;;OAEG;IACH,YAAY,EAAE,IAAI,CAAA;IAClB;;OAEG;IACH,MAAM,EAAE,mBAAmB,CAAA;IAC3B;;;OAGG;IACH,aAAa,CAAC,EAAE,OAAO,CAAA;IACvB;;;OAGG;IACH,OAAO,CAAC,EAAE,MAAM,GAAG,QAAQ,CAAA;IAC3B;;;OAGG;IACH,YAAY,EAAE,MAAM,CAAA;IACpB;;OAEG;IACH,MAAM,EAAE,MAAM,CAAA;IACd;;OAEG;IACH,OAAO,EAAE,MAAM,CAAA;CACf;AAED,MAAM,WAAW,kBAAkB;IAClC,MAAM,EAAE,MAAM,CAAA;IACd,MAAM,EAAE,MAAM,CAAA;IACd;;OAEG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAA;CACjB;AAcD,qBAAa,kBAAmB,YAAW,mBAAmB;;gBAOjD,IAAI,EAAE;QAAE,MAAM,CAAC,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,EAAE,YAAY,CAAA;KAAE;IA6C9D;;;;OAIG;IACH,IAAI,iBAAiB,IAAI,MAAM,GAAG,SAAS,CAE1C;IAED,IAAI,CAAC,KAAK,EAAE,kBAAkB,GAAG,eAAe,GAAG,IAAI;IA8DvD,KAAK,IAAI,IAAI;CAKb"}
|
package/out/interpolation.js
CHANGED
|
@@ -26,6 +26,7 @@
|
|
|
26
26
|
* `AddressPointLookup.find()` to keep that wiring mechanical.
|
|
27
27
|
*/
|
|
28
28
|
import { DatabaseSync } from "node:sqlite";
|
|
29
|
+
import { clampFraction, pointAlong } from "@mailwoman/spatial";
|
|
29
30
|
import { haversineKm } from "./geo.js";
|
|
30
31
|
import { hasTable } from "./sqlite-utils.js";
|
|
31
32
|
import { canonicalizeRouteKey, normalizeStreetForKey } from "./street-normalize.js";
|
|
@@ -34,6 +35,7 @@ export class StreetInterpolator {
|
|
|
34
35
|
#ownsDB;
|
|
35
36
|
#byPostcode;
|
|
36
37
|
#byStreet;
|
|
38
|
+
#radiusCalibration;
|
|
37
39
|
constructor(opts) {
|
|
38
40
|
if (opts.database) {
|
|
39
41
|
this.#db = opts.database;
|
|
@@ -55,6 +57,26 @@ export class StreetInterpolator {
|
|
|
55
57
|
this.#byStreet = this.#db.prepare(`SELECT ${columns} FROM street_segment
|
|
56
58
|
WHERE street_norm = ? AND min_hn <= ? AND max_hn >= ?`);
|
|
57
59
|
}
|
|
60
|
+
// #374 doctrine: the conformal radius multiplier is a property of the calibration set the ARTIFACT was
|
|
61
|
+
// built against, so it ships in the shard's `interp_calibration` metadata table (street-segment-schema.ts)
|
|
62
|
+
// and is read here, once, at open time — sync raw `.prepare()` per the sync-by-interface doctrine
|
|
63
|
+
// (AGENTS.md). Shards predating the table (the pre-2026-07 fleet) yield `undefined`; callers then fall
|
|
64
|
+
// back to their in-code table, byte-identically.
|
|
65
|
+
if (hasTable(this.#db, "interp_calibration")) {
|
|
66
|
+
const row = this.#db.prepare("SELECT radius_multiplier FROM interp_calibration LIMIT 1").get();
|
|
67
|
+
const value = row?.radius_multiplier;
|
|
68
|
+
if (typeof value === "number" && Number.isFinite(value) && value > 0) {
|
|
69
|
+
this.#radiusCalibration = value;
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
/**
|
|
74
|
+
* The artifact's own conformal radius multiplier (#374), read from the shard's `interp_calibration` metadata table at
|
|
75
|
+
* construction. `undefined` = the shard predates the table (or carries no valid row) — the resolver then applies no
|
|
76
|
+
* artifact default and callers may supply a legacy fallback.
|
|
77
|
+
*/
|
|
78
|
+
get radiusCalibration() {
|
|
79
|
+
return this.#radiusCalibration;
|
|
58
80
|
}
|
|
59
81
|
find(query) {
|
|
60
82
|
if (!this.#byPostcode || !this.#byStreet)
|
|
@@ -80,21 +102,26 @@ export class StreetInterpolator {
|
|
|
80
102
|
if (postcodes.size > 1)
|
|
81
103
|
return null;
|
|
82
104
|
}
|
|
83
|
-
if (rows.length
|
|
105
|
+
if (!rows.length)
|
|
84
106
|
return null;
|
|
85
107
|
// Parity preference: exact side first, then 'mixed' (matches either), then the
|
|
86
108
|
// opposite side as a flagged fallback.
|
|
87
109
|
const wantOdd = n % 2 === 1;
|
|
88
110
|
const exact = rows.filter((r) => r.parity === (wantOdd ? "odd" : "even"));
|
|
89
111
|
const mixed = rows.filter((r) => r.parity === "mixed");
|
|
90
|
-
const preferred = exact.length
|
|
91
|
-
const pool = preferred.length
|
|
112
|
+
const preferred = exact.length ? exact : mixed;
|
|
113
|
+
const pool = preferred.length ? preferred : rows;
|
|
92
114
|
const parityMatched = preferred.length > 0;
|
|
93
115
|
// Tightest range wins — the most specific claim about where this number lives.
|
|
94
|
-
|
|
116
|
+
let best = pool[0];
|
|
117
|
+
for (const candidate of pool) {
|
|
118
|
+
if (candidate.max_hn - candidate.min_hn < best.max_hn - best.min_hn) {
|
|
119
|
+
best = candidate;
|
|
120
|
+
}
|
|
121
|
+
}
|
|
95
122
|
const polyline = JSON.parse(best.geometry);
|
|
96
123
|
const span = best.to_hn - best.from_hn;
|
|
97
|
-
const t = span === 0 ? 0.5 :
|
|
124
|
+
const t = span === 0 ? 0.5 : clampFraction((n - best.from_hn) / span);
|
|
98
125
|
const [lon, lat, lengthKm] = pointAlong(polyline, t);
|
|
99
126
|
return {
|
|
100
127
|
lat,
|
|
@@ -113,39 +140,4 @@ export class StreetInterpolator {
|
|
|
113
140
|
}
|
|
114
141
|
}
|
|
115
142
|
}
|
|
116
|
-
function clamp01(t) {
|
|
117
|
-
return t < 0 ? 0 : t > 1 ? 1 : t;
|
|
118
|
-
}
|
|
119
|
-
/**
|
|
120
|
-
* Point at fraction `t` of the polyline's total arc length (haversine), plus the total length in km. `t` is assumed
|
|
121
|
-
* clamped to [0, 1].
|
|
122
|
-
*/
|
|
123
|
-
function pointAlong(polyline, t) {
|
|
124
|
-
const legs = [];
|
|
125
|
-
let total = 0;
|
|
126
|
-
for (let i = 1; i < polyline.length; i++) {
|
|
127
|
-
const [aLon, aLat] = polyline[i - 1];
|
|
128
|
-
const [bLon, bLat] = polyline[i];
|
|
129
|
-
const d = haversineKm(aLat, aLon, bLat, bLon);
|
|
130
|
-
legs.push(d);
|
|
131
|
-
total += d;
|
|
132
|
-
}
|
|
133
|
-
if (total === 0) {
|
|
134
|
-
const [lon, lat] = polyline[0];
|
|
135
|
-
return [lon, lat, 0];
|
|
136
|
-
}
|
|
137
|
-
let remaining = t * total;
|
|
138
|
-
for (let i = 0; i < legs.length; i++) {
|
|
139
|
-
const leg = legs[i];
|
|
140
|
-
if (remaining <= leg || i === legs.length - 1) {
|
|
141
|
-
const f = leg === 0 ? 0 : clamp01(remaining / leg);
|
|
142
|
-
const [aLon, aLat] = polyline[i];
|
|
143
|
-
const [bLon, bLat] = polyline[i + 1];
|
|
144
|
-
return [aLon + (bLon - aLon) * f, aLat + (bLat - aLat) * f, total];
|
|
145
|
-
}
|
|
146
|
-
remaining -= leg;
|
|
147
|
-
}
|
|
148
|
-
const [lon, lat] = polyline[polyline.length - 1];
|
|
149
|
-
return [lon, lat, total];
|
|
150
|
-
}
|
|
151
143
|
//# sourceMappingURL=interpolation.js.map
|
package/out/interpolation.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"interpolation.js","sourceRoot":"","sources":["../interpolation.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAA;
|
|
1
|
+
{"version":3,"file":"interpolation.js","sourceRoot":"","sources":["../interpolation.ts"],"names":[],"mappings":"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"}
|