注: 以下の翻訳の正確性は検証されていません。AIPを利用して英語版の原文から機械的に翻訳されたものです。
Map Search Around 関数を書くことで、Mapに対して強力な Map Search Arounds を作成することができます。これにより、選択されたオブジェクトが与えられ、オントロジーを走査して特定の分析に必要または有用なすべてのオブジェクトを戻すTypeScript関数を書くことができます。
Map Search Around 関数は、以下を含むデータ構造を返します:
objectRids
: Mapに追加されるオブジェクト。edges
: ソースオブジェクト、ターゲットオブジェクト、およびオプションで中間オブジェクトを含むエッジ。ソースオブジェクトとターゲットオブジェクトは、それらの間に描かれた弧と共にマップに追加され、弧が選択されたときに中間オブジェクトがリストされます。measures
: シリーズパネルに追加される時間系列測定。Map Search Around 関数は、TypeScript関数リポジトリで開発されます。詳細については、関数ドキュメンテーション を参照してください。
Map Search Around 関数は、戻り値の型を Promise<IMapSearchAroundResults>
と宣言する必要があります。Mapアプリケーションは、その戻り値の型の名前と構造を使用してSearch Around関数を検出するため、戻り値の型は以下のように正確に宣言する必要があります:
Copied!1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30
// IMapSearchAroundResultsインターフェースを定義します。 // このインターフェースは、地図の検索結果を表します。 export interface IMapSearchAroundResults { // オブジェクトのRidの配列。これはオプションです。 objectRids?: string[]; // IMapSearchAroundEdgeの配列。これもオプションです。 edges?: IMapSearchAroundEdge[]; // IMapSearchAroundMeasureの配列。これもオプションです。 measures?: IMapSearchAroundMeasure[]; } // IMapSearchAroundEdgeインターフェースを定義します。 // このインターフェースは、地図上のエッジを表します。 export interface IMapSearchAroundEdge { // ソースオブジェクトのRid。 sourceObjectRid: string; // ターゲットオブジェクトのRid。 targetObjectRid: string; // 中間オブジェクトのRidの配列。これはオプションです。 intermediaryObjectRids?: string[]; } // IMapSearchAroundMeasureインターフェースを定義します。 // このインターフェースは、地図上の計測を表します。 export interface IMapSearchAroundMeasure { // オブジェクトのRidの配列。 objectRids: string[]; // 計測ID。 measureId: string; }
Map Search Around 関数には、以下のいずれかを含む 1 つのオブジェクトパラメーターを指定する必要があります(ただし 1 つだけ)。
Copied!1 2
// この関数はExampleObjectTypeのオブジェクトを引数に取り、特定の操作を行います public exampleSearchAround(object: ExampleObjectType) { ...
Copied!1 2
// 例の検索周辺メソッド public exampleSearchAround(objects: ExampleObjectType[]) { ...
Copied!1 2
// 例のオブジェクトタイプのオブジェクトセットを中心に検索する関数 public exampleSearchAround(objectSet: ObjectSet<ExampleObjectType>) { ...
Map Search Around関数は、オプショナルでこれらのスカラタイプの追加パラメーターを任意の数だけ含めることができます:string
、boolean
、Integer
、Long
、Float
、Double
、LocalDate
、またはTimestamp
(詳細はScalar typesを参照してください)。ユーザーが追加パラメーター付きのSearch Around関数を実行すると、ユーザーにはパラメーターの値を入力するように求められます。例えば:
Copied!1 2 3 4 5 6 7
// 日本語のコメントを追加します public exampleSearchAround(objectSet: ObjectSet<ExampleObjectType>, stringParameter: string, timestampParameter: Timestamp) { // objectSet: オブジェクトセットの型がExampleObjectTypeのインスタンスです // stringParameter: 文字列のパラメータです // timestampParameter: タイムスタンプのパラメータです ... }
all()
や get()
の代わりに allAsync()
や getAsync()
を使用し、await
ステートメントをできるだけ少なく使用してください。この例のコードには、Foundry Reference Project
サンプルデータに基づく3つの Search Around 関数が含まれています。
airportsRelatedObjects
: 一連の空港に関連するさまざまなオブジェクトを返します。空港分析のマップテンプレートで使用できます。nearbyAirports
: 与えられた距離内にある他の空港を見つけるための地理空間検索を実行します。関数はオプションの距離パラメーターを取り、ユーザーが関数の実行時に距離を指定できるようにします。routesBetweenAirports
: 一連の空港が与えられた場合、それらの空港間のすべてのルートを返します。Copied!1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94
import { Distance, Function, Integer, Filters } from "@foundry/functions-api"; import { ObjectSet, Objects, ExampleDataAirport } from "@foundry/ontology-api"; export interface IMapSearchAroundResults { objectRids?: string[]; edges?: IMapSearchAroundEdge[]; measures?: IMapSearchAroundMeasure[]; } export interface IMapSearchAroundEdge { sourceObjectRid: string; targetObjectRid: string; intermediaryObjectRids?: string[]; } export interface IMapSearchAroundMeasure { objectRids: string[]; measureId: string; } export class MapSearchAroundFunctions { /** * 空港に関連するオブジェクトを返す: 滑走路、ルート */ @Function() public async airportsRelatedObjects(airportSet: ObjectSet<ExampleDataAirport>): Promise<IMapSearchAroundResults> { const relatedObjects = (await Promise.all([ airportSet.searchAroundExampleDataRunway().allAsync(), airportSet.searchAroundRoutes().allAsync(), ])).flat(); const objectRids = relatedObjects.map(o => o.rid!); return { objectRids, }; } /** * 選択した空港から指定された距離(デフォルトは50km)以内にあるすべての空港を返す */ @Function() public async nearbyAirports(airport: ExampleDataAirport, distanceKm?: Integer): Promise<IMapSearchAroundResults> { const point = airport.airportLocation; const distance = Distance.ofKilometers(distanceKm ?? 50); if (point === undefined) { return {}; } const nearbyAirports = await Objects.search() .exampleDataAirport() .filter(airportFilter => airportFilter.airportLocation.withinDistanceOf(point, distance)) .allAsync(); const objectRids = nearbyAirports.map(o => o.rid!); return { objectRids, }; } /** * 選択した空港間のルートのみを返す */ @Function() public async routesBetweenAirports(airportSet: ObjectSet<ExampleDataAirport>): Promise<IMapSearchAroundResults> { const airports = await airportSet.allAsync(); const airportCodes = airports.map(airport => airport.airport); const airportsByCodes = new Map(Array.from(airports, a => [a.airport, a])); const routes = await Objects.search() .exampleDataRoute() .filter(route => Filters.and( route.origin.exactMatch(...airportCodes), route.dest.exactMatch(...airportCodes), )) .allAsync(); const edges = routes.map(route => ({ sourceObjectRid: airportsByCodes.get(route.origin!)!.rid!, targetObjectRid: airportsByCodes.get(route.dest!)!.rid!, intermediaryObjectRids: [route.rid!], })); return { edges }; } }