从网址谷歌地图获取经纬度



我需要一种方法来计算谷歌地图中一个地方的纬度,经度提供其链接。或者,如果可能的话,我可以在地图上绘制应用程序内部的点,或者使用某种意图从谷歌地图共享纬度经度,以便我可以从我的应用程序中接收它,那就没问题了。以上是否有任何一种可能直接或间接?

简而言之,我有一个谷歌地图URL(我可能在WhatsApp或类似平台上收到过(,并且使用它,不知何故,我需要在我的应用程序中获取该地点的纬度和经度,即使它是间接方式。我对地方 API 不感兴趣,因为它有限制。

几个小时以来一直在尝试解决方案,没有找到任何相关内容。

编辑:

我尝试使用的链接示例:

  • https://goo[dot]gl/maps/fSQSTjDR32m
  • https://maps.google.com/?cid=14927999966769665575&hl=en&gl=gb

(不能使用 URL 缩短器,因为 SO 不允许,请将 [点] 替换为 .(

似乎,对于所有类型的编码 URL,没有一个通用的解决方案,但对于描述的两个,您可以使用:

1(对于像https://goo[dot]gl/maps/fSQSTjDR32m这样的网址 - 谷歌网址缩短器API,请求如下:

https://www.googleapis.com/urlshortener/v1/url?shortUrl=<YOUR_SHORT_URL_e_g_https://goo[dot]gl/maps/fSQSTjDR32m>&key=<YOUR_APP_KEY>

铌!您需要在开发者控制台上启用网址缩短器 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。有关更多详细信息,请查看食人魔的这个问题和答案。

因此,对于缩短的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。根据树莓的这个答案:

它不是第一组 coordinates@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,你可以使用谷歌地图API和URL请求,如

https://maps.googleapis.com/maps/api/place/details/json?cid=&key=

其中<YOUR_CID> = 14927999966769665575<YOUR_APP_KEY>启用了谷歌地图API的Android应用的有效密钥(在开发者控制台上与URL缩短器API相同(。更多细节看看莱昂的这个答案。 您可以使用HttpURLConnection来获取响应,例如第 1 点:

...
URL url = new URL("https://maps.googleapis.com/maps/api/place/details/json?cid=...");
HttpURLConnection con = (HttpURLConnection) url.openConnection();
...

结果,您应该获得带有标签geometry和"子标签"的大 JSONlocation

...
"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(,您应该找到其他用于解码和提取经纬度的方案。

您可以从网址谷歌地图获取经纬度,

使用正则表达式匹配器和模式

注意这在没有短链接的情况下工作正常,如下所示:

https://www.google.com/maps/place/Egypt/@26.8444558,26.3722095,6z/data=!3m1!4b1!4m13!1m7!3m6!1s0x0:0x0!2zMTfCsDMwJzA0LjQiTiA3NMKwMDcnMjQuNyJF!3b1!8m2!3d17.5012212!4d74.1235132!3m4!1s0x14368976c35c36e9:0x2c45a00925c4c444!8m2!3d27.0982539!4d29.8828125

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);
}

相关内容

  • 没有找到相关文章

最新更新