从谷歌地图获取lat / lon url ftid(hex)

时间:2017-06-30 10:08:50

标签: php android google-maps location hex

当使用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的内容。 非常感谢

2 个答案:

答案 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]];
}