Android 将 CID 位置转换为坐标

标签 android google-api

我构建了一个 Android 应用程序,它可以处理来自 Google map 的共享 Intent 并显示它的坐标。

问题是他们发送了一个短 url,我用 Google 的 url shortner api 对其进行解码,在某些情况下,结果长链接是这种类型的:http://maps.google.com/?cid=3635533832900933072&hl=en&gl=us .

任何人都可以帮助我如何获得 "cid=3635533832900933072" 的对应坐标

最佳答案

据我所知,没有公共(public) API 可以从 cid 获取位置。

但是,一个可能的解决方法是解析 Google map 输出以获取纬度和经度(尽管它可能很脆弱,如果它们更改结果格式)。

(虽然 url 包含 output=json,但它实际上不是 json——这就是为什么我用 substring() 等解析它而不是使用 JSONObject).

试试这段代码:

public static LatLng getCidCoordinates(String cid)
{
    final String URL_FORMAT = "http://maps.google.com/maps?cid=%s&q=a&output=json"; 
    final String LATLNG_BEFORE = "viewport:{center:{";
    final String LATLNG_AFTER = "}";
    final String LATLNG_SEPARATOR = ",";
    final String LAT_PREFIX = "lat:";
    final String LNG_PREFIX = "lng:";

    try
    {
        HttpClient client = new DefaultHttpClient();
        HttpGet get = new HttpGet(String.format(URL_FORMAT, cid));
        HttpResponse response = client.execute(get);

        String text = EntityUtils.toString(response.getEntity(), "UTF-8");

        int startIndex = text.indexOf(LATLNG_BEFORE);
        if (startIndex == -1)
            return null;

        startIndex += LATLNG_BEFORE.length();
        int endIndex = text.indexOf(LATLNG_AFTER, startIndex);

        // Should be "lat:<number>,lng:<number>"
        String[] parts = text.substring(startIndex, endIndex).split(LATLNG_SEPARATOR);
        if (parts.length != 2)
            return null;

        if (parts[0].startsWith(LAT_PREFIX))
            parts[0] = parts[0].substring(LAT_PREFIX.length());
        else
            return null;

        if (parts[1].startsWith(LNG_PREFIX))
            parts[1] = parts[1].substring(LNG_PREFIX.length());
        else
            return null;

        return new LatLng(Double.parseDouble(parts[0]), Double.parseDouble(parts[1]));
    }
    catch (NumberFormatException e)
    {
        e.printStackTrace();
        return null;
    }
    catch (IOException e)
    {
        e.printStackTrace();
        return null;
    }
}

关于Android 将 CID 位置转换为坐标,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23968937/

相关文章:

android - 在 Android 中的 AsyncTask 之后更新 CustomArrayAdapter

java - 包含TextView的ScrollView不滚动

java - Android中如何在一定时间后显示通知

java - 如何从 Android 中的 Google Fit 服务检索健康数据

firebase - Actions on Google 以 "Sorry, I didn' 响应,但未得到任何响应。”

android - 使用 YoutubeAndroidPlayerAPI 的 YoutubePlayerView 播放私有(private) YouTube 视频?

android - 如何在 Jenkins 中为具有 Android AVD 的目录设置路径?

java - 如何在我的 Java 应用程序中使用 Google Translate API?

c# - 如何使用 C# 对 Picasa 网络相册数据 API 进行 OAuth2 身份验证?

google-api - 可以通过服务帐户授权访问哪些 Google API?