从谷歌地图 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) 获取纬度/经度的主要内容,如果未能解决你的问题,请参考以下文章