在谷歌表格中的州和县的数组公式中进行反向地理编码

问题描述 投票:0回答:1

我有以下代码用于在谷歌表格中进行反向地理编码以查找美国的州和县。它有效,但我需要在数组公式中使用它,但无法弄清楚。我对编码相当陌生,所以请友善。

    `/**
     * Return the closest, human-readable address type based on the the latitude and longitude values     specified.
     *
     * @param   {"locality"}  addressType Address type. Examples of address types include
     *                                    a street address, a country, or a political entity.
     *                                    For more info check:       https://developers.google.com/maps/documentation/geocoding/intro#Types
    * @param   {"52.379219"} lat         Latitude
    * @param   {"4.900174"}  lng         Longitude
    * @customfunction
    */
    function reverseGeocode(addressType, lat, lng) {
    Utilities.sleep(1500);

    if (typeof addressType != 'string') {
        throw new Error("addressType should be a string.");
    }

    if (typeof lat != 'number') {
        throw new Error("lat should be a number");
    }

    if (typeof lng != 'number') {
        throw new Error("lng should be a number");
    }

    var response = Maps.newGeocoder().reverseGeocode(lat, lng),
        key      = 'KEY';
    response.results.some(function (result) {
        result.address_components.some(function (address_component) {
            return address_component.types.some(function (type) {
                if (type == addressType) {
                    key = address_component.long_name;
                    return true;
                }
            });
        });
    });
    return key;
    }`

在单元格中使用以下公式: =iferror(reverseGeocode("administrative_area_level_2", A1, B1),"未提供")

如果我尝试将其放入这样的数组公式中: =arrayformula(iferror(reverseGeocode("administrative_area_level_2", A1:A, B1:B),"Not Supplied"))

它不起作用,任何帮助将不胜感激。

google-sheets reverse geocoding
1个回答
0
投票

修改要点:

  • 当运行
    =arrayformula(iferror(reverseGeocode("administrative_area_level_2", A1:A, B1:B),"Not Supplied"))
    时,3个参数分别是一个字符串、一个像
    [["A1"],["A2"],,,]
    这样的二维数组和一个像
    [["B1"],["B2"],,,]
    这样的二维数组。但是,当我看到你的自定义函数
    reverseGeocode
    时,似乎3个参数
    addressType, lat, lng
    是字符串值。 (
    lat
    lng
    是数字类型?)。在这种情况下,
    [["A1"],["A2"],,,]
    [["B1"],["B2"],,,]
    的值分别用于第二个和第三个参数。我认为您当前问题的原因是由于此。

为了消除此问题,如何为自定义函数提供有效参数,如下所示?

修改后的公式:

=MAP(A1:A,B1:B,LAMBDA(ARGUMENT2,ARGUMENT3,IF(AND(ARGUMENT2<>"",ARGUMENT3<>""),iferror(reverseGeocode("administrative_area_level_2",ARGUMENT2,ARGUMENT3),"Not Supplied"),"")))
  • 这样,在不修改自定义函数的情况下,“A1:A”和“B1:B”的值可以用作第二个和第三个参数。

参考:

© www.soinside.com 2019 - 2024. All rights reserved.