JQ中如何翻线改键

How to flip lines and change keys in JQ

我正在创建我校园的交互式地图,想法是复制我在 uMaps 上所做的事情,in this link。 geojson 是从 UMap 下载的,我使用的是它附带的坐标。

我的第一个问题是我在json中的坐标,本来是一个GeoJson,排序错误,我的long在前,然后是lat,因此在解析Google地图时可以'正确阅读。

Json:

{
  "type": "FeatureCollection",
  "features": [
    {
      "type": "Feature",
      "properties": {
        "name": "Almoxarifado / Patrimônio"
      },
      "geometry": {
        "type": "Polygon",
        "coordinates": [
          [
            [
              -52.163317,
              -32.075462
            ],
            [
              -52.163884,
              -32.075467
            ],
            [
              -52.163883,
              -32.075336
            ],
            [
              -52.163321,
              -32.075332
            ],
            [
              -52.163317,
              -32.075462
            ]
          ]
        ]
      }
    },
   {
    ...
   },
   {
    ...
   },
   ...
  ]
}

所以,我必须翻转坐标线以正确放入我的 Google 地图 Api。

我的第二个问题是将“类型”键更改为“层”,以便在我的应用程序中实现更好的分离层。

我试过:

.features[] | .["type"]  |= .["new value"]

如何改变值并且只接受浮点值

如有任何帮助、建议或指导,我们将不胜感激。

第 1 部分

flip the coordinates lines

为了清晰和便于测试,让我们定义一个辅助函数:

# input: a JSON object with a coordinates array of arrays of pairs
def flip: .coordinates |= map(map(reverse)) ;

甚至更好 - 在调用 reverse 之前,检查数组是否具有预期的长度,例如:

def flip:
  .coordinates
  |= map(map(if length == 2 then reverse 
             else error("incorrect length: \(length)")
             end)) ;

要翻转坐标,我们现在可以简单地写:

.features[].geometry |= flip

第 2 部分

change the "type" key to "layer"

{layer: .type} + .
| del(.type)

放在一起

{layer:.type} + .
| del(.type)
| .features[].geometry |= flip