解码Google Maps嵌入式参数 [英] Decoding the Google Maps embedded parameters

查看:176
本文介绍了解码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!4v1476192292052width =100%height =350frameborder =0style =border :0allowfullscreen =>< / iframe>  

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

  https://www.google.com/地图/嵌入?PB =!1m18!1m12!1立方米!1d3128.340699934565!2D-0.46482818466529047!3d38.3642391796565!2立方米!1F0!2f0的!3f0!3平方米!1i1024!2i768!4f13.1!3立方米!1平方米!1s0xd62377123a70817%3A0x85e89b65fcf7c648 !2sCalle +克鲁兹+德+彼德拉%2C + 4%2C + 03015 +阿利坎特!5e0! 3m2!1ses!2ses!4v1476192292052 



网址设计



Google似乎在这里使用了专有的参数设计。此博客条目和<一个href =https://stackoverflow.com/a/34275131/7952162>这个Stackoverflow文章做了一个很好的总结如何理解这些参数。参数的结构类似于(![id] [type] [value] ),类型为:

<$ p $















$ b $:字符串
u:无符号整数

矩阵可以封装多个数据条目, 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

现在看起来很容易,我们看到坐标几乎清晰-文本。但作为博客条目指出,参数

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

不是精确位置的位置,而是显示的地图的中心。他们是相似的,但有时非常不同。在另一张地图上更改坐标和/或地址不会生成



只有当更改参数!1s0xd62377123a70817:0x85e89b65fcf7c648 时,地图显示将会中断,表示此参数解码位置



博客条目(从2016年8月起),地图链接的构建方式有所不同。还有另一个参数可以编码base64中的经度和纬度坐标:

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

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

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

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

那么,谁可以破解代码呢?任何帮助表示赞赏。

解决方案

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



无证方法。 (使用 tfid 而不是 placeid

放置API Web服务

未来无法保证:

  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请求设置API键



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,
类型:[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:\\\Calle Cruz de Piedra,4 \\\,\\\ \\\Alacant\\\,\\\Alicante\\ \\ u003c / span \\\>,\\\Spain\\\
formatted_address:Calle Cruz de Piedra,4 ,西班牙阿利坎特03015 Alacant,
几何:{
location:{
lat:38.3642358,
lng:-0.4626489

viewport:{
northeast:{
lat:38.3655847802915,
lng:-0.4612999197084979
},
西南部:{
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
范围: GOOGLE,
类型: STREET_ADDRESS],
URL: https://maps.google。 com /?q = Calle + Cruz + de + Piedra,+ 4,+ 03015 + Alacant,+ Alicante,+ Spain& ftid = 0xd62377123a70817:0x85e89b65fcf7c648,
utc_offset:60,
:Alacant
},
status:OK
}

设置API密钥



如果您的客户端应用程序没有使用OAuth 2.0,那么当它调用在Google云端平台项目中启用的API时,它必须包含API密钥。应用程序将此密钥作为key = API_key参数传递给所有API请求。
创建您的应用程序的API密钥:


  1. 转到 API控制台

  2. 从项目列表中选择一个项目或创建一个新项目。

  3. 如果API&服务页面尚未打开,请打开左侧
    菜单并选择 APIs&服务

  4. 在左侧选择凭证。
  5. 然后选择 API密钥。 请阅读此页面上的说明,请务必阅读安全使用API​​密钥的最佳做法






    (草稿)未删除历史记录

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

      curlhttps://www.google.com/maps/place/data=!4m2!3m1! 1s0xd62377123a70817:0x85e89b65fcf7c648-s -b -L ​​-Huser-agent:Googlebot / 2.1(+ http://www.google.com/bot.html)| FIND0xd62377123a70817:0x85e89b65fcf7c648,

    回答命令提示符:
    , [0xd62377123a70817:0x85e89b65fcf7c648,null,null,[null,null,38.364235799999996,-0.4626489]
    $ b

    CURL there if bibb $ b




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



    例如

    如果您需要地理坐标,请点击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参数是certa的唯一标识符在地图对象中,就像fid和cid一样。
    需要在地图上但不属于本地数据库一部分的位置由ftid参数标识。无法通过地点声明这些类型的地图对象。

    noreferrer> API Google Places 以及其他人使用 <$ c $ (Calle Cruz de Piedra,4 03015 Alicante) place-id

    id = ChIJFwinI3E3Yg0RSMb3_GWb6IU



    (place - > place-id)

    https://developers.google.com/maps / documentation / javascript / examples / places-placeid-finder

    和Reverse(place-id-> place)
    https://developers.google.com/maps/documentation/javascript/examples/geocoding-place-id


    现在:

    place-id 至位置 - 好的

    https://开发者。 google.com/maps/documentation/geocoding/intro?hl=zh_CN#ReverseGeocoding



    FTID 位置 - ?问题打开...为快速和自动



    谷歌方式:



    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



    和Google Maps Embed API的两个词:

     < iframe src =https://www.google.com/maps/embed?pb=!1m3!3m2!1m1 !1s0xd62377123a70817%3A0x85e89b65fcf7c648width =400height =400frameborder =0style =border:0allowfullscreen>< / iframe>   
    $ m 使用以下语法创建块:
    1数字 - ID或放置在当前块?
    2 Digital-value =新块的大小

    !< ID> m<值>

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

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

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

    我希望这有助于您!


    The context

    I would like to be able to extract the location of Google Maps embedded in a website (random example found at the bottom of this website).

    <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>

    So, basically I want to extract the pinpoint location from the Maps 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
    

    The URL design

    Google seems to use a proprietary parameter design here. This blog entry and this Stackoverflow post did a good job summarizing how these parameters can be understood. The parameters are structured like (![id][type][value]), with types:

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

    Matrices can encapsulate multiple data entries, e. g. !1m3!1i2!1i4!1i17 means that the matrix with the ID 1 contains the three integer values [2, 4, 17].

    With this knowledge, the parameters can be structured like this:

    !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
    

    Now it seems to be easy, we see coordinates almost in clear-text. But as the blog entry points out, the parameters

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

    are not the position of the pinpoint, but the center of the shown map. They are similar, but at times very different. Changing the coordinates and/or the address will not result in a different map.

    Only when changing the parameter !1s0xd62377123a70817:0x85e89b65fcf7c648, the map display will break, meaning this parameter decodes the location of the pinpoint.

    Just, in what encoding?

    The question

    In the blog entry (from August 2016), the Maps link is built up differently. There is another parameter which encodes the longitude and latitude coordinates in base64:

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

    In a similar manner, the coordinates of this new parameter should hopefully decode:

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

    It looks like hexadecimal encoding, but when converting to integer (964394229279688727:9649133063979386440), this does not correspond to geographic coordinates in a system I know.

    So, who can crack the code? Any help appreciated.

    解决方案

    This intermediate is not the final answer, and the sequel follows)), just some thoughts

    Undocumented method. (with tfid instead placeid)
    Places API Web Service
    No warranty in future:

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

    The documented request is:

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

    Need API KEY for this requests Setting up API keys

    Answer from Google: (JSON - light parsing)

    {
       "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"
    }
    


    Setting up API keys

    If your client application does not use OAuth 2.0, then it must include an API key when it calls an API that's enabled within a Google Cloud Platform project. The application passes this key into all API requests as a key=API_key parameter. To create your application's API key:

    1. Go to the API Console.
    2. From the projects list, select a project or create a new one.
    3. If the APIs & services page isn't already open, open the left side menu and select APIs & services.
    4. On the left, choose Credentials.
    5. Click Create credentials and then select API key.

    Note: In addition to reading the instructions on this page, be sure to read Best practices for securely using API keys.


    (draft) not deleted for history

    for test only! temporary solution:

    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"","
    

    Answer in command prompt: ,["0xd62377123a70817:0x85e89b65fcf7c648",null,null,[null,null,38.364235799999996,-0.4626489]

    CURL there if needed

    search to be continued....


    I think, this (0xd62377123a70817:0x85e89b65fcf7c648) is ID of map object in GoogleMap database. When click URL1.

    For Example

    if you want geographic coordinates then click URL2 please and next if need create link as EMBED no problem, result below:

    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" 
    

    it is FTID (0xd62377123a70817:0x85e89b65fcf7c648)
    The ftid parameter is a unique identifier for certain map objects, just as fid and cid are. Locations that need to be on the map but are not part of the Local database are identified by the ftid parameter. It is not possible to claim these type of Maps objects through Places.

    API Google Places and others work with place-id

    for (Calle Cruz de Piedra, 4 03015 Alicante) place-id = ChIJFwinI3E3Yg0RSMb3_GWb6IU

    (place -> place-id)
    https://developers.google.com/maps/documentation/javascript/examples/places-placeid-finder
    and Reverse (place-id->place) 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

    FTID to location -? question open... for fast and automatic

    way over Google:

    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

    for Atlantic Ocean work too:
    https://google.com/maps?ftid=0xadd28c30ec90d79%3A0x44652457c0696504

    and two words about Google Maps Embed 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 create Block with this syntax: 1 Digital - ID or place in current block? 2 Digital - value = size of new block

    !<ID>m<value>

    !1m3
    !3m2
    !1m1
    !1s0xd62377123a70817%3A0x85e89b65fcf7c648
    
    {}
    {,,{}}
    {,,{{}}}
    {,,{{1s}}}
    
    !1:{}
    !1:{!3:{}}
    !1:{!3:{!1:{}}}
    !1:{!3:{!1:{1s}}}
    

    I hope this helps!

    这篇关于解码Google Maps嵌入式参数的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

    查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆