从谷歌地图 url ftid (hex) 获取纬度/经度

Posted

技术标签:

【中文标题】从谷歌地图 url ftid (hex) 获取纬度/经度【英文标题】:Get lat/lon from google maps url ftid (hex) 【发布时间】:2017-12-04 06:21:11 【问题描述】:

当使用 android 谷歌地图应用共享按钮获取某个位置时,它只是将一个 url 作为意图返回给像这样的其他应用程序:

https://goo. gl/maps/tkNXzF2krmR2

这是一个谷歌短网址,可以翻译成长网址(使用 goole short url api),如下所示:

http://maps.google.com/?q=Tehran+Province,+Tehran,+Banafsheh+3&ftid=0x3f8dfd04d309f925:0x2867166b05b0bfe6&hl=en&gl=us&shorturl=1

很明显,这个网址没有纯纬度和经度值。但似乎值在 url 中的 ftid 参数后面。以“:”字符分隔。

请帮我从这种类似十六进制的格式中提取纬度和经度值

我正在使用 php 语言,但其他人也可以提供帮助。 我需要一个这样的功能:(这是行不通的):

函数 hextolatlon($hex) // 假设 hex 是一个像 0x1446041F 或 0x447D1100 这样的值 // 转换为有符号整数 $h=$hex&0xFF; $h=($h>8)&0xFF); $h=($h>16)&0xFF); $h=($h>24)&0xFF); $负=($h>>31)!=0; // 获取符号 如果($负) $h=~$h; $h=$h&0x7FFFFFFF; $h++; // 转换为度和分 $度=地板($h/10000000); $分钟=$h%10000000; // 转换为全度 $度+=($分钟/100000.0) / 60.0; 如果($负)$度=-$度; 返回$度;

将 0x3f8dfd04d309f925 转换为 35.74388 之类的东西。 非常感谢

【问题讨论】:

【参考方案1】:

我认为,迟到总比没有好。

您尝试解密的 FTID 参数不是(必然)存储纬度和经度。如果它指的是地图位置(例如咖啡馆、时装店),则冒号后面的参数的第二部分指的是客户 ID。

举一个真实的例子,参数:

!1s0x6ad63fbf56e24c27:0xe665b3308d32f379

可以这样理解

0xe665b3308d32f379  ---hex-to-dec--->  16601872622479930233

和https://google.com/maps?cid=16601872622479930233 将指向标记的地方。

如何从中提取坐标?如果你只有几个样品,你可以手工完成。点击上面的链接,1-2秒后,谷歌地图会刷新浏览器中的网址。它现在在!3d!4d 参数中包含该地点的确切坐标。

如果您有很多样本和/或想要使流程自动化,则必须使用 Google Maps API(例如查看 link)。

我还没想明白的是 1)第一个参数包含什么信息以及 2) 如果 FTID 参数指向地址或地理位置,如何理解它。

请查看我在here 发布的问题以了解更多详情。

【讨论】:

【参考方案2】:
function ftid_to_latlong($ftid)

    $fetch = curl_request("https://www.google.com/maps?ftid=$ftid");
    preg_match("/\"$ftid\",.*?(\d+\.\d+),(\d+\.\d+)/", $fetch, $geo);
    return [$geo[1], $geo[2]];

【讨论】:

以上是关于从谷歌地图 url ftid (hex) 获取纬度/经度的主要内容,如果未能解决你的问题,请参考以下文章

html 从谷歌地图获取经度和纬度

从谷歌地图获取经度和纬度的不断更新[重复]

使用标记从谷歌地图获取纬度/经度坐标

如何从谷歌地图的经纬度坐标中获取城市名称?

给定两个位置,如何从谷歌地图获取所有纬度和经度

从谷歌静态地图中的像素坐标获取经度/纬度