从Google Maps API提取数据限制

时间:2019-06-26 15:42:07

标签: javascript google-maps

我正在尝试使用Google Maps JavaScript API在纽约市提取商店数据。 但是当我尝试提取数据时出现了问题。

对我来说,当我尝试从中提取google-maps api时,似乎存在某种限制。

这是我尝试过的: 我将中心坐标放在“时间广场”上,并提取半径为100m的存储数据,并且能够提取60。在切换为200m半径后,它将追加到110(无重复)。当我在200m上运行相同的代码时,它停止追加,我以为110就是我所能得到的。

但是问题从这里开始: 因此,我尝试了1km的半径,但结果显示168,远远少于我的预期。在清除目录中的数据并尝试使用相同的坐标和200m半径后,它显示回60,该数字与100m相同。不管半径多长,它总是在开始时提取60个数据。

运行代码时,除了半径范围外,什么都没有改变,但是显然显示出一些限制。

我的信用使用情况远远没有超出限制,并且我没有发送太多查询(到目前为止是10到20次),但是我不知道为什么Google Maps会显示出令人失望的结果。

试图寻找其他链接和资源以寻求帮助,但找不到我遇到的任何类似问题。

const googlemaps = require("@google/maps");

const fs = require("fs"); //file system
const client = googlemaps.createClient({
  key: "My own key"
});

const PATH_OUTPUT_FILE = "data/NearbyBMCC.json";
const COORD1 = "40.758896, -73.985130";
const TIMEOUT_GOOGLE_PING_DEBOUNCE = 2e3;

const { argv } = process;
const args = [...argv.slice(2)];
const coord = args[0] || COORD1;
const queryOptions = {
  location: COORD1,
  radius: 500
};


client.placesNearby(
  queryOptions,

  async (err, res) => {
    if (err) {
      return console.error(err);
    }

    //  const writeJsonFile = require("write-json-file");
    let existingResults = [];
    try {
      existingResults = JSON.parse(fs.readFileSync(PATH_OUTPUT_FILE));
      console.log("found", existingResults.length, "exisiting results");
    } catch (err2) {
      console.error("output file does not exist");
    }

    let { results: newResults = [] } = res.json;

    const { json } = res;
    let { next_page_token } = json;
    let currentPage = 0;
    const maxIterations = 10;

    while (
      typeof next_page_token === "string" &&
      currentPage <= maxIterations
    ) {
      console.log("Page", currentPage);

      delete queryOptions.location;
      delete queryOptions.radius;

      queryOptions.pagetoken = next_page_token;

      await new Promise(resolve =>
        setTimeout(resolve, TIMEOUT_GOOGLE_PING_DEBOUNCE)
      );

      await new Promise(resolve =>
        client.placesNearby(queryOptions, (err, res) => {
          if (err) {
            return console.error(err);
          }

          newResults = newResults.concat(res.json.results);
          next_page_token = res.json.next_page_token;

          resolve();
        })
      );

      currentPage++;
    }

    // Disallow new entries that are matches with old entries
    newResults = newResults.filter(newResult => {
      const existingIds = existingResults.map(r => r.id);
      return !existingIds.includes(newResult.id);
    });

    if (newResults.length) {
      const finalResults = existingResults.concat(newResults);

      fs.writeFile(
        PATH_OUTPUT_FILE,
        JSON.stringify(finalResults, null, 2),
        err => {
          console.log(
            "Updated output file.",
            finalResults.length,
            "entries captured."
          );
        }
      );
    } else {
      console.warn("No new results!");
    }
  }
);

0 个答案:

没有答案