1

我正在尝试从简短的开放位置代码中获取完整的开放位置代码,我做错了什么?我在我的 android 项目中使用 Java Open Location Code -library。

        // 63.7740574, 23.9011008

        // This is an full olc (I searched it from web)
        // input = "9GM5QWF2+JC";

        // This is an short olc (also searched from the web)
        // input = "QWF2+JC";

        // And this is an olc which is copied to clipboard from google maps application
        input = "QWF2+JC Hautala";

        boolean isFullCode = OpenLocationCode.isFullCode(input);
        boolean isShortCode = OpenLocationCode.isShortCode(input);

        if (isFullCode || isShortCode)
        {
            OpenLocationCode olc = new OpenLocationCode(input);

            Double lat = olc.decode().getCenterLatitude(); // Crashes here if we are parsing input to short code
            Double lng = olc.decode().getCenterLatitude(); // But doesn't crash if we are using full lenght code

            result = new LatLng(lat, lng);
        }
4

2 回答 2

2

完整的代码看起来像 8FVC9G8F+6W - 也就是说,它在“+”之前有八位数字。

短代码是相同的,只是“+”之前的数字更少(通常是四个)。

“QWF2+JC Hautala”是一个带有地方性的短代码。要将其转换为完整代码,您需要:

  1. 将其拆分为“QWF2+JC”和“Hautala”;
  2. 使用您选择的地理编码器将“Hautala”地理编码为纬度和经度;
  3. recover()使用OpenLocationCode 对象的方法恢复完整代码。

另一种方法是将其扔到Google Geocoding API(您需要获取 API 密钥)。

于 2018-10-18T15:50:01.330 回答
1

如果没有某种地理编码,就不可能从短代码中恢复完整代码。简短形式旨在更易于人类阅读并识别已知区域内的位置。

但是,如果您从 Google 地图获取短代码,则可以改为使用经度/纬度对来生成完全离线的完整代码。

double latitude = 63.7740574;
double longitude = 23.9011008;

OpenLocationCode olc = new OpenLocationCode(latitude, longitude, 10); // the last parameter specifies the number of digits
String code = olc.getCode(); // this will be the full code
于 2018-12-28T18:58:30.270 回答