Fiwareを使って都市OSを動かしてみよう

Munu


データ仕様の現状と課題
スマートシティの標準規格(案)
データモデルのユースケース
ツール


Column
Link
用語集

Coppell

Technologies

 5. NGSI v2のAPI 5.6.7-5.6.10節




5.6.7.KeyValue形式での応答
2022年4月11日
 既に記載したように、NGSI V2のJson文にはNormalized形式とKeyValue形式があり、既定値はNormalized形式なので、KeyValue形式で応答が欲しいときはoptions=keyValuesを指定します。事例は既に紹介しましたので、ここでは省略します。



5.6.8.Valueだけの応答
2022年4月11日
 これも既に紹介しましたが、Valueだけを取り出すこともできます。例えば以下となります。

curl -G -X GET 'http://localhost:1026/v2/entities' -d 'q=address.streetAddress==%e9%95%b7%e6%b2%bc%e7%94%ba%32%30%32%2d%35' -d 'options=values'
PS C:\Users\owner> curl -G -X GET 'http://localhost:1026/v2/entities' -d 'q=address.streetAddress==%e9%95%b7%e6%b2%bc%e7%94%ba%32%30%32%2d%35' -d 'options=values'
[[{"streetAddress":"長沼町202-5","addressLocality":"八王子市","addressRegion":"東京都","postalCode":"1920907"},{"type":"Point","coordinates":[139.37158,35.64226]},"ローソン八王子長沼町店"]]
PS C:\Users\owner>

エンドポイントに"value"を指定した場合もValueだけを取り出せましたが、一件のEntityしか取り出せませんでした。この方法だと、幾つものデータを一度に取り出せますね。


5.6.9.特定Attributeのフィルタリング
2022年4月11日
 既に特定Entityの特定Attributeを取り出す方法は説明しましたが、ここではEntityを特定しない方法を紹介します。欲しいAttributeを"attrs=<アトリビュート名>"で指定します。例えば、以下となります。

curl -G -X GET 'http://localhost:1026/v2/entities' -d 'options=values' -d 'attrs=name' -d 'type=Store'

この例ではStoreが3件格納されていたため、3件のNameが返却されています。
PS C:\Users\owner> curl -G -X GET 'http://localhost:1026/v2/entities' -d 'options=values' -d 'attrs=name' -d 'type=Store'
[["ローソン八王子長沼町店"],["セブンイレブン呉市吉浦店"],["ファミリーマート日野北野街道店"]]
PS C:\Users\owner>

複数のValueを一度に取り出す場合は、カンマを挟んで複数のAttribute名を並べます。例えば以下となります。

curl -G -X GET 'http://localhost:1026/v2/entities' -d 'options=values' -d 'attrs=name,description' -d 'type=Store'
PS C:\Users\owner> curl -G -X GET 'http://localhost:1026/v2/entities' -d 'options=values' -d 'attrs=name,description' -d 'type=Store'
[["ローソン八王子長沼町店"],["セブンイレブン呉市吉浦店","呉市吉浦の国道31号線沿いのコンビニエンスストア"],["ファミリーマート日野北野街道店","日野市平山の北野街道沿いのコンビニエンスストア"]]
PS C:\Users\owner>

Attributeを検索したくない場合は__noneを指定します。例えば、以下となります。

curl -G -X GET 'http://localhost:1026/v2/entities' -d 'options=values' -d 'attrs=__none' -d 'type=Store'
PS C:\Users\owner> curl -G -X GET 'http://localhost:1026/v2/entities' -d 'options=values' -d 'attrs=__none' -d 'type=Store'
[[],[],[]]
PS C:\Users\owner>

みっつあるという事だけがわかります。また、optionsをcountすると以下が検索されます。

curl -G -X GET 'http://localhost:1026/v2/entities' -d 'options=count' -d 'attrs=__none' -d 'type=Store'
PS C:\Users\owner> curl -G -X GET 'http://localhost:1026/v2/entities' -d 'options=count' -d 'attrs=__none' -d 'type=Store'
[{"id":"urn:ngsi-ld:Store:001","type":"Store"},{"id":"urn:ngsi-ld:Store:002","type":"Store"},{"id":"urn:ngsi-ld:Store:003","type":"Store"}]
PS C:\Users\owner>

この様に、特別なAttributeである、idとtypeだけが返却されます。


5.6.10.座標によるフィルタリング
2022年8月15日
 StoreのEntityを作成した際、locationのtypeをGeoLocationではなく、geo:jsonとしたのは、この座標によるフィルタリングを動かうためでした。fiware/orionでは、特定の座標からの距離でフィルタリングする事が出来ますが、そのためにはEntityを格納するときに、geo:jsonとしておく必要があります。Sotore001の座標は、八王子市の[139.37158,35.64226]で、Store003は日野市の[139.38879540047748,35.65005167131512]でした、ちょうどこの間の場所に平山城址公園駅があり、その座標は[139.380319,35.647922]なので、ここからの距離でフィルタリングしましょう。その際の形式は例えば以下となります。

curl -G -X GET 'http://localhost:1026/v2/entities' -d 'type=Store' -d 'georel=near;maxDistance:<距離>' -d 'geometry=point' -d 'coords=35.647922,139.380319' -d 'attrs=__none'

座標の表現が、緯度と経度が逆になっている事に注意してください。また、<距離>はメートル単位の数値です。
例えば、以下の様になります。
PS C:\Users\owner> curl -G -X GET 'http://localhost:1026/v2/entities' -d 'type=Store' -d 'georel=near;maxDistance:1000' -d 'geometry=point' -d 'coords=35.647922,139.380319' -d 'attrs=__none'
[{"id":"urn:ngsi-ld:Store:003","type":"Store"}]
PS C:\Users\owner> curl -G -X GET 'http://localhost:1026/v2/entities' -d 'type=Store' -d 'georel=near;maxDistance:2000' -d 'geometry=point' -d 'coords=35.647922,139.380319' -d 'attrs=__none'
[{"id":"urn:ngsi-ld:Store:003","type":"Store"},{"id":"urn:ngsi-ld:Store:001","type":"Store"}]
PS C:\Users\owner> curl -G -X GET 'http://localhost:1026/v2/entities' -d 'type=Store' -d 'georel=near;maxDistance:1000000' -d 'geometry=point' -d 'coords=35.647922,139.380319' -d 'attrs=__none'
[{"id":"urn:ngsi-ld:Store:003","type":"Store"},{"id":"urn:ngsi-ld:Store:002","type":"Store"},{"id":"urn:ngsi-ld:Store:001","type":"Store"}]
PS C:\Users\owner>

1,000メートルの時にはStore003だけが、2,000メートルの時にはStore003に加えてStore001が、そしてそれを1,000,000メートル、つまり1,000キロメートルすると、3件とも検索されました。