我有一个发送给我的设备 移动国家代码(MCC) 移动网络代码(MNC) 位置区号(LAC) 和 小区ID 我所在地区最近的每个移动塔楼。谷歌纵横APP正在使用此信息来检测我的位置。我想创建自己的应用程序,可以使用相同的技术,但我找不到任何谷歌API描述。
为了我的目的,有可能使用OpenCellID,但我居住的国家/地区没有可用的CellID。
有些帖子中有过时的API链接,我需要https://developers.google.com/gears/和http://www.google.com/glm/mmap,但似乎它们都不再有效。
答案 0 :(得分:0)
您可以尝试使用google Maps api:
https://developers.google.com/maps/?hl=es
他们有一个选项&sensor=true
来检测您是否尝试从设备获取纬度和经度。
答案 1 :(得分:0)
这是一个PHP脚本,它接受参数mcc
,mnc
,lac
和cid
,如果结果可用则返回latitude:longitude
,{{1如果没有找到结果。这使用了您提到的相同Google API。
NOT_FOUND
将代码保存为php文件(我在下面的示例中使用了locate.php),将其上传到您的Web主机,然后您可以进行以下查询:
<?php
$data =
"\x00\x0e".
"\x00\x00\x00\x00\x00\x00\x00\x00".
"\x00\x00".
"\x00\x00".
"\x00\x00".
"\x1b".
"\x00\x00\x00\x00".
"\x00\x00\x00\x00".
"\x00\x00\x00\x03".
"\x00\x00".
"\x00\x00\x00\x00".
"\x00\x00\x00\x00".
"\x00\x00\x00\x00".
"\x00\x00\x00\x00".
"\xff\xff\xff\xff".
"\x00\x00\x00\x00"
;
$mcc = substr("00000000".dechex($_REQUEST["mcc"]),-8);
$mnc = substr("00000000".dechex($_REQUEST["mnc"]),-8);
$lac = substr("00000000".dechex($_REQUEST["lac"]),-8);
$cid = substr("00000000".dechex($_REQUEST["cid"]),-8);
$init_pos = strlen($data);
$data[$init_pos - 38]= pack("H*",substr($mnc,0,2));
$data[$init_pos - 37]= pack("H*",substr($mnc,2,2));
$data[$init_pos - 36]= pack("H*",substr($mnc,4,2));
$data[$init_pos - 35]= pack("H*",substr($mnc,6,2));
$data[$init_pos - 34]= pack("H*",substr($mcc,0,2));
$data[$init_pos - 33]= pack("H*",substr($mcc,2,2));
$data[$init_pos - 32]= pack("H*",substr($mcc,4,2));
$data[$init_pos - 31]= pack("H*",substr($mcc,6,2));
$data[$init_pos - 24]= pack("H*",substr($cid,0,2));
$data[$init_pos - 23]= pack("H*",substr($cid,2,2));
$data[$init_pos - 22]= pack("H*",substr($cid,4,2));
$data[$init_pos - 21]= pack("H*",substr($cid,6,2));
$data[$init_pos - 20]= pack("H*",substr($lac,0,2));
$data[$init_pos - 19]= pack("H*",substr($lac,2,2));
$data[$init_pos - 18]= pack("H*",substr($lac,4,2));
$data[$init_pos - 17]= pack("H*",substr($lac,6,2));
$data[$init_pos - 16]= pack("H*",substr($mnc,0,2));
$data[$init_pos - 15]= pack("H*",substr($mnc,2,2));
$data[$init_pos - 14]= pack("H*",substr($mnc,4,2));
$data[$init_pos - 13]= pack("H*",substr($mnc,6,2));
$data[$init_pos - 12]= pack("H*",substr($mcc,0,2));
$data[$init_pos - 11]= pack("H*",substr($mcc,2,2));
$data[$init_pos - 10]= pack("H*",substr($mcc,4,2));
$data[$init_pos - 9]= pack("H*",substr($mcc,6,2));
if ((hexdec($cid) > 0xffff) && ($mcc != "00000000") && ($mnc != "00000000")) {
$data[$init_pos - 27] = chr(5);
} else {
$data[$init_pos - 24]= chr(0);
$data[$init_pos - 23]= chr(0);
}
$context = array (
'http' => array (
'method' => 'POST',
'header'=> "Content-type: application/binary\r\n"
. "Content-Length: " . strlen($data) . "\r\n",
'content' => $data
)
);
$xcontext = stream_context_create($context);
$str=file_get_contents("http://www.google.com/glm/mmap",FALSE,$xcontext);
if (strlen($str) > 10) {
$lat_tmp = unpack("l",$str[10].$str[9].$str[8].$str[7]);
$lon_tmp = unpack("l",$str[14].$str[13].$str[12].$str[11]);
$lon = $lon_tmp[1]/1000000;
$lat = $lat_tmp[1]/1000000;
echo $lat.":".$lon;
}
else{echo "NOT_FOUND";}
?>
然后,您可以解析获得的响应以获取纬度和经度信息。