oglap-ggp-node 1.0.2 → 1.0.3
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/README.md +41 -56
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
Implémentation Node.js du protocole **OGLAP** (Offline Grid Location Addressing Protocol) — un système d'adressage déterministe basé sur une grille, conçu pour les régions où les adresses postales formelles sont inexistantes ou peu fiables.
|
|
4
4
|
|
|
5
|
-
OGLAP génère des **codes LAP** compacts et lisibles (ex. `GN-
|
|
5
|
+
OGLAP génère des **codes LAP** compacts et lisibles (ex. `GN-CON-QYTC-B0B1-2282`) qui identifient de façon unique n'importe quelle coordonnée à l'intérieur d'un pays configuré, hors ligne et sans API externe.
|
|
6
6
|
|
|
7
7
|
---
|
|
8
8
|
|
|
@@ -23,22 +23,22 @@ Un code LAP encode une localisation à quatre niveaux hiérarchiques :
|
|
|
23
23
|
|
|
24
24
|
### Grille locale (5 segments)
|
|
25
25
|
```
|
|
26
|
-
GN -
|
|
27
|
-
│ │ │ │ └─ Microspot
|
|
26
|
+
GN - CON - QYTC - B0B1 - 2282
|
|
27
|
+
│ │ │ │ └─ Microspot — 4 chiffres, offset métrique (XX = est, YY = nord)
|
|
28
28
|
│ │ │ └─────── Macrobloc — 4 chars [A-J][0-9][A-J][0-9], blocs ~100 m dans la zone
|
|
29
|
-
│ │ └────────────── Zone — 4 chars,
|
|
30
|
-
│ └───────────────────── Région — 3 chars, code de
|
|
31
|
-
└──────────────────────────── Pays — code ISO alpha-2 du pays
|
|
29
|
+
│ │ └────────────── Zone — 4 chars, indiquant la localite administrative immediate de niveau 8 et plus (example - QYTC pour Yattaya - Fossedè)
|
|
30
|
+
│ └───────────────────── Région — 3 chars, code de la localite administrative de niveau 4 ou 6 immediate (example - CON pour Conakry)
|
|
31
|
+
└──────────────────────────── Pays — code ISO alpha-2 du pays (example - gn pour Guinee)
|
|
32
32
|
```
|
|
33
33
|
|
|
34
34
|
### Grille nationale (4 segments)
|
|
35
35
|
Utilisée quand une coordonnée se situe en dehors des limites administratives de niveau 8 et au-dessus :
|
|
36
36
|
```
|
|
37
|
-
GN -
|
|
37
|
+
GN - NZE - AABCDE - 4250
|
|
38
38
|
│ │ │ └─ Microspot — 4 chiffres
|
|
39
39
|
│ │ └────────── Macrobloc — 6 lettres, grille kilométrique nationale
|
|
40
|
-
│ └──────────────── Région
|
|
41
|
-
└─────────────────────── Pays
|
|
40
|
+
│ └──────────────── Région — 3 chars, code de la localite administrative de niveau 4 ou 6 immediate (example - NZE pour Nzérékoré)
|
|
41
|
+
└─────────────────────── Pays — code ISO alpha-2 du pays (example - gn pour Guinee)
|
|
42
42
|
```
|
|
43
43
|
|
|
44
44
|
---
|
|
@@ -85,22 +85,6 @@ const report = await initOglap({
|
|
|
85
85
|
if (!report.ok) throw new Error(report.error);
|
|
86
86
|
```
|
|
87
87
|
|
|
88
|
-
**Mode direct** — pour les environnements sans accès disque (serverless, edge) :
|
|
89
|
-
|
|
90
|
-
```js
|
|
91
|
-
import { initOglap, loadOglap } from 'oglap-ggp-node-js';
|
|
92
|
-
|
|
93
|
-
const profile = await fetch('/data/country_profile.json').then(r => r.json());
|
|
94
|
-
const localities = await fetch('/data/localities_naming.json').then(r => r.json());
|
|
95
|
-
const places = await fetch('/data/oglap_data.json').then(r => r.json());
|
|
96
|
-
|
|
97
|
-
const report = await initOglap(profile, localities);
|
|
98
|
-
if (!report.ok) throw new Error(report.error);
|
|
99
|
-
|
|
100
|
-
const loaded = loadOglap(places);
|
|
101
|
-
console.log(`${loaded.count} lieux chargés`);
|
|
102
|
-
```
|
|
103
|
-
|
|
104
88
|
---
|
|
105
89
|
|
|
106
90
|
## Utilisation
|
|
@@ -112,12 +96,12 @@ import { coordinatesToLap } from 'oglap-ggp-node-js';
|
|
|
112
96
|
|
|
113
97
|
const result = coordinatesToLap(9.5370, -13.6773); // lat, lon — Conakry, Guinée
|
|
114
98
|
|
|
115
|
-
console.log(result.lapCode); // GN-
|
|
116
|
-
console.log(result.humanAddress); //
|
|
117
|
-
console.log(result.admin_level_2); //
|
|
118
|
-
console.log(result.admin_level_3); //
|
|
119
|
-
console.log(result.macroblock); //
|
|
120
|
-
console.log(result.microspot); //
|
|
99
|
+
console.log(result.lapCode); // GN-CON-QYTC-B0B1-2282
|
|
100
|
+
console.log(result.humanAddress); // B0B1-2282, Yattaya Fossedè, Conakry, Guinée
|
|
101
|
+
console.log(result.admin_level_2); // CON (code de région)
|
|
102
|
+
console.log(result.admin_level_3); // QYTC (code de zone)
|
|
103
|
+
console.log(result.macroblock); // B0B1
|
|
104
|
+
console.log(result.microspot); // 2282
|
|
121
105
|
console.log(result.isNationalGrid); // false
|
|
122
106
|
console.log(result.originLat); // latitude d'origine de la bbox
|
|
123
107
|
console.log(result.originLon); // longitude d'origine de la bbox
|
|
@@ -130,7 +114,7 @@ Retourne `null` si les coordonnées sont hors du territoire.
|
|
|
130
114
|
```js
|
|
131
115
|
import { lapToCoordinates } from 'oglap-ggp-node-js';
|
|
132
116
|
|
|
133
|
-
const coords = lapToCoordinates('GN-
|
|
117
|
+
const coords = lapToCoordinates('GN-CON-QYTC-B0B1-2282');
|
|
134
118
|
|
|
135
119
|
if (coords) {
|
|
136
120
|
console.log(`lat: ${coords.lat}, lon: ${coords.lon}`);
|
|
@@ -138,7 +122,7 @@ if (coords) {
|
|
|
138
122
|
}
|
|
139
123
|
|
|
140
124
|
// Le préfixe pays est optionnel
|
|
141
|
-
const coords2 = lapToCoordinates('
|
|
125
|
+
const coords2 = lapToCoordinates('GN-CON-QYTC-B0B1-2282');
|
|
142
126
|
```
|
|
143
127
|
|
|
144
128
|
### Parser et valider un code LAP
|
|
@@ -147,7 +131,7 @@ const coords2 = lapToCoordinates('CKY-QKAR-B4A4-2798');
|
|
|
147
131
|
import { validateLapCode, parseLapCode } from 'oglap-ggp-node-js';
|
|
148
132
|
|
|
149
133
|
// Valider — retourne un message d'erreur, ou null si valide
|
|
150
|
-
const error = validateLapCode('GN-
|
|
134
|
+
const error = validateLapCode('GN-CON-QYTC-B0B1-2282');
|
|
151
135
|
if (error) {
|
|
152
136
|
console.log('Invalide :', error);
|
|
153
137
|
} else {
|
|
@@ -155,18 +139,19 @@ if (error) {
|
|
|
155
139
|
}
|
|
156
140
|
|
|
157
141
|
// Parser en composants
|
|
158
|
-
const parsed = parseLapCode('GN-
|
|
142
|
+
const parsed = parseLapCode('GN-CON-QYTC-B0B1-2282');
|
|
159
143
|
if (parsed) {
|
|
160
|
-
console.log(parsed.admin_level_2_Iso); // code ISO
|
|
161
|
-
console.log(parsed.admin_level_3_code); // code de
|
|
162
|
-
console.log(parsed.
|
|
163
|
-
console.log(parsed.
|
|
144
|
+
console.log(parsed.admin_level_2_Iso); // code ISO du pays : GN
|
|
145
|
+
console.log(parsed.admin_level_3_code); // code de la localite administrative de niveau 4 ou 6 immediate : CON
|
|
146
|
+
console.log(parsed.admin_level_4_code); // code de la localite administrative de niveau 8 et plus : QYTC
|
|
147
|
+
console.log(parsed.macroblock); // B0B1 macrobloc ~100m x 100m dans la zone
|
|
148
|
+
console.log(parsed.microspot); // 2282 microspot ~1m x 1m dans la zone
|
|
164
149
|
console.log(parsed.isNationalGrid); // false
|
|
165
150
|
}
|
|
166
151
|
|
|
167
152
|
// Les codes partiels sont aussi supportés
|
|
168
|
-
parseLapCode('GN-
|
|
169
|
-
parseLapCode('
|
|
153
|
+
parseLapCode('GN-CON-QYTC'); // région + zone seulement
|
|
154
|
+
parseLapCode('QYTC'); // zone seulement
|
|
170
155
|
```
|
|
171
156
|
|
|
172
157
|
### Résoudre un code LAP vers un lieu
|
|
@@ -174,7 +159,7 @@ parseLapCode('QKAR'); // zone seulement
|
|
|
174
159
|
```js
|
|
175
160
|
import { getPlaceByLapCode } from 'oglap-ggp-node-js';
|
|
176
161
|
|
|
177
|
-
const resolved = getPlaceByLapCode('GN-
|
|
162
|
+
const resolved = getPlaceByLapCode('GN-CON-QYTC-B0B1-2282');
|
|
178
163
|
|
|
179
164
|
if (resolved) {
|
|
180
165
|
console.log(resolved.originLat); // latitude d'origine de la bbox
|
|
@@ -187,8 +172,8 @@ if (resolved) {
|
|
|
187
172
|
}
|
|
188
173
|
|
|
189
174
|
// Accéder aux composants parsés
|
|
190
|
-
console.log(resolved.parsed.macroblock); //
|
|
191
|
-
console.log(resolved.parsed.microspot); //
|
|
175
|
+
console.log(resolved.parsed.macroblock); // B0B1
|
|
176
|
+
console.log(resolved.parsed.microspot); // 2282
|
|
192
177
|
}
|
|
193
178
|
```
|
|
194
179
|
|
|
@@ -238,10 +223,10 @@ const prefectures = getOglapPrefectures();
|
|
|
238
223
|
|
|
239
224
|
| Champ | Type | Description |
|
|
240
225
|
|---|---|---|
|
|
241
|
-
| `lapCode` | `string` | Code LAP complet, ex. `GN-
|
|
226
|
+
| `lapCode` | `string` | Code LAP complet, ex. `GN-CON-QYTC-B0B1-2282` |
|
|
242
227
|
| `country` | `string` | Code pays, ex. `GN` |
|
|
243
|
-
| `admin_level_2` | `string` | Code de région, ex. `
|
|
244
|
-
| `admin_level_3` | `string\|null` | Code de zone, ex. `
|
|
228
|
+
| `admin_level_2` | `string` | Code de région, ex. `CON` |
|
|
229
|
+
| `admin_level_3` | `string\|null` | Code de zone, ex. `QYTC` |
|
|
245
230
|
| `macroblock` | `string` | Composant macrobloc |
|
|
246
231
|
| `microspot` | `string` | Composant microspot |
|
|
247
232
|
| `isNationalGrid` | `boolean` | `true` si grille nationale utilisée |
|
|
@@ -362,25 +347,25 @@ class LocationService {
|
|
|
362
347
|
// Utilisation
|
|
363
348
|
await LocationService.init();
|
|
364
349
|
|
|
365
|
-
// Encoder
|
|
366
|
-
const code = LocationService.encodePosition(9.
|
|
367
|
-
console.log(code); // GN-
|
|
350
|
+
// Encoder
|
|
351
|
+
const code = LocationService.encodePosition(9.660147, -13.588009);
|
|
352
|
+
console.log(code); // GN-CON-QYTC-B0B1-2282
|
|
368
353
|
|
|
369
354
|
// Décoder
|
|
370
355
|
const coords = LocationService.decodeToCoords(code);
|
|
371
|
-
console.log(coords); // { lat: 9.
|
|
356
|
+
console.log(coords); // { lat: 9.660147, lon: -13.588009 }
|
|
372
357
|
|
|
373
358
|
// Partager
|
|
374
|
-
const share = LocationService.shareLocation(9.
|
|
375
|
-
console.log(share.label); //
|
|
359
|
+
const share = LocationService.shareLocation(9.660147, -13.588009);
|
|
360
|
+
console.log(share.label); // B0B1-2282, Yattaya Fossedè, Conakry, Guinée
|
|
376
361
|
|
|
377
362
|
// Valider la saisie utilisateur
|
|
378
|
-
const err = LocationService.validateInput('GN-
|
|
363
|
+
const err = LocationService.validateInput('GN-CON-QYTC-B0B1-2282');
|
|
379
364
|
console.log(err); // null (valide)
|
|
380
365
|
|
|
381
366
|
// Résoudre un lieu
|
|
382
|
-
const place = LocationService.resolvePlace('GN-
|
|
383
|
-
console.log(place.
|
|
367
|
+
const place = LocationService.resolvePlace('GN-CON-QYTC-B0B1-2282');
|
|
368
|
+
console.log(place.display_name); // Yattaya Fossedè, Ratoma, Conakry, Guinée
|
|
384
369
|
```
|
|
385
370
|
|
|
386
371
|
---
|
package/package.json
CHANGED