[英]How to pass latitude-longitude to Google Maps JavaScript API v3 Directions service?
[英]Get latitude-longitude from URL Google Maps
我需要一种方法来计算谷歌地图中一个地方的纬度和经度,提供了它的链接。 或者,如果可能的话,我可以在地图上绘制我的应用程序内的点,或者使用某种意图从谷歌地图共享经纬度,以便我可以从我的应用程序中接收它。 以上任何一种可能直接或间接吗?
简而言之,我有一个谷歌地图 URL(我可能在 WhatsApp 或类似平台上收到过),并且使用它,不知何故,我需要在我的应用程序中获取该地点的纬度和经度,即使它是一个间接方式。 我对地方 API 不感兴趣,因为它有限制。
几个小时以来一直试图找到解决方案,但没有找到任何相关的内容。
编辑:
我尝试使用的链接示例:
(不能使用 URL Shortners,因为 SO 不允许,将 [dot] 替换为 .)
似乎,对于所有类型的编码 URL 没有一种通用的解决方案,但对于描述的两种,您可以使用:
1) 对于像https://goo[dot]gl/maps/fSQSTjDR32m
- Google URL Shortener API这样的URL ,请求如下:
https://www.googleapis.com/urlshortener/v1/url?shortUrl=<YOUR_SHORT_URL_e_g_https://goo[dot]gl/maps/fSQSTjDR32m>&key=<YOUR_APP_KEY>
注意! 您需要在开发者控制台上启用 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 。 有关更多详细信息,请查看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。 根据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这样的 URL,您可以使用Google Maps API和 URL 请求,例如
https://maps.googleapis.com/maps/api/place/details/json?cid= &key=
其中<YOUR_CID> = 14927999966769665575
和<YOUR_APP_KEY>
为启用了 Google Maps API 的 Android 应用程序的有效密钥(在开发者控制台上与 URL Shortener API 相同)。 从更多细节来看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 )你应该找到其他解码和提取纬度的方案 -经度。
您可以从 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);
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.