从谷歌地图获取纬度/经度 url ftid(十六进制)

问题描述 投票:0回答:3

当使用 Android 谷歌地图应用程序分享位置按钮时,它只是返回一个 url 作为其他应用程序的意图,如下所示:

https://goo. gl / 地图/tkNXzF2krmR2

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

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

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

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

我正在使用 PHP 语言,但其他语言也可以提供帮助。 我需要一个像这样的函数:(这不起作用):


    函数 hextolatlon($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;
            if($负)$度=-$度;
            返回$度数;
        }

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

php android google-maps location hex
3个回答
15
投票

我认为晚回复总比没有好。

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

举一个现实世界的例子,参数:

!1s0x6ad63fbf56e24c27:0xe665b3308d32f379

可以这么理解

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

https://google.com/maps?cid=16601872622479930233 将通往标记的地点。

如何从中提取坐标?如果你只有几个样品,你可以手工完成。点击上面的链接,1-2秒后,谷歌地图将刷新浏览器中的URL。它现在包含

!3d
!4d
参数中该地点的准确坐标。

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

我还没弄清楚的是 1)第一个参数保存什么信息以及 2) 如何理解 FTID 参数(如果它指向地址或地理位置)。

另请查看我在此处发布的问题以了解更多详细信息。


1
投票
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]];
}

0
投票

让我用一种自动化方法来扩展 Manu CJ 的精彩答案。不幸的是,我只能分享一个基于Python的解决方案,但我相信它可能仍然有帮助。

完成从十六进制中提取十进制值后,您可以继续执行以下操作:

def get_coordinates_from_place_id(place_id, api_key):
"""
Convert a Google Places ID to coordinates using the Places Details API.

Args:
    place_id (str): The Google Places ID.
    api_key (str): Your Google API key.

Returns:
    dict: A dictionary containing latitude and longitude, or None if failed.
"""
try:
    # API endpoint for Places Details
    url = "https://maps.googleapis.com/maps/api/place/details/json"
    params = {"cid": place_id, "key": api_key}

    # Make the API request
    response = requests.get(url, params=params)
    response_data = response.json()

    # Check the response status
    if response_data["status"] == "OK":
        # Extract geometry location
        location = response_data["result"]["geometry"]["location"]
        return {"latitude": location["lat"], "longitude": location["lng"]}
    else:
        raise ValueError(f"Places API Error: {response_data['status']}")

except Exception as e:
    logger.error(f"Error resolving coordinates from Place ID: {e}")
    return None
© www.soinside.com 2019 - 2024. All rights reserved.