当使用Android谷歌地图应用程序共享按钮获取某个位置时,它只会将一个网址作为意图返回给其他类似的应用程序:
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语言,但其他人也可以提供帮助。 我需要一个像这样的功能:(这不起作用):
function hextolatlon($hex){ // Assume hex is a value like 0x1446041F or 0x447D1100 // Convert to a signed integer $h=$hex&0xFF; $h=($h>8)&0xFF); $h=($h>16)&0xFF); $h=($h>24)&0xFF); $negative=($h>>31)!=0; // Get the sign if($negative){ $h=~$h; $h=$h&0x7FFFFFFF; $h++; } // Convert to degrees and minutes $degrees=floor($h/10000000); $minutes=$h%10000000; // Convert to full degrees $degrees+=($minutes/100000.0) / 60.0; if($negative)$degrees=-$degrees; return $degrees; }
将0x3f8dfd04d309f925转换为类似35.74388的内容。 非常感谢
答案 0 :(得分:4)
我认为,最好是迟到的答复。
您尝试解密的FTID参数不一定(必须)存储纬度和经度。如果它引用地图位置(例如咖啡馆,时装店),则冒号后面的参数的第二部分引用客户ID。
为了给出一个真实的例子,参数:
!1s0x6ad63fbf56e24c27:0xe665b3308d32f379
可以像这样理解
0xe665b3308d32f379 ---hex-to-dec---> 16601872622479930233
和https://google.com/maps?cid=16601872622479930233将指向标记的位置。
如何从中提取坐标?如果您只有一些样品,可以手动完成。点击上面的链接,1-2秒后,Google地图会刷新浏览器中的网址。它现在包含!3d
和!4d
参数中地点的确切坐标。
如果您有许多样本和/或想要自动化该过程,则必须使用Google Maps API(请查看此link)。
我还没想到的是 1)第一个参数保存的信息和 2)如果FTID参数导致地址或地理位置,如何理解它。
另请查看我的问题here以获取更多详情。
答案 1 :(得分:0)
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]];
}