Usando o widget core Search, posso usar uma função com searchViewModel.includeDefaultSources para substituir apenas o ArcGIS World Geocoding Service padrão por outra instância de geocodificação ou remover este geocoder das fontes do widget Search.
Exemplo:
search.viewModel.includeDefaultSources = function(sourcesResponse) {
searchSources = sourcesResponse.defaultSources;
searchSources.pop();
searchSources.push({
name: "Place or Location",
placeholder: "Place or Location",
apiKey: apiKey,
singleLineFieldName: "SingleLine",
url: "https://geocode-api.arcgis.com/arcgis/rest/services/World/GeocodeServer",
categories: ["Populated Place", "Education", "Land Features", "Parks and Outdoors", "Water Features"],
countryCode: "NZL",
filter: searchExtent,
localSearchDisabled: true,
zoomScale: 4513.988705
});
return sourcesResponse.defaultSources;
};
Isso tem sido super útil nas minhas aplicações de mapa que usam webmaps com camadas de busca configuradas, pois significa que não preciso definir as fontes de busca na aplicação.
Agora, usando o componente arcgis-search, não consegui fazer a mesma coisa de forma confiável. Tive algum sucesso modificando uma cópia das defaultSources e usando isso para definir as fontes. Mas é um pouco incerto, às vezes funciona no carregamento inicial, outras vezes não, talvez por causa do tempo.
Exemplo:
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);
});
Então, como posso fazer isso de forma confiável usando o componente arcgis-search?