コアの Search ウィジェットを使用すると、searchViewModel.includeDefaultSources の関数を使って、デフォルトの ArcGIS World Geocoding Service を別のジオコーディングインスタンスに置き換えたり、このジオコーダーを Search ウィジェットのソースから削除したりできます。
例:
search.viewModel.includeDefaultSources = function(sourcesResponse) {
searchSources = sourcesResponse.defaultSources;
searchSources.pop();
searchSources.push({
name: "場所またはロケーション",
placeholder: "場所またはロケーション",
apiKey: apiKey,
singleLineFieldName: "SingleLine",
url: "https://geocode-api.arcgis.com/arcgis/rest/services/World/GeocodeServer",
categories: ["人口集落", "教育", "地形特徴", "公園とアウトドア", "水域特徴"],
countryCode: "NZL",
filter: searchExtent,
localSearchDisabled: true,
zoomScale: 4513.988705
});
return sourcesResponse.defaultSources;
};
これは、検索レイヤーが設定された webmap を使用するマップアプリケーションで非常に役立ちました。なぜなら、アプリケーションで検索ソースを設定する必要がなくなるからです。
しかし、arcgis-search コンポーネントを使うと同じことを確実に行うことができませんでした。defaultSources のコピーを修正してこれをソースとして設定することで多少成功しましたが、初回ロード時には動作することもあればしないこともあり、タイミングの問題かもしれません。
例:
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;
}
);
});
または
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);
});
では、arcgis-search コンポーネントを使ってこれを確実に行うにはどうすればよいでしょうか?