我正在尝试使用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!");
}
}
);