Ingress intel api分析之二

概述

https://www.ingress.com/r/getEntities
這個接口主要作用是獲取地圖上的po,link,field。

參數

post 參數:

{
  "tileKeys": [
    "13_13070_6970_2_8_100",
    "13_13069_6970_2_8_100",
    "13_13070_6969_2_8_100",
    "13_13069_6969_2_8_100"
  ],
  "v": "a9913f22cd769d29601185abbd32fd48cb42df08"
}
  • tileKeys 是地圖塊信息的一個數組。
  • 數組裏是形如zoom_x_y_minlvl_maxlvl_maxhealth 格式的數據。zoom是放大級別。xy是該級別下的區域編號。後面的是關於po等級的篩選(未驗證)。最後一項含義不明。
  • v 依舊是鑑權之用。

關於放大級別和區域編號,參考 tilenames
區域編號與經度緯度放大級別的換算代碼如下。
直接摘錄了iitc插件的js代碼,項目地址: iitc

window.lngToTile = function(lng, params) {
  return Math.floor((lng + 180) / 360 * params.tilesPerEdge);
}

window.latToTile = function(lat, params) {
  return Math.floor((1 - Math.log(Math.tan(lat * Math.PI / 180) +
    1 / Math.cos(lat * Math.PI / 180)) / Math.PI) / 2 * params.tilesPerEdge);
}

window.tileToLng = function(x, params) {
  return x / params.tilesPerEdge * 360 - 180;
}

window.tileToLat = function(y, params) {
  var n = Math.PI - 2 * Math.PI * y / params.tilesPerEdge;
  return 180 / Math.PI * Math.atan(0.5 * (Math.exp(n) - Math.exp(-n)));
}

其中titlesPerEdge 由下面的數據決定。

var DEFAULT_ZOOM_TO_TILES_PER_EDGE = [1,1,1,40,40,80,80,320,1000,2000,2000,4000,8000,16000,16000,32000];
 tilesPerEdge = window.TILE_PARAMS.TILES_PER_EDGE[zoom]

返回結果

{
  "result": {
    "map": {
      "15_26140_13939_1_8_100": {
        "gameEntities": [
          [
            "6787b4be70534d2d86c8d607eedfd459.9",
            1435233142525,
            [
              "e",
              "R",
              "e8ff994832ee4e39939352aa82b6c8c0.16",
              22619694,
              114055467,
              "895b4d90d3044fef8d6afc803ecc341f.16",
              22611713,
              114055330
            ]
          ],
          [
            "3186e208ff4144408cf7586ce46e6279.b",
            1435406658874,
            [
              "r",
              "E",
              [
                [
                  "9e6810a83dcb402cacfb43b6d042211b.16",
                  22645538,
                  113916040
                ],
                [
                  "d3764f1abbdb43d6b4cfd8976561b7b5.16",
                  22621752,
                  113814413
                ],
                [
                  "fdcbde53b46648cc859991270a023a9e.16",
                  22643075,
                  113917466
                ]
              ]
            ]
          ],
          [
            "e361838fea5341b6b67c8e5b1b6399df.16",
            1435006502060,
            [
              "p",
              "N",
              22572673,
              114085747,
              1,
              0,
              0,
              "http://lh5.ggpht.com/QCxfmFYdqCqhtPbINRsrL-GhXf4Z3r6b1_CCWd3Te0NoHsh5jv3kwv42cDkMT4TRVR8qv4nEdUETxieiME7Y5w",
              "龍川車田豆腐坊",
              [],
              false,
              false,
              null,
              1435006502060
            ]
          ]
        ]
      }
    }
  }
}         
  • 數據中只顯示了三種數據類型。er , p 分別代表link,field,portal。
  • zoom_x_y_minlvl_maxlvl_maxhealth 格式對應上面的請求。(示例數據未與上面的請求數據對應)
  • 32+長的字符串可能起到的是uuid的作用,來標識link,portal,field。
  • ER代表綠軍和藍軍。
  • link類型中帶有兩個portal點信息,經度,緯度,portal的uuid。
  • field類型中帶有三個portal點信息,經度,緯度,portal的uuid。
  • portal類型中除了經度,緯度,uuid,還有名稱,圖片位置,等級,能量,時間等信息。

想法

由於官方的intel的訪問速度有限,每次頁面都是全量的獲取數據,並沒有緩存。體驗上就是響應速度慢,點一個地圖要等很久。
因爲portal的變化是很少的,短期可以認爲不變。如果把這些portal的數據獲取下來之後緩存,可以改善體驗。
再結合log數據,進行增量的修改。
再則把這個數據獲取下來之後,可以進行二次加工,比如連多重,規劃大cf。
目前這個格式的數據轉化爲kml文件的代碼已經完成。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章