Adr*_*ian 7 android google-api
我构建了一个Android应用程序,可以处理谷歌地图的共享意图并显示它的坐标.
问题是,他们发送了一个简短的网址,我使用Google的网址缩短API解码,在某些情况下,结果长链接属于这种类型:http://maps.google.com/?cid = 3635533832900933072&hl = en&gl = us .
任何人都可以帮助我如何获得相应的坐标"cid = 3635533832900933072"
据我所知,没有公共API来从cid获取位置.
但是,可能的解决方法是解析Google地图输出以获取纬度和经度(尽管如果它们更改结果格式可能会很脆弱).
(虽然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;
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2211 次 |
| 最近记录: |