Met de core Search widget kan ik een functie gebruiken met searchViewModel.includeDefaultSources om alleen de standaard ArcGIS World Geocoding Service te vervangen door een andere geocoding instantie of deze geocoder uit de bronnen van de Search widget te verwijderen.
Bijv.
search.viewModel.includeDefaultSources = function(sourcesResponse) {
searchSources = sourcesResponse.defaultSources;
searchSources.pop();
searchSources.push({
name: "Plaats of Locatie",
placeholder: "Plaats of Locatie",
apiKey: apiKey,
singleLineFieldName: "SingleLine",
url: "https://geocode-api.arcgis.com/arcgis/rest/services/World/GeocodeServer",
categories: ["Bevolkte Plaats", "Onderwijs", "Landkenmerken", "Parken en Buiten", "Waterkenmerken"],
countryCode: "NZL",
filter: searchExtent,
localSearchDisabled: true,
zoomScale: 4513.988705
});
return sourcesResponse.defaultSources;
};
Dit is erg nuttig geweest in mijn kaartapplicaties die webmaps gebruiken met geconfigureerde zoeklagen, omdat ik dan de zoekbronnen niet in de applicatie hoef in te stellen.
Nu ik de arcgis-search component gebruik, ben ik er niet in geslaagd om hetzelfde betrouwbaar te doen. Ik heb enige succes gehad met het aanpassen van een kopie van de defaultSources en deze te gebruiken om de bronnen in te stellen. Maar het is een beetje onvoorspelbaar, soms werkt het bij het initialiseren, andere keren niet, misschien vanwege timing.
Bijv.
search.componentOnReady().then(() => {
reactiveUtils.when(
() => search.defaultSources.length > 1,
() => {
const searchSources = search.defaultSources.toArray();
searchSources.pop();
searchSources.push(locatorSearch);
search.includeDefaultSourcesDisabled = true;
search.sources = searchSources;
}
);
});
Of
reactiveUtils.whenOnce(() => search.defaultSources.length > 1).then(() => {
const searchSources = search.defaultSources.toArray();
searchSources.pop();
if (
webmap.applicationProperties.viewing.search.enabled === true &&
webmap.applicationProperties.viewing.search.addressSearchEnabled === true
) {
searchSources.push(locatorSearch);
search.sources = searchSources;
}
else if (
webmap.applicationProperties.viewing.search.enabled === true &&
webmap.applicationProperties.viewing.search.addressSearchEnabled === false
) {
search.sources = searchSources;
}
});
reactiveUtils.whenOnce(() => search.sources.length >= 1).then(() => {
search.includeDefaultSourcesDisabled = true;
console.log(search.sources);
});
Hoe kan ik dit nu betrouwbaar doen met behulp van de arcgis-search component?