解码 Google 地图嵌入参数

2024-01-02

上下文

我希望能够提取嵌入在网站中的 Google 地图的位置(随机示例位于这个网站 http://identalinstalaciones.com/idental-alicante.php).

<iframe src="https://www.google.com/maps/embed?pb=!1m18!1m12!1m3!1d3128.340699934565!2d-0.46482818466529047!3d38.3642391796565!2m3!1f0!2f0!3f0!3m2!1i1024!2i768!4f13.1!3m3!1m2!1s0xd62377123a70817%3A0x85e89b65fcf7c648!2sCalle+Cruz+de+Piedra%2C+4%2C+03015+Alicante!5e0!3m2!1ses!2ses!4v1476192292052" width="100%" height="350" frameborder="0" style="border:0" allowfullscreen=""></iframe>

所以,基本上我想从地图 URL 中提取精确位置:

https://www.google.com/maps/embed?pb=!1m18!1m12!1m3!1d3128.340699934565!2d-0.46482818466529047!3d38.3642391796565!2m3!1f0!2f0!3f0!3m2!1i1024!2i768!4f13.1!3m3!1m2!1s0xd62377123a70817%3A0x85e89b65fcf7c648!2sCalle+Cruz+de+Piedra%2C+4%2C+03015+Alicante!5e0!3m2!1ses!2ses!4v1476192292052

网址设计

谷歌似乎在这里使用了专有的参数设计。这博客条目 http://blog.themillhousegroup.com/2016/08/deep-diving-into-google-pb-embedded-map.html and 这个 Stackoverflow 帖子 https://stackoverflow.com/a/34275131/7952162很好地总结了如何理解这些参数。参数的结构如下(![id][type][value]),类型为:

m: matrix
f: float
d: double
i: integer
b: boolean
e: enum (as integer)
s: string
u: unsigned int

矩阵可以封装多个数据条目,例如G。!1m3!1i2!1i4!1i17表示 ID 为 1 的矩阵包含三个整数值[2, 4, 17].

有了这些知识,参数就可以构造如下:

!1m18
  !1m12
    !1m3
      !1d3128.340699934565
      !2d-0.46482818466529047
      !3d38.3642391796565
    !2m3
      !1f0
      !2f0
      !3f0
    !3m2
      !1i1024
      !2i768
      !4f13.1
  !3m3
    !1m2
      !1s0xd62377123a70817:0x85e89b65fcf7c648
      !2sCalle Cruz de Piedra, 4, 03015 Alicante
  !5e0
!3m2
  !1ses
  !2ses
!4v1476192292052

现在看起来很简单,我们几乎可以看到明文的坐标。但作为博客条目 http://blog.themillhousegroup.com/2016/08/deep-diving-into-google-pb-embedded-map.html指出,参数

!1d3128.340699934565
!2d-0.46482818466529047
!3d38.3642391796565

are not精确点的位置,而是所显示地图的中心。它们很相似,但有时又非常不同。更改坐标和/或地址不会有结果在不同的地图上。

仅当更改参数时!1s0xd62377123a70817:0x85e89b65fcf7c648,地图显示将中断,这意味着此参数对精确点的位置进行解码。

只是,用什么编码?

问题

In 博客条目 http://blog.themillhousegroup.com/2016/08/deep-diving-into-google-pb-embedded-map.html(自 2016 年 8 月起),地图链接的构建方式有所不同。还有另一个参数将经度和纬度坐标编码为base64:

zMzfCsDQ3JzM0LjUiUyAxNDXCsDAwJzU2LjYiRQ ----base64---> 37°47'34.5"S 145°00'56.6"E

以类似的方式,这个新参数的坐标应该有望解码:

0xd62377123a70817:0x85e89b65fcf7c648 ----????----> 38.364236,-0.462649

看起来像十六进制编码,但是转换为整数时(964394229279688727:9649133063979386440),这与我所知道的系统中的地理坐标不对应。

那么,谁能破解密码呢?任何帮助表示赞赏。


这个中间不是最终答案,续集如下)),只是一些想法

未记录的方法。 (和ftid代替place_id范围)
地点 API 网络服务 https://developers.google.com/places/web-service/details
未来无保修:

https://maps.googleapis.com/maps/api/place/details/json?key=YOUR_API_KEY&ftid=0xd62377123a70817:0x85e89b65fcf7c648&

记录的请求是:

https://maps.googleapis.com/maps/api/place/details/json?key=YOUR_API_KEY&placeid=ChIJFwinI3E3Yg0RSMb3_GWb6IU

此请求需要 API KEY设置 API 密钥 https://support.google.com/googleapi/answer/6158862

Google 的回答:(JSON - 轻解析)

{
  "html_attributions": [],
  "result": {
    "address_components": [
      {
        "long_name": "4",
        "short_name": "4",
        "types": ["street_number"]
      },
      {
        "long_name": "Calle Cruz de Piedra",
        "short_name": "Calle Cruz de Piedra",
        "types": ["route"]
      },
      {
        "long_name": "Alacant",
        "short_name": "Alacant",
        "types": ["locality", "political"]
      },
      {
        "long_name": "Alicante",
        "short_name": "A",
        "types": ["administrative_area_level_2", "political"]
      },
      {
        "long_name": "Comunidad Valenciana",
        "short_name": "Comunidad Valenciana",
        "types": ["administrative_area_level_1", "political"]
      },
      {
        "long_name": "Spain",
        "short_name": "ES",
        "types": ["country", "political"]
      },
      {
        "long_name": "03015",
        "short_name": "03015",
        "types": ["postal_code"]
      }
    ],
    "adr_address": "\u003cspan class=\"street-address\"\u003eCalle Cruz de Piedra, 4\u003c/span\u003e, \u003cspan class=\"postal-code\"\u003e03015\u003c/span\u003e \u003cspan class=\"locality\"\u003eAlacant\u003c/span\u003e, \u003cspan class=\"region\"\u003eAlicante\u003c/span\u003e, \u003cspan class=\"country-name\"\u003eSpain\u003c/span\u003e",
    "formatted_address": "Calle Cruz de Piedra, 4, 03015 Alacant, Alicante, Spain",
    "geometry": {
      "location": {
        "lat": 38.3642358,
        "lng": -0.4626489
      },
      "viewport": {
        "northeast": {
          "lat": 38.3655847802915,
          "lng": -0.4612999197084979
        },
        "southwest": {
          "lat": 38.3628868197085,
          "lng": -0.463997880291502
        }
      }
    },
    "icon": "https://maps.gstatic.com/mapfiles/place_api/icons/geocode-71.png",
    "id": "ce1aa5a252b86d559268866a6a4858db9bba3dff",
    "name": "Calle Cruz de Piedra, 4",
    "place_id": "ChIJFwinI3E3Yg0RSMb3_GWb6IU",
    "reference": "CmRbAAAAn6NLYXEs-ttLvUlgjnh5aDHt-LR_hXe6JmUN8fzv6MJ7Q50xt_zUU_WlTc3aL_BQc70-1YjEb6Soluro5rA8cIFJG_w08RSr_JWo_SFEFc1Ncme_dKVKsPX6Q0LtO8gWEhACTzabAMLQfM5xt1_BNsywGhSZr0WRGlutqeuRgs-IY41ndk3yoQ",
    "scope": "GOOGLE",
    "types": ["street_address"],
    "url": "https://maps.google.com/?q=Calle+Cruz+de+Piedra,+4,+03015+Alacant,+Alicante,+Spain&ftid=0xd62377123a70817:0x85e89b65fcf7c648",
    "utc_offset": 60,
    "vicinity": "Alacant"
  },
  "status": "OK"
}

设置 API 密钥

如果您的客户端应用程序不使用 OAuth 2.0,则在调用 Google Cloud Platform 项目中启用的 API 时,它必须包含 API 密钥。应用程序将此密钥作为 key=API_key 参数传递到所有 API 请求中。 要创建应用程序的 API 密钥:

  1. 前往API控制台 https://console.developers.google.com.
  2. 从项目列表中,选择一个项目或创建一个新项目。
  3. 如果 API 和服务页面尚未打开,请打开左侧 菜单并选择API 和服务.
  4. 在左边,选择证书。
  5. Click 创建凭据然后选择API key.

Note:除了阅读本页上的说明外,请务必阅读安全使用 API 密钥的最佳实践 https://support.google.com/googleapi/answer/6310037.


(draft)未删除历史记录

仅供测试!临时解决方案:

curl "https://www.google.com/maps/place/data=!4m2!3m1!1s0xd62377123a70817:0x85e89b65fcf7c648" -s -b -L -H "user-agent: Googlebot/2.1 (+http://www.google.com/bot.html)" | FIND """0xd62377123a70817:0x85e89b65fcf7c648"","

在命令提示符下回答: ,["0xd62377123a70817:0x85e89b65fcf7c648",null,null,[null,null,38.364235799999996,-0.4626489]

在那里卷曲 https://curl.haxx.se/如果需要的话

搜索待继续....


我认为,这个(0xd62377123a70817:0x85e89b65fcf7c648)是GoogleMap数据库中地图对象的ID。当点击URL1时。

例如 https://i.stack.imgur.com/0Xd8Z.png

如果您想要地理坐标,请单击 URL2,然后如果需要创建链接作为 EMBED 没问题,结果如下:

src="https://www.google.com/maps/embed?pb=
!1m18
    !1m12
        !1m3
            !1d782.0856626047412
            !2d-0.46311117079625247
            !3d38.36419405026406
        !2m3
            !1f0
            !2f0
        !3f0
        !3m2
            !1i1024
            !2i768
        !4f13.1
    !3m3
        !1m2
            !1s0x0%3A0x0
            !2zMzjCsDIxJzUxLjEiTiAwwrAyNyc0NS4yIlc
    !5e0
!3m2
   !1ses
   !2ses
!4v1509474812934" 

它是 FTID (0xd62377123a70817:0x85e89b65fcf7c648)
ftid 参数是某些地图对象的唯一标识符,就像 fid 和 cid 一样。
需要在地图上但不属于本地数据库的位置由 ftid 参数标识。无法通过 Places 声明这些类型的 Maps 对象。

API 谷歌地方信息 https://developers.google.com/places和其他人一起工作place-id https://developers.google.com/places/web-service/place-id

(Calle Cruz de Piedra, 4 03015 阿利坎特)place-id = ChIJFwinI3E3Yg0RSMb3_GWb6IU

(地点 -> 地点 ID)
https://developers.google.com/maps/documentation/javascript/examples/places-placeid-finder https://developers.google.com/maps/documentation/javascript/examples/places-placeid-finder
和反向(地点 ID-> 地点)
https://developers.google.com/maps/documentation/javascript/examples/geocoding-place-id https://developers.google.com/maps/documentation/javascript/examples/geocoding-place-id

NOW:

place-id to location - ok
https://developers.google.com/maps/documentation/geocoding/intro?hl=en#ReverseGeocoding https://developers.google.com/maps/documentation/geocoding/intro?hl=en#ReverseGeocoding

FTID to location-?问题开放......快速和自动

超越谷歌:

https://google.com/maps?ftid=0xd62377123a70817:0x85e89b65fcf7c648 https://google.com/maps?ftid=0xd62377123a70817:0x85e89b65fcf7c648

https://www.google.com/maps/place/Calle+Cruz+de+Piedra,+4,+03015+Alicante,+%D0%98%D1%81%D0%BF%D0%B0%D0%BD%D0%B8%D1%8F/@38.3642358,-0.4648376,17z/data=!3m1!4b1!4m5!3m4!1s0xd62377123a70817:0x85e89b65fcf7c648!8m2!3d38.3642358!4d-0.4626489

也适用于大西洋工作:
https://google.com/maps?ftid=0xadd28c30ec90d79%3A0x44652457c0696504 https://google.com/maps?ftid=0xadd28c30ec90d79%3A0x44652457c0696504

关于 Google 地图嵌入 API 的两句话:

<iframe 
src="https://www.google.com/maps/embed?pb=
!1m3
!3m2
!1m1
!1s0xd62377123a70817%3A0x85e89b65fcf7c648"
width="400" height="400" frameborder="0" style="border:0" allowfullscreen>
</iframe>

m使用以下语法创建块: 1 数字 - ID 或当前块中的位置? 2 数字-值=新块的大小

!<ID>m<value>

!1m3
!3m2
!1m1
!1s0xd62377123a70817%3A0x85e89b65fcf7c648

{}
{,,{}}
{,,{{}}}
{,,{{1s}}}

!1:{}
!1:{!3:{}}
!1:{!3:{!1:{}}}
!1:{!3:{!1:{1s}}}

我希望这有帮助!

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

解码 Google 地图嵌入参数 的相关文章

  • 嵌入式 Youtube:如何在 iOS 7 ipad 上获得高品质

    我在网页上嵌入了 YouTube 视频 在桌面上它运行良好 然而 在 ipad 运行 iOS7 上 视频质量相当差 可能是 480p 在 iframe 中 它看起来不错 但是当您将视频全屏显示时 它就非常明显了 我尝试过使用hd 1 vq
  • 从 google 地图 api v3 获取英文地址

    我使用谷歌地图 API v3 来获取某个点的坐标和地址 但谷歌返回法语地址 这是我用来获取地址的脚本 如何强制谷歌地图以英语返回结果 var map var geocoder var mapOptions center new google
  • 使用 iframe 是不好的做法吗? iframe 可以像 canvas 一样转换为图像吗?

    我在互联网上看到很多关于不使用框架的抱怨 并且使用框架被认为是不好的做法 而且它们已经过时了 然而 iframe 并没有过时 但它们是框架 使用它们是否被认为是不好的做法 另外 iframe 是否可以像画布一样渲染为 data png ba
  • 将 div 扩展到 iFrame 范围之外?

    是否可以将内容扩展到 iframe 之外 就我而言 我以前渲染的是原生
  • 没有类型属性的 Google Places API INVALID_REQUEST

    至少这一点应该很容易让你验证 该请求返回一个INVALID REQUEST 但这是有效的 完全相同 但有一个types范围 在文档中 它说类型不是必需的参数 那么这是 API 中的错误吗 这不是一个错误 而是一种预期的行为 我相信这是不一致
  • 从自定义标记获取附近的地点

    我有一个标记列表 并且想使用我的标记列表获取附近的地点 我试过检查一下here https stackoverflow com questions 32284708 how to constantly detect nearby marke
  • 以编程方式访问使用数据 URI 作为源的 iframe

    我正在使用 数据 URI 以编程方式创建一个 iframe 该框架加载良好 但似乎以编程方式使用 iframe 会遇到跨域安全检查 var iframeDoc document getElementById myFrame contentW
  • 谷歌地图 API 的替代品 [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 Locked 这个问题及其答案是locked help locked posts因为这个问题是题外话 但却具有历史意义 目前不接受新的答案
  • 通过单击链接更改 iframe src

    我有一个iframe看起来像这样 我想创建一个链接 以便当我单击它时 页面上的 iframe 会发生变化 我怎样才能使用 jQuery 做到这一点 和jquery有关系吗attr 你不需要 jQuery 您甚至不需要 JavaScript
  • 在 R 中创建缓冲区和计数点

    I asked 这个问题 https stackoverflow com questions 42498344 create buffer around spatial point data in r and count how many
  • 在 Google Chrome 扩展程序中播放盈利的 YouTube 歌曲。我有什么选择吗?

    我在开发 Google Chrome 扩展程序时遇到了巨大的障碍 任何盈利的 YouTube 歌曲 例如带有广告 都不会播放 此处记录了这一点 https developers google com youtube flash api re
  • 内容脚本和 web_accessible_resources iframe 之间的通信

    我有一个将 iframe 注入网页的内容脚本 内容 js var iframe document createElement iframe iframe id frame iframe style cssText position fixe
  • 如何将iframe内容复制到div?

    请参阅下面的代码片段 我希望 iframe 中的输出文本显示在 source div 中 我正在为此苦苦挣扎 并且很感激任何想法 如何将 iframe 中的输出文本复制到 div 中 如果 div sourcediv 包含 文本 则脚本在
  • 如何在android中的地图上显示当前位置标记?

    我正在开发一个应用程序 我想在地图中使用标记显示当前位置 我正在使用谷歌地图 v2 在这里 当 GPS 关闭时 我可以显示地图和标记 但当 GPS 打开时 地图上看不到任何标记 我的要求是在地图上显示当前位置的标记 我尝试这样 Overri
  • 如何静音 iframe 内容?

    我有一个第 3 方 iframe包含来自 youtube vimeo 的视频 有没有通用的方法来静音 iframe 内容独立地从视频 音频source Step 1 首先您需要访问 iframe var iframe document ge
  • angular2-google-maps 自动完成功能不起作用

    我正在尝试使用 angular2 google maps 将自动完成功能添加到我的项目中 我在 AppModule 中添加 AgmCoreModule forRoot 带有库 places 然后在组件中添加自动完成代码 我仍然收到 无法读取
  • 默认情况下嵌入带字幕的 Youtube 不起作用

    我正在尝试嵌入 Youtube 电影 并希望默认情况下打开字幕 From https developers google com youtube player parameters cc load policy https develope
  • SQlite 获取最近的位置(带有纬度和经度)

    我的 SQLite 数据库中存储有纬度和经度的数据 我想获取距我输入的参数最近的位置 例如我当前的位置 纬度 经度等 我知道这在 MySQL 中是可能的 并且我已经做了相当多的研究 SQLite 需要一个自定义外部函数来实现半正弦公式 计算
  • 点击加载谷歌地图

    我想在单击链接后显示 Google 地图 我已经尝试过以下方法 当点击链接时 然后 Insert div与 id 链接后map 使用 jQuery 方法 getScript 加载 Google Maps API 添加谷歌地图到div带身份证
  • Google 地图 API 标记图标 URL?

    我正在尝试将标记图标更改为 红圈 或 红针 或其他任何内容 在这些代码中 markerOptions icon images beachflag png 标记不显示 但如果我做icon一行注释行 因此标记显示为 red pin icon 所

随机推荐