@geosdi/ngx-geocoding 1.2.0 → 2.0.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/README.md +232 -38
- package/fesm2022/geosdi-ngx-geocoding.mjs +324 -564
- package/fesm2022/geosdi-ngx-geocoding.mjs.map +1 -1
- package/package.json +3 -4
- package/types/geosdi-ngx-geocoding.d.ts +167 -175
|
@@ -1,28 +1,25 @@
|
|
|
1
|
-
import * as i0 from
|
|
2
|
-
import { InjectionToken, Provider } from
|
|
3
|
-
import {
|
|
4
|
-
|
|
1
|
+
import * as i0 from "@angular/core";
|
|
2
|
+
import { InjectionToken, Provider } from "@angular/core";
|
|
3
|
+
import { Observable, Subject } from "rxjs";
|
|
5
4
|
/**
|
|
6
5
|
* @author Vito Salvia - CNR IMAA geoSDI Group
|
|
7
6
|
* @email vito.salvia@gmail.com
|
|
8
7
|
*/
|
|
9
|
-
declare class NgxGeocodingModule {
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
8
|
+
export declare class NgxGeocodingModule {
|
|
9
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<NgxGeocodingModule, never>;
|
|
10
|
+
static ɵmod: i0.ɵɵNgModuleDeclaration<NgxGeocodingModule, never, never, never>;
|
|
11
|
+
static ɵinj: i0.ɵɵInjectorDeclaration<NgxGeocodingModule>;
|
|
13
12
|
}
|
|
14
|
-
|
|
15
13
|
/**
|
|
16
14
|
* @author Vito Salvia - CNR IMAA geoSDI Group
|
|
17
15
|
* @email vito.salvia@gmail.com
|
|
18
16
|
*/
|
|
19
|
-
interface GeocodingLocation {
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
17
|
+
export interface GeocodingLocation {
|
|
18
|
+
display_name?: string;
|
|
19
|
+
lat?: string;
|
|
20
|
+
lon?: string;
|
|
21
|
+
place_id?: string;
|
|
24
22
|
}
|
|
25
|
-
|
|
26
23
|
/**
|
|
27
24
|
* La ricerca di indirizzi, da una o più sorgenti.
|
|
28
25
|
*
|
|
@@ -63,133 +60,132 @@ interface GeocodingLocation {
|
|
|
63
60
|
* **Le proposte di Places non portano le coordinate**, che si chiedono per il
|
|
64
61
|
* solo luogo scelto : vedi {@link resolve}, ed è il motivo per cui esiste.
|
|
65
62
|
*/
|
|
66
|
-
declare class NgxGeocodingService {
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
63
|
+
export declare class NgxGeocodingService {
|
|
64
|
+
subjectLocation: Subject<GeocodingLocation>;
|
|
65
|
+
subjectNoResults: Subject<unknown>;
|
|
66
|
+
subjectRemove: Subject<unknown>;
|
|
67
|
+
private http;
|
|
68
|
+
private config;
|
|
69
|
+
/**
|
|
70
|
+
* Una sorgente che ha detto di no non si richiama per il resto della
|
|
71
|
+
* sessione : chiave senza il prodotto abilitato, referrer fuori dalle
|
|
72
|
+
* restrizioni, quota. Senza questo sarebbe una richiesta negata a ogni
|
|
73
|
+
* tasto premuto.
|
|
74
|
+
*/
|
|
75
|
+
private spente;
|
|
76
|
+
/**
|
|
77
|
+
* Dentro `google`, i gradini già scesi : `AutocompleteSuggestion` (Places
|
|
78
|
+
* New) e `AutocompleteService` (Places legacy). Da lì in poi si parte
|
|
79
|
+
* direttamente da dove si era arrivati.
|
|
80
|
+
*/
|
|
81
|
+
private suggestionSpenta;
|
|
82
|
+
private placesSpenta;
|
|
83
|
+
/**
|
|
84
|
+
* Le proposte per quello che si sta digitando, dalla prima sorgente che
|
|
85
|
+
* risponde.
|
|
86
|
+
*
|
|
87
|
+
* @param address il testo digitato
|
|
88
|
+
*/
|
|
89
|
+
geocode(address: string): Observable<GeocodingLocation[]>;
|
|
90
|
+
/**
|
|
91
|
+
* Le coordinate del luogo **scelto**, chieste solo adesso.
|
|
92
|
+
*
|
|
93
|
+
* Le proposte di Places arrivano senza, e risolverle tutte a ogni tasto
|
|
94
|
+
* premuto vorrebbe dire una richiesta di dettaglio per proposta. Chi le ha
|
|
95
|
+
* già — Nominatim le manda sempre, e il `Geocoder` pure — non paga niente e
|
|
96
|
+
* si riprende il luogo così com'è, quindi **chiamarla è sempre corretto** :
|
|
97
|
+
* è la riga da mettere dove si sceglie una proposta, prima di usarne `lat`
|
|
98
|
+
* e `lon`.
|
|
99
|
+
*
|
|
100
|
+
* Fallendo restituisce il luogo com'è, senza coordinate : chi ha chiamato
|
|
101
|
+
* lo sa già gestire, ed è meglio che muovere una mappa a caso.
|
|
102
|
+
*
|
|
103
|
+
* @param place la proposta scelta fra quelle di {@link geocode}
|
|
104
|
+
*/
|
|
105
|
+
resolve(place: GeocodingLocation): Observable<GeocodingLocation>;
|
|
106
|
+
/**
|
|
107
|
+
* Le coordinate con **Places (New)** : `Place` nasce con l'id e
|
|
108
|
+
* `fetchFields` lo **riempie**, quindi i campi si leggono dall'oggetto
|
|
109
|
+
* dopo l'attesa e non dal valore restituito.
|
|
110
|
+
*/
|
|
111
|
+
private luogoDaSuggestion;
|
|
112
|
+
/** Le coordinate con **Places legacy**, cioè `PlacesService.getDetails`. */
|
|
113
|
+
private luogoDaLegacy;
|
|
114
|
+
/**
|
|
115
|
+
* Prova le sorgenti in ordine, passando alla successiva quando una rifiuta.
|
|
116
|
+
*
|
|
117
|
+
* Finite le sorgenti si rilancia un errore invece di restituire un elenco
|
|
118
|
+
* vuoto : «non ho trovato niente» e «non ho potuto cercare» sono due cose
|
|
119
|
+
* diverse, e chi mostra la barra deve poterle distinguere.
|
|
120
|
+
*/
|
|
121
|
+
private daSorgenti;
|
|
122
|
+
/**
|
|
123
|
+
* Nominatim, **identico a come questa libreria l'ha sempre chiamato** : è
|
|
124
|
+
* il comportamento su cui contano le applicazioni che la usavano prima che
|
|
125
|
+
* Google esistesse qui dentro.
|
|
126
|
+
*/
|
|
127
|
+
private daNominatim;
|
|
128
|
+
/**
|
|
129
|
+
* Google : le proposte di Places, e il `Geocoder` quando Places dice di no.
|
|
130
|
+
*
|
|
131
|
+
* `ZERO_RESULTS` **non** è un rifiuto : è una ricerca senza esiti, e
|
|
132
|
+
* confonderlo con un errore farebbe scivolare al `Geocoder` — e poi fuori
|
|
133
|
+
* da Google — alla prima ricerca sfortunata.
|
|
134
|
+
*/
|
|
135
|
+
private daGoogle;
|
|
136
|
+
/** Il secondo e il terzo gradino : Places legacy, poi il `Geocoder`. */
|
|
137
|
+
private dallaLegacy;
|
|
138
|
+
/**
|
|
139
|
+
* Le proposte di **Places (New)**, con `AutocompleteSuggestion`.
|
|
140
|
+
*
|
|
141
|
+
* Due cose che non si vedono dalla firma : `text` di una proposta non è una
|
|
142
|
+
* stringa ma un oggetto formattabile, e va letto con `toString()` — messo
|
|
143
|
+
* in un template darebbe `[object Object]` ; e un elenco **vuoto non è un
|
|
144
|
+
* errore**, è una ricerca senza esiti, quindi non fa scendere di gradino.
|
|
145
|
+
*
|
|
146
|
+
* Se la classe non c'è nell'SDK — versione più vecchia — si solleva subito,
|
|
147
|
+
* che è il modo di scendere senza aspettare una risposta che non arriverà.
|
|
148
|
+
*/
|
|
149
|
+
private daSuggestion;
|
|
150
|
+
/** Le proposte incrementali di `AutocompleteService`. */
|
|
151
|
+
private daPlaces;
|
|
152
|
+
/**
|
|
153
|
+
* Il `Geocoder`, l'ultima strada di Google.
|
|
154
|
+
*
|
|
155
|
+
* I suoi risultati **portano già le coordinate**, quindi su questi
|
|
156
|
+
* {@link resolve} non fa nessuna richiesta in più.
|
|
157
|
+
*/
|
|
158
|
+
private daGeocoder;
|
|
159
|
+
/** Il bias come lo vuole `AutocompleteService`. */
|
|
160
|
+
private cerchio;
|
|
161
|
+
/**
|
|
162
|
+
* Il bias come lo vuole il `Geocoder`, che prende un **riquadro** e non un
|
|
163
|
+
* cerchio : lo si iscrive attorno al punto. La longitudine si stringe con
|
|
164
|
+
* la latitudine (`cos`), o alle nostre latitudini il riquadro verrebbe
|
|
165
|
+
* largo un terzo in più del voluto.
|
|
166
|
+
*/
|
|
167
|
+
private riquadro;
|
|
168
|
+
/** Le sorgenti dichiarate, o quella storica. */
|
|
169
|
+
private sorgenti;
|
|
170
|
+
/**
|
|
171
|
+
* Perché una strada ha detto di no, in una riga : dall'SDK arriva uno stato
|
|
172
|
+
* (`REQUEST_DENIED` per la chiave senza il prodotto abilitato o per il
|
|
173
|
+
* referrer, `OVER_QUERY_LIMIT` per la quota), da una http il corpo
|
|
174
|
+
* d'errore. Senza questo il motivo resta dentro un oggetto che in console
|
|
175
|
+
* va aperto, e si legge solo «si ripiega».
|
|
176
|
+
*/
|
|
177
|
+
private perche;
|
|
178
|
+
/**
|
|
179
|
+
* Una coordinata come stringa, o `undefined` se non c'è.
|
|
180
|
+
*
|
|
181
|
+
* `String(undefined)` darebbe `"undefined"`, che passerebbe indenne per
|
|
182
|
+
* ogni controllo di presenza e morirebbe in `Number()` — cioè una mappa
|
|
183
|
+
* portata su `NaN, NaN` senza che niente lo dica.
|
|
184
|
+
*/
|
|
185
|
+
private testo;
|
|
186
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<NgxGeocodingService, never>;
|
|
187
|
+
static ɵprov: i0.ɵɵInjectableDeclaration<any>;
|
|
191
188
|
}
|
|
192
|
-
|
|
193
189
|
/**
|
|
194
190
|
* @author Vito Salvia - CNR IMAA geoSDI Group
|
|
195
191
|
* @email vito.salvia@gmail.com
|
|
@@ -204,7 +200,7 @@ declare class NgxGeocodingService {
|
|
|
204
200
|
* - `nominatim` : il servizio pubblico di OpenStreetMap, che non vuole nessuna
|
|
205
201
|
* chiave. È il comportamento storico di questa libreria.
|
|
206
202
|
*/
|
|
207
|
-
type NgxGeocodingSource = "google" | "nominatim";
|
|
203
|
+
export type NgxGeocodingSource = "google" | "nominatim";
|
|
208
204
|
/**
|
|
209
205
|
* Il punto su cui polarizzare le proposte, e con che raggio.
|
|
210
206
|
*
|
|
@@ -212,11 +208,11 @@ type NgxGeocodingSource = "google" | "nominatim";
|
|
|
212
208
|
* ma «via Roma» propone prima quella vicina. Senza, Google ordina come crede,
|
|
213
209
|
* e su un nome di via comune la prima proposta è quasi sempre altrove.
|
|
214
210
|
*/
|
|
215
|
-
interface NgxGeocodingBias {
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
211
|
+
export interface NgxGeocodingBias {
|
|
212
|
+
lat: number;
|
|
213
|
+
lon: number;
|
|
214
|
+
/** Raggio in metri. */
|
|
215
|
+
radiusM: number;
|
|
220
216
|
}
|
|
221
217
|
/**
|
|
222
218
|
* Come questa libreria cerca gli indirizzi.
|
|
@@ -225,30 +221,29 @@ interface NgxGeocodingBias {
|
|
|
225
221
|
* quello che la libreria ha sempre fatto. Google si accende dichiarandolo in
|
|
226
222
|
* {@link sources}.
|
|
227
223
|
*/
|
|
228
|
-
interface NgxGeocodingConfig {
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
224
|
+
export interface NgxGeocodingConfig {
|
|
225
|
+
/**
|
|
226
|
+
* Le sorgenti da provare, **in ordine**. La prima che risponde vince, e
|
|
227
|
+
* quella che rifiuta passa la mano alla successiva.
|
|
228
|
+
*
|
|
229
|
+
* Una sorgente che non è utilizzabile viene **saltata**, e non è un errore :
|
|
230
|
+
* `google` senza l'SDK in pagina. È il modo in cui la stessa configurazione
|
|
231
|
+
* vale per il deploy che ha la chiave e per quello che non ce l'ha.
|
|
232
|
+
*
|
|
233
|
+
* Default : `["nominatim"]`.
|
|
234
|
+
*/
|
|
235
|
+
sources?: NgxGeocodingSource[];
|
|
236
|
+
/**
|
|
237
|
+
* Paese a cui limitare le proposte, in due lettere (`"it"`). Vale per
|
|
238
|
+
* `google` — Nominatim qui non è filtrato, per non cambiare quello che la
|
|
239
|
+
* libreria ha sempre restituito.
|
|
240
|
+
*/
|
|
241
|
+
country?: string;
|
|
242
|
+
/** Dove polarizzare le proposte di `google`. Vedi {@link NgxGeocodingBias}. */
|
|
243
|
+
bias?: NgxGeocodingBias;
|
|
244
|
+
/** Il servizio Nominatim, se non quello pubblico di OpenStreetMap. */
|
|
245
|
+
nominatimUrl?: string;
|
|
250
246
|
}
|
|
251
|
-
|
|
252
247
|
/**
|
|
253
248
|
* @author Vito Salvia - CNR IMAA geoSDI Group
|
|
254
249
|
* @email vito.salvia@gmail.com
|
|
@@ -257,7 +252,7 @@ interface NgxGeocodingConfig {
|
|
|
257
252
|
* La configurazione della ricerca, che **può non esserci** : in quel caso vale
|
|
258
253
|
* il comportamento storico, cioè Nominatim e basta.
|
|
259
254
|
*/
|
|
260
|
-
declare const NGX_GEOCODING_CONFIG: InjectionToken<NgxGeocodingConfig>;
|
|
255
|
+
export declare const NGX_GEOCODING_CONFIG: InjectionToken<NgxGeocodingConfig>;
|
|
261
256
|
/**
|
|
262
257
|
* Dichiara da dove arrivano gli indirizzi, nei `providers` dell'applicazione :
|
|
263
258
|
*
|
|
@@ -275,7 +270,4 @@ declare const NGX_GEOCODING_CONFIG: InjectionToken<NgxGeocodingConfig>;
|
|
|
275
270
|
*
|
|
276
271
|
* Chi non la chiama non cambia niente.
|
|
277
272
|
*/
|
|
278
|
-
declare function provideNgxGeocoding(config: NgxGeocodingConfig): Provider;
|
|
279
|
-
|
|
280
|
-
export { NGX_GEOCODING_CONFIG, NgxGeocodingModule, NgxGeocodingService, provideNgxGeocoding };
|
|
281
|
-
export type { GeocodingLocation, NgxGeocodingBias, NgxGeocodingConfig, NgxGeocodingSource };
|
|
273
|
+
export declare function provideNgxGeocoding(config: NgxGeocodingConfig): Provider;
|