微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

使用 keyValue 选项创建实体时,Orion 自动数据类型检测无法正确推断位置属性

如何解决使用 keyValue 选项创建实体时,Orion 自动数据类型检测无法正确推断位置属性

创建实体时,您可以这样做:

curl --location --request POST 'https://my.api/v2/entities/?options=keyvalues' --header 'Content-Type: application/json' --data-raw '{
   "id":"vehicle:Wastemanagement:1","type":"Wastemanagement","vehicleType":"lorry"
}'

或者没有 options=keyvalues 参数:

curl --location --request POST 'https://my.api/v2/entities/' --header 'Content-Type: application/json' --data-raw '{
   "id":"vehicle:Wastemanagement:2","vehicleType":{
        "value": "lorry"
    }
}'

在这两种情况下,实体都是相同的。 但我没有设法创建一个带有 options=keyvalues 参数的实体,该实体具有一个具有“位置”属性的实体:在做时

curl --location --request POST 'https://my.api/v2/entities/' --header 'Content-Type: application/json' --data-raw '{
   "id":"vehicle:Wastemanagement:3","vehicleType":"lorry","location": {
        "type": "Point","coordinates": [
            -0.56832066,47.49576
        ]
    }
}'

在这种情况下, curl --location --request GET https://my.api/v2/entities/vehicle:WasteManagement:2' 的结果

"location": {
    "type": "StructuredValue","value": {
        "type": "Point","coordinates": [
            -3.164485592,40.627851337
        ]
    },"Metadata": {}
},

位置类型为StructuredValue

我的期望是 geo:point 或其他 geo:XXX,具体取决于 GeoJSON 的类型,这允许实体进行地理定位并按位置过滤。

解决方法

根据 NGSIv2 specification 部分“部分陈述”:

属性/元数据 type 可以在请求中省略。在属性/元数据创建或更新操作中省略时,根据值对类型使用默认值:

  • ...
  • 如果 value 是对象或数组,则使用 StructuredValue

在要求的情况下

curl --location --request POST 'https://my.api/v2/entities/?options=keyValue' --header 'Content-Type: application/json' --data-raw '{
   "id":"vehicle:WasteManagement:3","type":"WasteManagement","vehicleType":"lorry","location": {
        "type": "Point","coordinates": [
            -0.56832066,47.49576
        ]
    }
}'

location 属性满足 NGSIv2 规范的“当 [属性类型] 在属性/元数据创建或更新操作中省略时”。此外,value 是一个对象,因此 “如果 value 是一个对象或数组,则使用 StructuredValue。因此,使用 StructuredValue 类型创建/更新属性是正确的。

解决方法非常简单:如果您需要具有特殊类型的属性(如位置或 DateTime 的属性),请不要使用 keyValues 模式,而是使用规范化模式。

请注意,keyValues 模式被设计为帮助器,而不是作为规范化模式的替代品。 keyValues 模式涵盖了很大程度的规范化模式功能,但并不完全。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。