在asking for and getting这个花哨的小程序允许我使用Google的Geolocation API将任何802.11以太网MAC地址转换为地理定位后,我很难过发现Google认为我总是在加利福尼亚州的蒙特里在一台计算机上使用它,在纽波特海滩使用它时,我会在另一台计算机上使用它。
以下是我正在使用的程序的修订版本:
<?php
$mac = $_SERVER['argv'][1];
$postData = '{
"version": "1.1.0",
"request_address":"true",
"wifi_towers": [{
"mac_address": "' . $mac . '"
}]
}';
$opts = array(
'http'=>array(
'method' => "POST",
'header' => 'Content-type: application/x-www-form-urlencoded',
'content' => $postData
)
);
$response = file_get_contents(
'http://www.google.com/loc/json',
false,
stream_context_create($opts)
);
$response = json_decode($response, true);
$loc = $response['location'];
$addr = $loc['address'];
echo "Geolocate $mac:\n";
echo $addr['street'],"\n";
echo $addr['city'],", ",$addr['region']," ",$addr['postal_code'],"\n";
echo "Lat/Lon: ",$loc['latitude'],",",$loc['longitude'],"\n";
以下是我得到的结果:
% php geolocate.php 00:E0:6F:90:A1:71
Geolocate 00:E0:6F:90:A1:71:
W Franklin St
Monterey, California 93940
Lat/Lon: 36.600237,-121.894676
% php geolocate.php 00:D0:25:8A:79:14
Geolocate 00:D0:25:8A:79:14:
W Franklin St
Monterey, California 93940
Lat/Lon: 36.600237,-121.894676
% php geolocate.php 00-D0-25-8A-79-14
Geolocate 00-D0-25-8A-79-14:
W Franklin St
Monterey, California 93940
Lat/Lon: 36.600237,-121.894676
%
这是另一台机器:
$ php geolocate.php 00:D0:25:8A:79:14
Geolocate 00:D0:25:8A:79:14:
Via Lido
Newport Beach, California 92663
Lat/Lon: 33.61891,-117.928946
$ php geolocate.php 00:E0:6F:90:A1:71
Geolocate 00:E0:6F:90:A1:71:
Via Lido
Newport Beach, California 92663
Lat/Lon: 33.61891,-117.928946
我尝试的每个以太网地址都在蒙特利的W Franklin街上是没有意义的。它违反了与我的IP地址相关的内容吗?
答案 0 :(得分:2)
这是wifi本地化,当使用wifi 未连接时,它远非准确。在这里,您的脚本位于法国巴黎市中心,我使用的机器位于巴黎东部,由dsl连接。
请参阅http://www.google.com/support/mobile/bin/answer.py?hl=en&answer=81873
答案 1 :(得分:0)
根据您提到的问题,Google地理位置API的工作方式是查找无线接入点的MAC地址,而不是机器的MAC地址。听起来好像它只是查询他们收集的AP MAC地址和相应坐标的数据库。