我需要一种方法来计算出谷歌地图中某个地方的经度和纬度,并提供其链接。另外,如果可以的话,我可以在地图上绘制应用程序内的点,或者使用某种意图从Google地图共享纬度经度,这样我就可以在应用程序内接收该点。以上任何一种可能直接或间接吗?
简而言之,我随身带有一个谷歌地图URL(我可能已经在WhatsApp或类似平台上收到了),并且以某种方式使用它,即使我在应用程序中也需要获取该位置的纬度和经度,即使这是一种间接的方式。我对places API没兴趣,因为它有限制。
已经尝试了几个小时的解决方案,没有发现任何相关的东西。
编辑:
我要使用的链接示例:
(由于SO不允许,因此无法使用URL缩写,请将[dot]替换为。)
答案 0 :(得分:3)
似乎,没有一种通用的解决方案可用于所有类型的编码URL,但是对于上述两种,您可以使用:
1)用于诸如https://goo[dot]gl/maps/fSQSTjDR32m
的URL-Google URL Shortener API,其请求如下:
https://www.googleapis.com/urlshortener/v1/url?shortUrl=<YOUR_SHORT_URL_e_g_https://goo[dot]gl/maps/fSQSTjDR32m>&key=<YOUR_APP_KEY>
NB!您需要在Developer Console
上启用了URL Shortener API的Android应用程序的有效密钥您可以使用HttpURLConnection
获得回复
...
URL url = new URL("https://www.googleapis.com/urlshortener/v1/url?shortUrl=...");
HttpURLConnection con = (HttpURLConnection) url.openConnection();
...
或使用URL Shortener API Client Library for Java。有关更多详细信息,请查看this的Ogre问题和答案。
因此,对于缩短的URL,您应该获得JSON响应,如:
{
"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。根据{{3}}关于treebles的回答:
这不是第一组坐标@ 10.1213253,76.3478427-即 地图视口的中心。点的坐标 兴趣来自他们的fid,并表示为 !3d10.1213237!4d76.348392其中,!3d参数表示纬度,而!4d参数表示兴趣点的经度。
您可以通过longUrl
和!3d
前缀或使用正则表达式在!4d
中查找纬度。
2)对于this之类的URL,您可以使用https://maps.google.com/?cid=14927999966769665575&hl=en&gl=gb和URL请求之类
Google Maps API&key =
其中<YOUR_CID> = 14927999966769665575
和<YOUR_APP_KEY>
对启用了Google Maps API的Android应用有效(在开发者控制台上与URL Shortener API相同)。有关更多详细信息,请查看https://maps.googleapis.com/maps/api/place/details/json?cid=的this答案。
您可以使用HttpURLConnection
来获得与第1点类似的响应:
...
URL url = new URL("https://maps.googleapis.com/maps/api/place/details/json?cid=...");
HttpURLConnection con = (HttpURLConnection) url.openConnection();
...
因此,您应该获得带有标签geometry
和“子标签” location
...
"geometry" : {
"location" : {
"lat" : 10.1652839,
"lng" : 76.218744
},
"viewport" : {
"northeast" : {
"lat" : 10.1666328802915,
"lng" : 76.22009298029151
},
"southwest" : {
"lat" : 10.1639349197085,
"lng" : 76.21739501970849
}
}
},
...
,您可以从中获得经度。
对于其他类型的URL(不是Leon或https://goo[dot]gl/maps/fSQSTjDR32m),您应该找到其他用于解码和提取经度的方案。
答案 1 :(得分:1)
您可以从URL Google Maps获取经度,
使用正则表达式匹配器和模式
注意: 如果没有短链接,就可以正常工作,例如:
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);
}