简而言之,我手头有一个谷歌地图URL(我可能在WhatsApp或类似平台上收到),并且使用它,无论是通过间接方式还是直接方式,我都需要在我的应用程序中获取该地方的纬度和经度。我不感兴趣的是places API,因为它有限制。
已经尝试寻找解决方案几个小时了,没有找到相关的东西。
编辑:
我正在尝试使用的链接示例:
由于SO不允许使用URL缩短服务,因此无法使用。请将[dot]替换为.。
由于SO不允许使用URL缩短服务,因此无法使用。请将[dot]替换为.。
看起来,并没有一种通用的解决方案适用于所有类型的编码URL,但对于描述的两种情况,您可以使用以下方法:
1)对于像https://goo[dot]gl/maps/fSQSTjDR32m
这样的URL - 使用Google URL缩短API并发送请求:
https://www.googleapis.com/urlshortener/v1/url?shortUrl=<YOUR_SHORT_URL_e_g_https://goo[dot]gl/maps/fSQSTjDR32m>&key=<YOUR_APP_KEY>
注意!您需要在开发者控制台上启用URL缩短API,为您的Android应用程序获取有效的密钥。
您可以使用HttpURLConnection
来获取响应。
...
URL url = new URL("https://www.googleapis.com/urlshortener/v1/url?shortUrl=...");
HttpURLConnection con = (HttpURLConnection) url.openConnection();
...
{
"kind": "urlshortener#url",
"id": "https://goo<.>gl/maps/fSQSTjDR32m",
"longUrl": "https://www.google.co.in/maps/place/10%C2%B007'16.8%22N+76%C2%B020'54.2%22E/@10.1213253,76.3478427,247m/data=!3m2!1e3!4b1!4m6!3m5!1s0x0:0x0!7e2!8m2!3d10.1213237!4d76.348392?shorturl=1",
"status": "OK"
}
在longUrl
标签中包含所需纬度-经度URL。根据this treebles的回答:
这不是第一组坐标@10.1213253,76.3478427——那是地图视口的中心。感兴趣点的坐标出现在其fid之后,由!3d10.1213237!4d76.348392指示。其中!3d参数表示感兴趣点的纬度,!4d参数表示其经度。
您可以通过!3d
和!4d
前缀或使用正则表达式在longUrl
中找到纬度-经度。
2) 对于类似 https://maps.google.com/?cid=14927999966769665575&hl=en&gl=gb 的网址,您可以使用 Google Maps API 和 URL 请求,例如:
https://maps.googleapis.com/maps/api/place/details/json?cid=&key=
当 <YOUR_CID> = 14927999966769665575
并且 <YOUR_APP_KEY>
是您的Android应用程序的有效密钥,并启用了Google Maps API(在开发人员控制台上与URL缩短器API相同)。有关更多详细信息,请查看this Leon的答案。
您可以使用HttpURLConnection
获取响应,如第1点所示:
...
URL url = new URL("https://maps.googleapis.com/maps/api/place/details/json?cid=...");
HttpURLConnection con = (HttpURLConnection) url.openConnection();
...
因此,您应该获得带有标记geometry
和“子标记”location
的大JSON。
...
"geometry" : {
"location" : {
"lat" : 10.1652839,
"lng" : 76.218744
},
"viewport" : {
"northeast" : {
"lat" : 10.1666328802915,
"lng" : 76.22009298029151
},
"southwest" : {
"lat" : 10.1639349197085,
"lng" : 76.21739501970849
}
}
},
...
你可以从中获得纬度和经度。
对于其他类型的URL(不是https://goo[dot]gl/maps/fSQSTjDR32m或https://maps.google.com/?cid=14927999966769665575&hl=en&gl=gb),你应该找到其他方案来解码和提取纬度和经度。
String url = "www.google.com/maps/place/@bla,bla"; // full link
Pattern pattern = Pattern.compile("\\d+\\.\\d+,\\d+\\.\\d+");
Matcher matcher = pattern.matcher(url);
if (matcher.find()) {
System.out.println(matcher.group(0));
}
if (matcher.find()) {
String s = matcher.group(0);
String lon = s.split(",")[0];
String lat = s.split(",")[1];
System.out.println(lon);
System.out.println(lat);
}