En utilisant le widget Search principal, je peux utiliser une fonction avec searchViewModel.includeDefaultSources pour remplacer uniquement le service de géocodage mondial ArcGIS par une autre instance de géocodage ou supprimer ce géocodeur des sources du widget Search.
Par exemple,
search.viewModel.includeDefaultSources = function(sourcesResponse) {
searchSources = sourcesResponse.defaultSources;
searchSources.pop();
searchSources.push({
name: "Lieu ou Emplacement",
placeholder: "Lieu ou Emplacement",
apiKey: apiKey,
singleLineFieldName: "SingleLine",
url: "https://geocode-api.arcgis.com/arcgis/rest/services/World/GeocodeServer",
categories: ["Lieu peuplé", "Éducation", "Caractéristiques terrestres", "Parcs et plein air", "Caractéristiques aquatiques"],
countryCode: "NZL",
filter: searchExtent,
localSearchDisabled: true,
zoomScale: 4513.988705
});
return sourcesResponse.defaultSources;
};
Cela a été très utile dans mes applications cartographiques qui utilisent des webmaps avec des couches de recherche configurées car cela signifie que je n'ai pas à définir les sources de recherche dans l'application.
Maintenant, en utilisant le composant arcgis-search, je n'ai pas pu faire la même chose de manière fiable. J'ai eu un certain succès en modifiant une copie des defaultSources et en l'utilisant pour définir les sources. Mais c'est un peu aléatoire, parfois ça fonctionne au chargement initial, d'autres fois non, peut-être à cause du timing.
Par exemple,
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;
}
);
});
Ou
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);
});
Alors comment puis-je faire cela de manière fiable en utilisant le composant arcgis-search ?