Usando el widget core Search puedo usar una función con searchViewModel.includeDefaultSources para reemplazar solo el ArcGIS World Geocoding Service predeterminado con otra instancia de geocodificación o eliminar este geocodificador de las fuentes del widget Search.
Por ejemplo,
search.viewModel.includeDefaultSources = function(sourcesResponse) {
searchSources = sourcesResponse.defaultSources;
searchSources.pop();
searchSources.push({
name: "Lugar o Ubicación",
placeholder: "Lugar o Ubicación",
apiKey: apiKey,
singleLineFieldName: "SingleLine",
url: "https://geocode-api.arcgis.com/arcgis/rest/services/World/GeocodeServer",
categories: ["Lugar Poblado", "Educación", "Características del Terreno", "Parques y Aire Libre", "Características de Agua"],
countryCode: "NZL",
filter: searchExtent,
localSearchDisabled: true,
zoomScale: 4513.988705
});
return sourcesResponse.defaultSources;
};
Esto ha sido muy útil en mis aplicaciones de mapas que usan webmaps con capas de búsqueda configuradas ya que significa que no tengo que establecer las fuentes de búsqueda en la aplicación.
Ahora usando el componente arcgis-search no he podido hacer lo mismo de manera confiable. He tenido algo de éxito modificando una copia de defaultSources y usando esto para establecer las fuentes. Pero es un poco incierto, a veces funciona en la carga inicial y otras veces no, quizás por el tiempo.
Por ejemplo,
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;
}
);
});
O
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);
});
¿Entonces cómo puedo hacer esto de manera confiable usando el componente arcgis-search?