我有很多轨迹数据。 50万。我尝试获取这些坐标的地址。我在linux下使用bash命令。
#!/bin/bash
filename="$1"
while read -r line
do
uid=$(echo $line | cut -f1 -d,)
lat=$(echo $line | cut -f2 -d,)
long=$(echo $line | cut -f3 -d,)
timestamp=$(echo $line | cut -f4 -d,)
printf "$uid,$lat,$long,$timestamp|"
wget -O- -q "http://maps.google.com/maps/api/geocode/xml?latlng=$lat,$long&sensor=false"|\
grep formatted_address|\
head -n1|\
cut -d\> -f2|\
cut -d\< -f1
done < "$filename"
我只能得到2500个地址。 2500 坐标后,此命令“wget”不起作用。当我重置调制解调器时,我可以获得 2500 个以上的地址。有什么办法可以从坐标中获取地址吗?或者在获得 2500 地址后是否可以在 bash 命令中重置 IP?谢谢。
我的输入文件包含 500k 数据,就像
11395,39.9050283,32.6977617,2008-11-03T16:58:05Z
我的坐标39.9050283,32.6977617
我的输出文件将是这样的11395,39.9050283,32.6977617,2008-11-03T16:58:05Z|11395,39.9051033,32.6984550,2008-11-03T16:58:06Z|Erler, Eskişehir Yolu No:120, 06790 Etimesgut/Ankara, Turkey
答案1
发生的情况是 Google 正在限制您的 API 请求。他们让您通过免费服务获得的数据量是有限的。显然,在 2500 个请求之后,他们就切断了你的联系。当您“重置调制解调器”时,您显然会从 ISP 获得不同的 IP 地址,因此您可以在被阻止之前再发出 2500 个请求。
你需要重新考虑你的策略。对于 500k 请求,您可能需要为服务付费,或者从不同来源(例如 OpenStreetMap)获取数据。如果您从 OpenStreetMap 获取数据,请考虑虽然它是免费的,但他们仍然不会欣赏您在短时间内发出太多请求。如果你需要这么多数据,也许你应该下载一些数据库并进行本地查询。