@fieldia/map 0.0.0-stage → 0.14.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/LICENSE +21 -0
- package/README.md +91 -2
- package/package.json +37 -3
- package/src/index.d.mts +6 -0
- package/src/index.d.ts +6 -0
- package/src/index.js +22 -0
- package/src/index.js.map +1 -0
- package/src/index.mjs +6 -0
- package/src/index.mjs.map +1 -0
- package/src/lib/area.d.mts +3 -0
- package/src/lib/area.d.ts +3 -0
- package/src/lib/area.js +591 -0
- package/src/lib/area.js.map +1 -0
- package/src/lib/area.mjs +588 -0
- package/src/lib/area.mjs.map +1 -0
- package/src/lib/geo.d.mts +72 -0
- package/src/lib/geo.d.ts +72 -0
- package/src/lib/geo.js +149 -0
- package/src/lib/geo.js.map +1 -0
- package/src/lib/geo.mjs +134 -0
- package/src/lib/geo.mjs.map +1 -0
- package/src/lib/kinds.d.mts +35 -0
- package/src/lib/kinds.d.ts +35 -0
- package/src/lib/kinds.js +127 -0
- package/src/lib/kinds.js.map +1 -0
- package/src/lib/kinds.mjs +124 -0
- package/src/lib/kinds.mjs.map +1 -0
- package/src/lib/labels.d.mts +58 -0
- package/src/lib/labels.d.ts +58 -0
- package/src/lib/labels.js +214 -0
- package/src/lib/labels.js.map +1 -0
- package/src/lib/labels.mjs +209 -0
- package/src/lib/labels.mjs.map +1 -0
- package/src/lib/leaflet-css.d.mts +2 -0
- package/src/lib/leaflet-css.d.ts +2 -0
- package/src/lib/leaflet-css.js +34 -0
- package/src/lib/leaflet-css.js.map +1 -0
- package/src/lib/leaflet-css.mjs +31 -0
- package/src/lib/leaflet-css.mjs.map +1 -0
- package/src/lib/leaflet.d.mts +15 -0
- package/src/lib/leaflet.d.ts +15 -0
- package/src/lib/leaflet.js +76 -0
- package/src/lib/leaflet.js.map +1 -0
- package/src/lib/leaflet.mjs +72 -0
- package/src/lib/leaflet.mjs.map +1 -0
- package/src/lib/map-core.d.mts +47 -0
- package/src/lib/map-core.d.ts +47 -0
- package/src/lib/map-core.js +300 -0
- package/src/lib/map-core.js.map +1 -0
- package/src/lib/map-core.mjs +297 -0
- package/src/lib/map-core.mjs.map +1 -0
- package/src/lib/place.d.mts +3 -0
- package/src/lib/place.d.ts +3 -0
- package/src/lib/place.js +323 -0
- package/src/lib/place.js.map +1 -0
- package/src/lib/place.mjs +320 -0
- package/src/lib/place.mjs.map +1 -0
- package/src/lib/providers.d.mts +131 -0
- package/src/lib/providers.d.ts +131 -0
- package/src/lib/providers.js +224 -0
- package/src/lib/providers.js.map +1 -0
- package/src/lib/providers.mjs +217 -0
- package/src/lib/providers.mjs.map +1 -0
- package/src/lib/search-box.d.mts +28 -0
- package/src/lib/search-box.d.ts +28 -0
- package/src/lib/search-box.js +141 -0
- package/src/lib/search-box.js.map +1 -0
- package/src/lib/search-box.mjs +138 -0
- package/src/lib/search-box.mjs.map +1 -0
- package/src/lib/settings.d.mts +19 -0
- package/src/lib/settings.d.ts +19 -0
- package/src/lib/settings.js +3 -0
- package/src/lib/settings.js.map +1 -0
- package/src/lib/settings.mjs +2 -0
- package/src/lib/settings.mjs.map +1 -0
- package/src/lib/styles.d.mts +11 -0
- package/src/lib/styles.d.ts +11 -0
- package/src/lib/styles.js +127 -0
- package/src/lib/styles.js.map +1 -0
- package/src/lib/styles.mjs +122 -0
- package/src/lib/styles.mjs.map +1 -0
- package/src/lib/widgets.d.mts +14 -0
- package/src/lib/widgets.d.ts +14 -0
- package/src/lib/widgets.js +21 -0
- package/src/lib/widgets.js.map +1 -0
- package/src/lib/widgets.mjs +18 -0
- package/src/lib/widgets.mjs.map +1 -0
|
@@ -0,0 +1,224 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.openStreetMap = openStreetMap;
|
|
4
|
+
exports.azureMaps = azureMaps;
|
|
5
|
+
exports.googleMaps = googleMaps;
|
|
6
|
+
exports.mapbox = mapbox;
|
|
7
|
+
exports.tiles = tiles;
|
|
8
|
+
const query = (params) => Object.entries(params)
|
|
9
|
+
.filter(([, value]) => value !== undefined)
|
|
10
|
+
.map(([key, value]) => `${key}=${encodeURIComponent(String(value))}`)
|
|
11
|
+
.join('&');
|
|
12
|
+
async function getJson(fetchWith, url, init) {
|
|
13
|
+
const response = await fetchWith(url, init);
|
|
14
|
+
if (!response.ok)
|
|
15
|
+
throw new Error(`${response.status} from ${url.split('?')[0]}`);
|
|
16
|
+
return response.json();
|
|
17
|
+
}
|
|
18
|
+
const isObject = (value) => typeof value === 'object' && value !== null && !Array.isArray(value);
|
|
19
|
+
const pathOf = (value, ...path) => path.reduce((at, key) => (isObject(at) ? at[key] : undefined), value);
|
|
20
|
+
/** Places from a GeoJSON FeatureCollection, each named by the first of `labels` it has. */
|
|
21
|
+
function placesFrom(collection, ...labels) {
|
|
22
|
+
const features = pathOf(collection, 'features');
|
|
23
|
+
if (!Array.isArray(features))
|
|
24
|
+
return [];
|
|
25
|
+
return features.flatMap((feature) => {
|
|
26
|
+
const [lng, lat] = pathOf(feature, 'geometry', 'coordinates') ?? [];
|
|
27
|
+
const label = labels.map((path) => pathOf(feature, ...path)).find((text) => typeof text === 'string' && text.trim());
|
|
28
|
+
return typeof lat === 'number' && typeof lng === 'number' && typeof label === 'string' ? [{ label, lat, lng }] : [];
|
|
29
|
+
});
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* OpenStreetMap's own map images and Nominatim's search: free, for demos and
|
|
33
|
+
* development only. Their usage policies treat an app in production as heavy
|
|
34
|
+
* use, and Nominatim's forbids searching as people type.
|
|
35
|
+
*/
|
|
36
|
+
function openStreetMap(options = {}) {
|
|
37
|
+
const fetchWith = options.fetch ?? ((...args) => globalThis.fetch(...args));
|
|
38
|
+
return {
|
|
39
|
+
id: 'openstreetmap',
|
|
40
|
+
demoOnly: true,
|
|
41
|
+
searchAsYouType: false,
|
|
42
|
+
async tiles(kind) {
|
|
43
|
+
return kind === 'road' ? { url: 'https://tile.openstreetmap.org/{z}/{x}/{y}.png', maxZoom: 19 } : null;
|
|
44
|
+
},
|
|
45
|
+
async credits() {
|
|
46
|
+
return [{ text: '© OpenStreetMap contributors', href: 'https://www.openstreetmap.org/copyright' }];
|
|
47
|
+
},
|
|
48
|
+
async search({ text, locale, signal }) {
|
|
49
|
+
const found = await getJson(fetchWith, `https://nominatim.openstreetmap.org/search?${query({ format: 'jsonv2', limit: 5, q: text, 'accept-language': locale })}`, { signal });
|
|
50
|
+
return Array.isArray(found)
|
|
51
|
+
? found.flatMap((place) => {
|
|
52
|
+
const lat = Number(pathOf(place, 'lat'));
|
|
53
|
+
const lng = Number(pathOf(place, 'lon'));
|
|
54
|
+
const label = pathOf(place, 'display_name');
|
|
55
|
+
return Number.isFinite(lat) && Number.isFinite(lng) && typeof label === 'string' ? [{ label, lat, lng }] : [];
|
|
56
|
+
})
|
|
57
|
+
: [];
|
|
58
|
+
},
|
|
59
|
+
async reverse({ lat, lng, locale, signal }) {
|
|
60
|
+
const found = await getJson(fetchWith, `https://nominatim.openstreetmap.org/reverse?${query({ format: 'jsonv2', lat, lon: lng, 'accept-language': locale })}`, { signal });
|
|
61
|
+
const label = pathOf(found, 'display_name');
|
|
62
|
+
return typeof label === 'string' ? label : null;
|
|
63
|
+
},
|
|
64
|
+
};
|
|
65
|
+
}
|
|
66
|
+
/** Azure lists the languages it draws; it refuses any other tag, `ar-001` among them. */
|
|
67
|
+
const AZURE_LANGUAGE = { en: 'en-US', ar: 'ar', fr: 'fr-FR', de: 'de-DE' };
|
|
68
|
+
const AZURE_TILESET = { road: 'microsoft.base.road', dark: 'microsoft.base.darkgrey', satellite: 'microsoft.imagery' };
|
|
69
|
+
/** Microsoft Azure Maps: road, dark and satellite map images, credits for the view, and address search. */
|
|
70
|
+
function azureMaps(options) {
|
|
71
|
+
if (!options.key && !options.token)
|
|
72
|
+
throw new Error('azureMaps needs a key or a token');
|
|
73
|
+
const fetchWith = options.fetch ?? ((...args) => globalThis.fetch(...args));
|
|
74
|
+
const auth = options.key ? `&subscription-key=${encodeURIComponent(options.key)}` : '';
|
|
75
|
+
const headers = async () => options.key ? {} : { Authorization: `Bearer ${await options.token()}`, ...(options.clientId ? { 'x-ms-client-id': options.clientId } : {}) };
|
|
76
|
+
const ask = async (path, params, locale, signal) => getJson(fetchWith, `https://atlas.microsoft.com/${path}?${query(params)}${auth}`, {
|
|
77
|
+
signal,
|
|
78
|
+
headers: { ...(await headers()), ...(locale ? { 'Accept-Language': AZURE_LANGUAGE[locale] } : {}) },
|
|
79
|
+
});
|
|
80
|
+
return {
|
|
81
|
+
id: 'azure-maps',
|
|
82
|
+
searchAsYouType: true,
|
|
83
|
+
async tiles(kind, locale) {
|
|
84
|
+
const url = `https://atlas.microsoft.com/map/tile?api-version=2024-04-01&tilesetId=${AZURE_TILESET[kind]}&zoom={z}&x={x}&y={y}&tileSize=256&language=${AZURE_LANGUAGE[locale]}&view=Auto${auth}`;
|
|
85
|
+
return { url, maxZoom: kind === 'satellite' ? 19 : 22, ...(options.key ? {} : { headers }) };
|
|
86
|
+
},
|
|
87
|
+
async credits(kind, { zoom, bounds }) {
|
|
88
|
+
try {
|
|
89
|
+
const answer = await ask('map/attribution', { 'api-version': '2024-04-01', tilesetId: AZURE_TILESET[kind], zoom: Math.round(zoom), bounds: [bounds.west, bounds.south, bounds.east, bounds.north].join(',') });
|
|
90
|
+
const copyrights = pathOf(answer, 'copyrights');
|
|
91
|
+
if (Array.isArray(copyrights) && copyrights.length)
|
|
92
|
+
return copyrights.filter((c) => typeof c === 'string').map((text) => ({ text }));
|
|
93
|
+
}
|
|
94
|
+
catch {
|
|
95
|
+
// Its credits stay said even when the service that lists them is down.
|
|
96
|
+
}
|
|
97
|
+
return [{ text: '© Microsoft' }];
|
|
98
|
+
},
|
|
99
|
+
async search({ text, near, locale, signal }) {
|
|
100
|
+
const found = await ask('geocode', { 'api-version': '2023-06-01', top: 5, query: text, coordinates: near ? `${near.lng},${near.lat}` : undefined }, locale, signal);
|
|
101
|
+
return placesFrom(found, ['properties', 'address', 'formattedAddress']);
|
|
102
|
+
},
|
|
103
|
+
async reverse({ lat, lng, locale, signal }) {
|
|
104
|
+
const found = await ask('reverseGeocode', { 'api-version': '2023-06-01', coordinates: `${lng},${lat}` }, locale, signal);
|
|
105
|
+
return placesFrom(found, ['properties', 'address', 'formattedAddress'])[0]?.label ?? null;
|
|
106
|
+
},
|
|
107
|
+
};
|
|
108
|
+
}
|
|
109
|
+
const GOOGLE_MAP_TYPE = { road: 'roadmap', satellite: 'satellite' };
|
|
110
|
+
/**
|
|
111
|
+
* Google's map images through its Map Tiles API: a session for each kind and
|
|
112
|
+
* language, credits for the view, and Google's mark in the corner its terms
|
|
113
|
+
* name. Address search is the app's own here.
|
|
114
|
+
*/
|
|
115
|
+
function googleMaps(options) {
|
|
116
|
+
const fetchWith = options.fetch ?? ((...args) => globalThis.fetch(...args));
|
|
117
|
+
const key = encodeURIComponent(options.key);
|
|
118
|
+
const sessions = new Map();
|
|
119
|
+
function session(kind, locale) {
|
|
120
|
+
const mapType = GOOGLE_MAP_TYPE[kind];
|
|
121
|
+
const id = `${mapType}:${locale}`;
|
|
122
|
+
const known = sessions.get(id);
|
|
123
|
+
return known ?? open();
|
|
124
|
+
function open() {
|
|
125
|
+
const opening = getJson(fetchWith, `https://tile.googleapis.com/v1/createSession?key=${key}`, {
|
|
126
|
+
method: 'POST',
|
|
127
|
+
headers: { 'Content-Type': 'application/json' },
|
|
128
|
+
body: JSON.stringify({ mapType, language: locale, region: options.region ?? 'US' }),
|
|
129
|
+
}).then((answer) => {
|
|
130
|
+
const value = pathOf(answer, 'session');
|
|
131
|
+
if (typeof value !== 'string')
|
|
132
|
+
throw new Error('Google gave no session');
|
|
133
|
+
const expiry = Number(pathOf(answer, 'expiry')) * 1000;
|
|
134
|
+
// A session lasts about two weeks; one near its end is opened again.
|
|
135
|
+
if (Number.isFinite(expiry)) {
|
|
136
|
+
const timer = setTimeout(() => sessions.delete(id), Math.min(2 ** 31 - 1, Math.max(0, expiry - Date.now() - 3_600_000)));
|
|
137
|
+
// In Node (a test, a server), a timer waiting two weeks must not keep the process alive.
|
|
138
|
+
timer.unref?.();
|
|
139
|
+
}
|
|
140
|
+
return { session: value, expiry };
|
|
141
|
+
});
|
|
142
|
+
opening.catch(() => sessions.delete(id));
|
|
143
|
+
sessions.set(id, opening);
|
|
144
|
+
return opening;
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
return {
|
|
148
|
+
id: 'google',
|
|
149
|
+
logo: { text: 'Google Maps', ...(options.logo ? { image: options.logo } : {}) },
|
|
150
|
+
async tiles(kind, locale) {
|
|
151
|
+
if (!GOOGLE_MAP_TYPE[kind])
|
|
152
|
+
return null;
|
|
153
|
+
const { session: id } = await session(kind, locale);
|
|
154
|
+
return { url: `https://tile.googleapis.com/v1/2dtiles/{z}/{x}/{y}?session=${id}&key=${key}`, maxZoom: 22 };
|
|
155
|
+
},
|
|
156
|
+
async credits(kind, { zoom, bounds }, locale) {
|
|
157
|
+
try {
|
|
158
|
+
const { session: id } = await session(kind === 'dark' ? 'road' : kind, locale);
|
|
159
|
+
const answer = await getJson(fetchWith, `https://tile.googleapis.com/tile/v1/viewport?${query({ session: id, key: options.key, zoom: Math.round(zoom), north: bounds.north, south: bounds.south, east: bounds.east, west: bounds.west })}`);
|
|
160
|
+
const copyright = pathOf(answer, 'copyright');
|
|
161
|
+
if (typeof copyright === 'string' && copyright.trim())
|
|
162
|
+
return [{ text: copyright }];
|
|
163
|
+
}
|
|
164
|
+
catch {
|
|
165
|
+
// Said even when the service that lists them is down.
|
|
166
|
+
}
|
|
167
|
+
return [{ text: 'Map data © Google' }];
|
|
168
|
+
},
|
|
169
|
+
};
|
|
170
|
+
}
|
|
171
|
+
/** Mapbox: its styles as map images, its credits and wordmark, and its address search as people type. */
|
|
172
|
+
function mapbox(options) {
|
|
173
|
+
const fetchWith = options.fetch ?? ((...args) => globalThis.fetch(...args));
|
|
174
|
+
const token = encodeURIComponent(options.token);
|
|
175
|
+
const styles = {
|
|
176
|
+
road: options.style ?? 'mapbox/streets-v12',
|
|
177
|
+
dark: options.darkStyle ?? 'mapbox/dark-v11',
|
|
178
|
+
satellite: options.satelliteStyle ?? 'mapbox/satellite-streets-v12',
|
|
179
|
+
};
|
|
180
|
+
const permanent = options.permanent ?? true;
|
|
181
|
+
const ask = async (path, params, signal) => getJson(fetchWith, `https://api.mapbox.com/search/geocode/v6/${path}?${query({ ...params, permanent: String(permanent) })}&access_token=${token}`, { signal });
|
|
182
|
+
return {
|
|
183
|
+
id: 'mapbox',
|
|
184
|
+
searchAsYouType: true,
|
|
185
|
+
logo: { text: 'mapbox', ...(options.logo ? { image: options.logo } : {}), href: 'https://www.mapbox.com/' },
|
|
186
|
+
async tiles(kind) {
|
|
187
|
+
return { url: `https://api.mapbox.com/styles/v1/${styles[kind]}/tiles/512/{z}/{x}/{y}@2x?access_token=${token}`, maxZoom: 22, tileSize: 512, zoomOffset: -1 };
|
|
188
|
+
},
|
|
189
|
+
async credits() {
|
|
190
|
+
return [
|
|
191
|
+
{ text: '© Mapbox', href: 'https://www.mapbox.com/about/maps/' },
|
|
192
|
+
{ text: '© OpenStreetMap', href: 'https://www.openstreetmap.org/copyright' },
|
|
193
|
+
{ text: 'Improve this map', href: 'https://www.mapbox.com/map-feedback/' },
|
|
194
|
+
];
|
|
195
|
+
},
|
|
196
|
+
async search({ text, near, locale, signal }) {
|
|
197
|
+
return placesFrom(await ask('forward', { q: text, limit: 5, language: locale, proximity: near ? `${near.lng},${near.lat}` : undefined }, signal), ['properties', 'full_address'], ['properties', 'name']);
|
|
198
|
+
},
|
|
199
|
+
async reverse({ lat, lng, locale, signal }) {
|
|
200
|
+
return placesFrom(await ask('reverse', { longitude: lng, latitude: lat, language: locale, limit: 1 }, signal), ['properties', 'full_address'], ['properties', 'name'])[0]?.label ?? null;
|
|
201
|
+
},
|
|
202
|
+
};
|
|
203
|
+
}
|
|
204
|
+
/** Map images from any address, such as the app's own server, with their credit. */
|
|
205
|
+
function tiles(options) {
|
|
206
|
+
const urls = { road: options.url, dark: options.darkUrl, satellite: options.satelliteUrl };
|
|
207
|
+
const credits = Array.isArray(options.credit) ? options.credit : [options.credit];
|
|
208
|
+
return {
|
|
209
|
+
id: 'tiles',
|
|
210
|
+
search: options.search,
|
|
211
|
+
reverse: options.reverse,
|
|
212
|
+
searchAsYouType: options.searchAsYouType ?? !!options.search,
|
|
213
|
+
async tiles(kind) {
|
|
214
|
+
const url = urls[kind];
|
|
215
|
+
if (!url)
|
|
216
|
+
return null;
|
|
217
|
+
return { url, maxZoom: options.maxZoom ?? 19, ...(options.tileSize ? { tileSize: options.tileSize } : {}), ...(options.zoomOffset ? { zoomOffset: options.zoomOffset } : {}) };
|
|
218
|
+
},
|
|
219
|
+
async credits() {
|
|
220
|
+
return credits;
|
|
221
|
+
},
|
|
222
|
+
};
|
|
223
|
+
}
|
|
224
|
+
//# sourceMappingURL=providers.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"providers.js","sourceRoot":"","sources":["../../../../../libs/map/src/lib/providers.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,217 @@
|
|
|
1
|
+
const query = (params) => Object.entries(params)
|
|
2
|
+
.filter(([, value]) => value !== undefined)
|
|
3
|
+
.map(([key, value]) => `${key}=${encodeURIComponent(String(value))}`)
|
|
4
|
+
.join('&');
|
|
5
|
+
async function getJson(fetchWith, url, init) {
|
|
6
|
+
const response = await fetchWith(url, init);
|
|
7
|
+
if (!response.ok)
|
|
8
|
+
throw new Error(`${response.status} from ${url.split('?')[0]}`);
|
|
9
|
+
return response.json();
|
|
10
|
+
}
|
|
11
|
+
const isObject = (value) => typeof value === 'object' && value !== null && !Array.isArray(value);
|
|
12
|
+
const pathOf = (value, ...path) => path.reduce((at, key) => (isObject(at) ? at[key] : undefined), value);
|
|
13
|
+
/** Places from a GeoJSON FeatureCollection, each named by the first of `labels` it has. */
|
|
14
|
+
function placesFrom(collection, ...labels) {
|
|
15
|
+
const features = pathOf(collection, 'features');
|
|
16
|
+
if (!Array.isArray(features))
|
|
17
|
+
return [];
|
|
18
|
+
return features.flatMap((feature) => {
|
|
19
|
+
const [lng, lat] = pathOf(feature, 'geometry', 'coordinates') ?? [];
|
|
20
|
+
const label = labels.map((path) => pathOf(feature, ...path)).find((text) => typeof text === 'string' && text.trim());
|
|
21
|
+
return typeof lat === 'number' && typeof lng === 'number' && typeof label === 'string' ? [{ label, lat, lng }] : [];
|
|
22
|
+
});
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* OpenStreetMap's own map images and Nominatim's search: free, for demos and
|
|
26
|
+
* development only. Their usage policies treat an app in production as heavy
|
|
27
|
+
* use, and Nominatim's forbids searching as people type.
|
|
28
|
+
*/
|
|
29
|
+
export function openStreetMap(options = {}) {
|
|
30
|
+
const fetchWith = options.fetch ?? ((...args) => globalThis.fetch(...args));
|
|
31
|
+
return {
|
|
32
|
+
id: 'openstreetmap',
|
|
33
|
+
demoOnly: true,
|
|
34
|
+
searchAsYouType: false,
|
|
35
|
+
async tiles(kind) {
|
|
36
|
+
return kind === 'road' ? { url: 'https://tile.openstreetmap.org/{z}/{x}/{y}.png', maxZoom: 19 } : null;
|
|
37
|
+
},
|
|
38
|
+
async credits() {
|
|
39
|
+
return [{ text: '© OpenStreetMap contributors', href: 'https://www.openstreetmap.org/copyright' }];
|
|
40
|
+
},
|
|
41
|
+
async search({ text, locale, signal }) {
|
|
42
|
+
const found = await getJson(fetchWith, `https://nominatim.openstreetmap.org/search?${query({ format: 'jsonv2', limit: 5, q: text, 'accept-language': locale })}`, { signal });
|
|
43
|
+
return Array.isArray(found)
|
|
44
|
+
? found.flatMap((place) => {
|
|
45
|
+
const lat = Number(pathOf(place, 'lat'));
|
|
46
|
+
const lng = Number(pathOf(place, 'lon'));
|
|
47
|
+
const label = pathOf(place, 'display_name');
|
|
48
|
+
return Number.isFinite(lat) && Number.isFinite(lng) && typeof label === 'string' ? [{ label, lat, lng }] : [];
|
|
49
|
+
})
|
|
50
|
+
: [];
|
|
51
|
+
},
|
|
52
|
+
async reverse({ lat, lng, locale, signal }) {
|
|
53
|
+
const found = await getJson(fetchWith, `https://nominatim.openstreetmap.org/reverse?${query({ format: 'jsonv2', lat, lon: lng, 'accept-language': locale })}`, { signal });
|
|
54
|
+
const label = pathOf(found, 'display_name');
|
|
55
|
+
return typeof label === 'string' ? label : null;
|
|
56
|
+
},
|
|
57
|
+
};
|
|
58
|
+
}
|
|
59
|
+
/** Azure lists the languages it draws; it refuses any other tag, `ar-001` among them. */
|
|
60
|
+
const AZURE_LANGUAGE = { en: 'en-US', ar: 'ar', fr: 'fr-FR', de: 'de-DE' };
|
|
61
|
+
const AZURE_TILESET = { road: 'microsoft.base.road', dark: 'microsoft.base.darkgrey', satellite: 'microsoft.imagery' };
|
|
62
|
+
/** Microsoft Azure Maps: road, dark and satellite map images, credits for the view, and address search. */
|
|
63
|
+
export function azureMaps(options) {
|
|
64
|
+
if (!options.key && !options.token)
|
|
65
|
+
throw new Error('azureMaps needs a key or a token');
|
|
66
|
+
const fetchWith = options.fetch ?? ((...args) => globalThis.fetch(...args));
|
|
67
|
+
const auth = options.key ? `&subscription-key=${encodeURIComponent(options.key)}` : '';
|
|
68
|
+
const headers = async () => options.key ? {} : { Authorization: `Bearer ${await options.token()}`, ...(options.clientId ? { 'x-ms-client-id': options.clientId } : {}) };
|
|
69
|
+
const ask = async (path, params, locale, signal) => getJson(fetchWith, `https://atlas.microsoft.com/${path}?${query(params)}${auth}`, {
|
|
70
|
+
signal,
|
|
71
|
+
headers: { ...(await headers()), ...(locale ? { 'Accept-Language': AZURE_LANGUAGE[locale] } : {}) },
|
|
72
|
+
});
|
|
73
|
+
return {
|
|
74
|
+
id: 'azure-maps',
|
|
75
|
+
searchAsYouType: true,
|
|
76
|
+
async tiles(kind, locale) {
|
|
77
|
+
const url = `https://atlas.microsoft.com/map/tile?api-version=2024-04-01&tilesetId=${AZURE_TILESET[kind]}&zoom={z}&x={x}&y={y}&tileSize=256&language=${AZURE_LANGUAGE[locale]}&view=Auto${auth}`;
|
|
78
|
+
return { url, maxZoom: kind === 'satellite' ? 19 : 22, ...(options.key ? {} : { headers }) };
|
|
79
|
+
},
|
|
80
|
+
async credits(kind, { zoom, bounds }) {
|
|
81
|
+
try {
|
|
82
|
+
const answer = await ask('map/attribution', { 'api-version': '2024-04-01', tilesetId: AZURE_TILESET[kind], zoom: Math.round(zoom), bounds: [bounds.west, bounds.south, bounds.east, bounds.north].join(',') });
|
|
83
|
+
const copyrights = pathOf(answer, 'copyrights');
|
|
84
|
+
if (Array.isArray(copyrights) && copyrights.length)
|
|
85
|
+
return copyrights.filter((c) => typeof c === 'string').map((text) => ({ text }));
|
|
86
|
+
}
|
|
87
|
+
catch {
|
|
88
|
+
// Its credits stay said even when the service that lists them is down.
|
|
89
|
+
}
|
|
90
|
+
return [{ text: '© Microsoft' }];
|
|
91
|
+
},
|
|
92
|
+
async search({ text, near, locale, signal }) {
|
|
93
|
+
const found = await ask('geocode', { 'api-version': '2023-06-01', top: 5, query: text, coordinates: near ? `${near.lng},${near.lat}` : undefined }, locale, signal);
|
|
94
|
+
return placesFrom(found, ['properties', 'address', 'formattedAddress']);
|
|
95
|
+
},
|
|
96
|
+
async reverse({ lat, lng, locale, signal }) {
|
|
97
|
+
const found = await ask('reverseGeocode', { 'api-version': '2023-06-01', coordinates: `${lng},${lat}` }, locale, signal);
|
|
98
|
+
return placesFrom(found, ['properties', 'address', 'formattedAddress'])[0]?.label ?? null;
|
|
99
|
+
},
|
|
100
|
+
};
|
|
101
|
+
}
|
|
102
|
+
const GOOGLE_MAP_TYPE = { road: 'roadmap', satellite: 'satellite' };
|
|
103
|
+
/**
|
|
104
|
+
* Google's map images through its Map Tiles API: a session for each kind and
|
|
105
|
+
* language, credits for the view, and Google's mark in the corner its terms
|
|
106
|
+
* name. Address search is the app's own here.
|
|
107
|
+
*/
|
|
108
|
+
export function googleMaps(options) {
|
|
109
|
+
const fetchWith = options.fetch ?? ((...args) => globalThis.fetch(...args));
|
|
110
|
+
const key = encodeURIComponent(options.key);
|
|
111
|
+
const sessions = new Map();
|
|
112
|
+
function session(kind, locale) {
|
|
113
|
+
const mapType = GOOGLE_MAP_TYPE[kind];
|
|
114
|
+
const id = `${mapType}:${locale}`;
|
|
115
|
+
const known = sessions.get(id);
|
|
116
|
+
return known ?? open();
|
|
117
|
+
function open() {
|
|
118
|
+
const opening = getJson(fetchWith, `https://tile.googleapis.com/v1/createSession?key=${key}`, {
|
|
119
|
+
method: 'POST',
|
|
120
|
+
headers: { 'Content-Type': 'application/json' },
|
|
121
|
+
body: JSON.stringify({ mapType, language: locale, region: options.region ?? 'US' }),
|
|
122
|
+
}).then((answer) => {
|
|
123
|
+
const value = pathOf(answer, 'session');
|
|
124
|
+
if (typeof value !== 'string')
|
|
125
|
+
throw new Error('Google gave no session');
|
|
126
|
+
const expiry = Number(pathOf(answer, 'expiry')) * 1000;
|
|
127
|
+
// A session lasts about two weeks; one near its end is opened again.
|
|
128
|
+
if (Number.isFinite(expiry)) {
|
|
129
|
+
const timer = setTimeout(() => sessions.delete(id), Math.min(2 ** 31 - 1, Math.max(0, expiry - Date.now() - 3_600_000)));
|
|
130
|
+
// In Node (a test, a server), a timer waiting two weeks must not keep the process alive.
|
|
131
|
+
timer.unref?.();
|
|
132
|
+
}
|
|
133
|
+
return { session: value, expiry };
|
|
134
|
+
});
|
|
135
|
+
opening.catch(() => sessions.delete(id));
|
|
136
|
+
sessions.set(id, opening);
|
|
137
|
+
return opening;
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
return {
|
|
141
|
+
id: 'google',
|
|
142
|
+
logo: { text: 'Google Maps', ...(options.logo ? { image: options.logo } : {}) },
|
|
143
|
+
async tiles(kind, locale) {
|
|
144
|
+
if (!GOOGLE_MAP_TYPE[kind])
|
|
145
|
+
return null;
|
|
146
|
+
const { session: id } = await session(kind, locale);
|
|
147
|
+
return { url: `https://tile.googleapis.com/v1/2dtiles/{z}/{x}/{y}?session=${id}&key=${key}`, maxZoom: 22 };
|
|
148
|
+
},
|
|
149
|
+
async credits(kind, { zoom, bounds }, locale) {
|
|
150
|
+
try {
|
|
151
|
+
const { session: id } = await session(kind === 'dark' ? 'road' : kind, locale);
|
|
152
|
+
const answer = await getJson(fetchWith, `https://tile.googleapis.com/tile/v1/viewport?${query({ session: id, key: options.key, zoom: Math.round(zoom), north: bounds.north, south: bounds.south, east: bounds.east, west: bounds.west })}`);
|
|
153
|
+
const copyright = pathOf(answer, 'copyright');
|
|
154
|
+
if (typeof copyright === 'string' && copyright.trim())
|
|
155
|
+
return [{ text: copyright }];
|
|
156
|
+
}
|
|
157
|
+
catch {
|
|
158
|
+
// Said even when the service that lists them is down.
|
|
159
|
+
}
|
|
160
|
+
return [{ text: 'Map data © Google' }];
|
|
161
|
+
},
|
|
162
|
+
};
|
|
163
|
+
}
|
|
164
|
+
/** Mapbox: its styles as map images, its credits and wordmark, and its address search as people type. */
|
|
165
|
+
export function mapbox(options) {
|
|
166
|
+
const fetchWith = options.fetch ?? ((...args) => globalThis.fetch(...args));
|
|
167
|
+
const token = encodeURIComponent(options.token);
|
|
168
|
+
const styles = {
|
|
169
|
+
road: options.style ?? 'mapbox/streets-v12',
|
|
170
|
+
dark: options.darkStyle ?? 'mapbox/dark-v11',
|
|
171
|
+
satellite: options.satelliteStyle ?? 'mapbox/satellite-streets-v12',
|
|
172
|
+
};
|
|
173
|
+
const permanent = options.permanent ?? true;
|
|
174
|
+
const ask = async (path, params, signal) => getJson(fetchWith, `https://api.mapbox.com/search/geocode/v6/${path}?${query({ ...params, permanent: String(permanent) })}&access_token=${token}`, { signal });
|
|
175
|
+
return {
|
|
176
|
+
id: 'mapbox',
|
|
177
|
+
searchAsYouType: true,
|
|
178
|
+
logo: { text: 'mapbox', ...(options.logo ? { image: options.logo } : {}), href: 'https://www.mapbox.com/' },
|
|
179
|
+
async tiles(kind) {
|
|
180
|
+
return { url: `https://api.mapbox.com/styles/v1/${styles[kind]}/tiles/512/{z}/{x}/{y}@2x?access_token=${token}`, maxZoom: 22, tileSize: 512, zoomOffset: -1 };
|
|
181
|
+
},
|
|
182
|
+
async credits() {
|
|
183
|
+
return [
|
|
184
|
+
{ text: '© Mapbox', href: 'https://www.mapbox.com/about/maps/' },
|
|
185
|
+
{ text: '© OpenStreetMap', href: 'https://www.openstreetmap.org/copyright' },
|
|
186
|
+
{ text: 'Improve this map', href: 'https://www.mapbox.com/map-feedback/' },
|
|
187
|
+
];
|
|
188
|
+
},
|
|
189
|
+
async search({ text, near, locale, signal }) {
|
|
190
|
+
return placesFrom(await ask('forward', { q: text, limit: 5, language: locale, proximity: near ? `${near.lng},${near.lat}` : undefined }, signal), ['properties', 'full_address'], ['properties', 'name']);
|
|
191
|
+
},
|
|
192
|
+
async reverse({ lat, lng, locale, signal }) {
|
|
193
|
+
return placesFrom(await ask('reverse', { longitude: lng, latitude: lat, language: locale, limit: 1 }, signal), ['properties', 'full_address'], ['properties', 'name'])[0]?.label ?? null;
|
|
194
|
+
},
|
|
195
|
+
};
|
|
196
|
+
}
|
|
197
|
+
/** Map images from any address, such as the app's own server, with their credit. */
|
|
198
|
+
export function tiles(options) {
|
|
199
|
+
const urls = { road: options.url, dark: options.darkUrl, satellite: options.satelliteUrl };
|
|
200
|
+
const credits = Array.isArray(options.credit) ? options.credit : [options.credit];
|
|
201
|
+
return {
|
|
202
|
+
id: 'tiles',
|
|
203
|
+
search: options.search,
|
|
204
|
+
reverse: options.reverse,
|
|
205
|
+
searchAsYouType: options.searchAsYouType ?? !!options.search,
|
|
206
|
+
async tiles(kind) {
|
|
207
|
+
const url = urls[kind];
|
|
208
|
+
if (!url)
|
|
209
|
+
return null;
|
|
210
|
+
return { url, maxZoom: options.maxZoom ?? 19, ...(options.tileSize ? { tileSize: options.tileSize } : {}), ...(options.zoomOffset ? { zoomOffset: options.zoomOffset } : {}) };
|
|
211
|
+
},
|
|
212
|
+
async credits() {
|
|
213
|
+
return credits;
|
|
214
|
+
},
|
|
215
|
+
};
|
|
216
|
+
}
|
|
217
|
+
//# sourceMappingURL=providers.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"providers.mjs","sourceRoot":"","sources":["../../../../../libs/map/src/lib/providers.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import type { Locale } from '@fieldia/core';
|
|
2
|
+
import type { LatLng } from './geo.mjs';
|
|
3
|
+
import type { MapLabels } from './labels.mjs';
|
|
4
|
+
import type { AddressSearch, PlaceFound } from './providers.mjs';
|
|
5
|
+
/**
|
|
6
|
+
* An address search over a map: a combobox (ARIA's), its places in a list
|
|
7
|
+
* under it. As people type, when the provider's terms allow it; otherwise
|
|
8
|
+
* when Enter is pressed. The arrow keys move through the places, Enter picks
|
|
9
|
+
* one, Escape closes the list and then empties the box.
|
|
10
|
+
*/
|
|
11
|
+
export interface SearchBoxOptions {
|
|
12
|
+
document: Document;
|
|
13
|
+
id: string;
|
|
14
|
+
labels: MapLabels;
|
|
15
|
+
search: AddressSearch;
|
|
16
|
+
asYouType: boolean;
|
|
17
|
+
locale: Locale;
|
|
18
|
+
/** Where to look first: the map's place, or its centre. */
|
|
19
|
+
near: () => LatLng | undefined;
|
|
20
|
+
pick: (place: PlaceFound) => void;
|
|
21
|
+
/** Says how the search is going, under the map. */
|
|
22
|
+
say: (words: string | null, tone?: 'error') => void;
|
|
23
|
+
}
|
|
24
|
+
export declare function searchBox(options: SearchBoxOptions): {
|
|
25
|
+
element: HTMLDivElement;
|
|
26
|
+
input: HTMLInputElement;
|
|
27
|
+
destroy(): void;
|
|
28
|
+
};
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import type { Locale } from '@fieldia/core';
|
|
2
|
+
import type { LatLng } from './geo';
|
|
3
|
+
import type { MapLabels } from './labels';
|
|
4
|
+
import type { AddressSearch, PlaceFound } from './providers';
|
|
5
|
+
/**
|
|
6
|
+
* An address search over a map: a combobox (ARIA's), its places in a list
|
|
7
|
+
* under it. As people type, when the provider's terms allow it; otherwise
|
|
8
|
+
* when Enter is pressed. The arrow keys move through the places, Enter picks
|
|
9
|
+
* one, Escape closes the list and then empties the box.
|
|
10
|
+
*/
|
|
11
|
+
export interface SearchBoxOptions {
|
|
12
|
+
document: Document;
|
|
13
|
+
id: string;
|
|
14
|
+
labels: MapLabels;
|
|
15
|
+
search: AddressSearch;
|
|
16
|
+
asYouType: boolean;
|
|
17
|
+
locale: Locale;
|
|
18
|
+
/** Where to look first: the map's place, or its centre. */
|
|
19
|
+
near: () => LatLng | undefined;
|
|
20
|
+
pick: (place: PlaceFound) => void;
|
|
21
|
+
/** Says how the search is going, under the map. */
|
|
22
|
+
say: (words: string | null, tone?: 'error') => void;
|
|
23
|
+
}
|
|
24
|
+
export declare function searchBox(options: SearchBoxOptions): {
|
|
25
|
+
element: HTMLDivElement;
|
|
26
|
+
input: HTMLInputElement;
|
|
27
|
+
destroy(): void;
|
|
28
|
+
};
|