安卓如何将CID位置转换为坐标

8
我建立了一个安卓应用程序,可以处理来自Google Maps的分享意图并显示其坐标。
问题在于他们发送的是一个短链接,我使用Google的URL缩短API进行解码,在某些情况下,结果长链接的类型如下:http://maps.google.com/?cid=3635533832900933072&hl=en&gl=us
有人能帮我获取与“cid = 3635533832900933072”相对应的坐标吗?
4个回答

6
据我所知,目前没有公共API可以从cid获取位置。
然而,一个可能的解决方法是解析Google Maps输出以获取纬度和经度(尽管如果他们更改结果格式,它可能很脆弱)。
(虽然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;
    }
}

@Richard 是的,怎么了?它坏了吗? - matiash
@matiash 嗯,当我尝试搜索公共交通站点的详细信息时,JSON返回为空。 :[ - richardaum

4

1
在最新的Google Maps更新中,共享意图包含地址名称在正文中,可以通过Geocoder解码成坐标。

1
发送请求到链接 检索响应并解析正文 提取带有地点名称的元信息 地点名称可用于通过地理编码器找到位置
例如:
有一个链接:https://maps.google.com/?cid=13226830714359798441 响应正文包含元信息:
<meta content="Big Ben · London SW1A 0AA, United Kingdom" itemprop="name">
<meta content="Big Ben · London SW1A 0AA, United Kingdom" property="og:title">
<meta content="Big Ben · London SW1A 0AA, United Kingdom" property="og:site_name">

通过Google地图CID摘要获取地点位置。

https://gist.github.com/asilichenko/b0000eb1562c9e4e75b0d43d799260bc


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接