Použitím základního widgetu Search mohu použít funkci s searchViewModel.includeDefaultSources k nahrazení pouze výchozí služby ArcGIS World Geocoding Service jinou instancí geokódování nebo odebrat tento geokodér ze zdrojů widgetu Search.
Například
search.viewModel.includeDefaultSources = function(sourcesResponse) {
searchSources = sourcesResponse.defaultSources;
searchSources.pop();
searchSources.push({
name: "Místo nebo Lokalita",
placeholder: "Místo nebo Lokalita",
apiKey: apiKey,
singleLineFieldName: "SingleLine",
url: "https:\/\/geocode-api.arcgis.com\/arcgis\/rest\/services\/World\/GeocodeServer",
categories: ["Obydlené místo", "Vzdělávání", "Přírodní útvary", "Parky a venkovní prostory", "Vodní útvary"],
countryCode: "NZL",
filter: searchExtent,
localSearchDisabled: true,
zoomScale: 4513.988705
});
return sourcesResponse.defaultSources;
};
To bylo velmi užitečné v mých mapových aplikacích, které používají webmapy s nakonfigurovanými vyhledávacími vrstvami, protože to znamená, že nemusím nastavovat zdroje vyhledávání v aplikaci.
Nyní při použití komponenty arcgis-search jsem nebyl schopen spolehlivě udělat totéž. Měl jsem určitý úspěch s úpravou kopie defaultSources a použitím této k nastavení zdrojů. Ale je to trochu náhodné, někdy to funguje při prvním načtení, jindy ne, možná kvůli načasování.
Například
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;
}
);
});
Nebo
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);
});
Tak jak mohu spolehlivě udělat toto pomocí komponenty arcgis-search?