0

我有一台设备向我发送移动国家代码 (MCC) 移动网络代码 (MNC) 位置区代码 (LAC) 和我所在地区最近的每个移动塔的小区 ID。谷歌纵横 APP 正在使用此信息来检测我的位置。我想制作可以使用相同技术的自己的应用程序,但我找不到任何 Google API 描述。

有可能将OpenCellID用于我的目的,但我居住的国家/地区没有可用的 CellID。

有些帖子指向 API 的过时链接,我需要https://developers.google.com/gears/http://www.google.com/glm/mmap但似乎它们都不再起作用了。

4

2 回答 2

0

这是一个 PHP 脚本,它接受参数mcc、和mnc,如果结果可用则返回,如果没有找到结果。这使用了您提到的相同的 Google API。laccidlatitude:longitudeNOT_FOUND

<?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";}

?>

将代码保存为 php 文件(我在下面的示例中使用了 locate.php),将其上传到您的 web 主机,您可以查询如下: http://yourwebhost.com/locate.php?mcc=XXX&mnc=XXX&lac=XXXXX&cid=XXXXXXXX 然后您可以解析获得的响应以获取纬度和经度信息。

于 2013-07-24T18:23:19.193 回答
0

您可以尝试使用谷歌地图 api:

https://developers.google.com/maps/?hl=es

他们有一个选项&sensor=true可以检测您是否尝试从设备获取纬度和经度。

于 2012-10-13T09:02:18.580 回答