14

我有这个功能(将 WGS84 大地水准面的坐标转换为笛卡尔坐标......没关系):

  function convert_geo_to_enu(coord_geo) { \
    xi=sqrt(1 - e*e*sin(coord_geo[1])*sin(coord_geo[2])); \
        \
        coord_enu[1]=(a/xi + coord_geo[3])*cos(coord_geo[1])*cos(coord_geo[2]); \
        print coord_enu[1] " hhh " ; \
        coord_enu[2]=(a/xi + coord_geo[3])*cos(coord_geo[1])*sin(coord_geo[2]); \
        coord_enu[3]=(a*(1-e*e)/xi0 + coord_geo[3])*sin(coord_geo[1]); \
    \
    return coord_enu \   # <-- here comes the problem
  } \


problem --> mawk: line 64: illegal reference to array coord_enu

作为数组返回有什么问题?有什么不同的语法吗?

我可以使用:

  function convert_geo_to_enu(coord_geo, coord_enu) { \
       ...
       coord_enu[1]=...
       ...
  } \

甚至:

  function convert_geo_to_enu(coord_geo) { \
       ...
       coord_enu[1]=...
       ...
  } \

然后只是将变量coord_enu用作全局变量?

但是使用 return 语句看起来更好(尤其是对我来说)

4

2 回答 2

21

有点晚了,但这是我使用的解决方案:

我发送了一个我想要填充的变量作为函数的参数:

function myfunct(result, array_size) {
    for(i = 1; i <= array_size; i++) {
        result[i] = ##whatever you want
    }
}

然后,您可以将结果变量视为函数外部的数组

希望这可以帮助寻找答案的人

于 2013-03-22T12:52:03.230 回答
14

将数组视为全局。AWK 不能返回数组。

于 2012-09-10T10:58:07.683 回答