Google-Apps-Scripts函数调用返回参数

时间:2017-06-19 11:04:53

标签: parameters function-call

帮助。

我使用google工作表,其中每行包含英国网格系统(东部和北部)中的一对坐标。这些对被转换为纬度和宽度。调用NEtoLL函数的经度 - 见下面的大纲。

目的是从一行中的相邻单元格中取出东,北对,并用纬度和纬度替换NEtoLL函数调用和同一行中的下一个单元格。经度值。几年前我用过这个,我相信一切都运转正常 - 但我会说那不是我!

问题...但是现在返回的值被放置在函数调用单元格中,而下一行中的单元格位于此下面。如果下一行包含对东,北对的NEtoLL函数调用,则无法覆盖此值。

它适用于最后一行,它正确地用纬度替换函数调用,而下面的单元格用经度替换。

如何返回值,使它们放在同一行的相邻单元格中。

非常感谢 保罗

function NEtoLL(east, north) 
{
  // converts NGR easting and nothing to lat, lon.
  // input metres, output signed degrees 
  var nX = Number(north);
  var eX = Number(east);
// ... lots of serious maths code (which I have removed) to convert from UK's Grid Ref System to Lat Long WGS84

  var geo = transform(phip, lambdap, OSGB_AXIS, OSGB_ECCENTRIC, 0, WGS84_AXIS, WGS84_ECCENTRIC, 446.448, -125.157, 542.06, 0.1502, 0.247, 0.8421, -20.4894);

  var res = new Array(2);
  res[0] = geo.latitude * rad2deg;
  res[1] = geo.longitude * rad2deg;

  return res; // return(geo);
}

3 个答案:

答案 0 :(得分:0)

有几种方法可以做到这一点。最简单,最快的可能是复制函数,所以你现在有2个几乎相同的函数输出纬度或经度之一。然后在不同的列中使用它们。

function NEtoLatitude(east,north) { 
 // your input assignments 
 // your lots of serious maths code

var res = geo.latitude * rad2deg; 
return res 
} 

function NEtoLongitude(east,north){ 

 // your same input assignments 
 // your same lots of serious maths code

var res = geo.longitude * rad2deg; 
return res 
} 

您的问题是输出一个数组,并在列中向下填充。在此解决方案中,您将在一列中使用NEtoLatitude,在下一列中使用NEtoLongitude。每个仅输出单个期望值,因此相应的纬度和经度位于相同的预期行中。

答案 1 :(得分:0)

我想你想要一个多维数组。 这会将输出放在一个新列而不是一个新行中。

function example(input) {

  res = [];//creates array

  res[0] = [];//creates array in 1st position of res array
  res[0][0]="first";//populates 1st position of nested array 
  res[0][1]="row";//populates 2nd position of nested array

  //as an example the following would populate the next row down
  res[1] = [];
  res[1][0]= "new";
  res[1][1]= "row";

  return res;

}

这里是example()输出的屏幕截图 - 在A1中的功能(很遗憾,它不会让我发布图片。)

Google sheets

所以你需要两个项目都在数组的相同(第一)位置。

  res = [];// equivalent to your var res = new Array(2);
  res[0] = [];//creates array in 1st position of res array
  res[0][0] = geo.latitude * rad2deg;
  res[0][1] = geo.longitude * rad2deg;

  return res;

Walling Rich

答案 2 :(得分:0)

非常感谢两位回复。两者都有效。我更喜欢Walling Rich的解决方案,因为它提供了对每个英国网格参考对的NEtoLL功能的单次调用,并正面解决了原始问题。

现在看看我是否可以将范围传递给NEtoLL并返回一系列值,因此只进行一次服务器端调用。

再次感谢。 保罗