小编Man*_* CJ的帖子

解码Google Maps嵌入参数

上下文

我希望能够提取嵌入在网站中的Google地图的位置(本网站底部的随机示例).

<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>
Run Code Online (Sandbox Code Playgroud)

所以,基本上我想从地图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
Run Code Online (Sandbox Code Playgroud)

网址设计

谷歌似乎在这里使用专有的参数设计.此博客文章此Stackoverflow文章总结了如何理解这些参数.参数的结构类似于(![id][type][value]),类型如下:

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

矩阵可以封装多个数据条目,例如,!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
Run Code Online (Sandbox Code Playgroud)

现在看起来很简单,我们几乎以明文形式看到坐标.但正如博客文章指出的那样,参数 …

iframe google-maps geolocation geospatial google-maps-api-3

18
推荐指数
3
解决办法
4279
查看次数