从Google Maps网址ftid(十六进制)获取纬度/经度

moh*_*ani 1 php android hex location google-maps

当使用android Google Maps App共享按钮作为位置时,它只是向其他类似这样的应用程序返回一个URL:

https:// o gl /地图/ tkNXzF2krmR2

这是一个Google短网址,可以转换为长网址(使用goole短网址api),如下所示:

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

显然,此url没有纯的纬度和经度值。但似乎值在url中的ftid参数后面。用“:”字符分隔。

请帮助我从这种十六进制格式提取纬度和经度值

我正在使用PHP语言,但其他人也可以提供帮助。我需要这样的功能:(这不起作用):

    函数hextolatlon($ hex){
            //假设十六进制为0x1446041F或0x447D1100之类的值
            //转换为有符号整数
            $ h = $ hex&0xFF;
            $ h =($ h> 8)&0xFF);
            $ h =($ h> 16)&0xFF);
            $ h =($ h> 24)&0xFF);
            $ negative =($ h >> 31)!= 0; //获得标志
            if($ negative){
                $ h =〜$ h;
                $ h = $ h&0x7FFFFFFF;
                $ h ++;
            }
            //转换为度和分钟
            $ degrees = floor($ h / 10000000);
            $ minutes = $ h%10000000;
            //转换为全学位
            $ degrees + =($ minutes / 100000.0)/ 60.0;
            if($ negative)$ degrees =-$ degrees;
            返回$ degrees;
        }

将0x3f8dfd04d309f925转换为类似35.74388的格式。非常感谢

Man*_* CJ 5

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

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

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

!1s0x6ad63fbf56e24c27:0xe665b3308d32f379
Run Code Online (Sandbox Code Playgroud)

可以这样理解

0xe665b3308d32f379  ---hex-to-dec--->  16601872622479930233
Run Code Online (Sandbox Code Playgroud)

并且https://google.com/maps?cid=16601872622479930233将带到标记的地方。

如何从中提取坐标?如果您只有几个样本,则可以手动完成。单击上面的链接,然后在1-2秒后,Google Maps将刷新浏览器中的URL。现在,它在!3dand !4d参数中包含该地点的确切坐标。

如果您有很多示例和/或想要使过程自动化,则必须使用Google Maps API(例如,检查此链接)。

我仍然没有弄清楚的是:1)第一个参数保存哪些信息,以及2)如果FTID参数指向地址或地理位置,则如何理解。

还要检查我的问题在这里发布的更多详细信息。