1. Никаких баз с расположением БС (официальных/неофициальных) Google не у кого не берет. Принцип пополнения, как тут уже писали не раз, исключительно на "данных из трубок абонентов".
2. От абонентов, у которых включен GPS, при работе GoogleMaps уплывают на сервер Гугля: координаты по GPS, код сети (NET), CID, LAC. (никаких ТА , RX и т.д. google не использует).
3. Для каждого сектора, из всего множества присылаемых данных вычисляется некая среднестатистичекая вероятность нахождения абонента в координатах и привязывается она жестко к CID, LAC и NET.
4. От абонентов которые запрашивают свое местоположение запрос строится на трех данных - CID, LAC и NET. И как я выше писал, один сектор - одна координата, вне зависимости где находится пользователь запрашиваемый свое местоположение - хоть в 200метрах от БС, хоть в паре километров от нее - координата будет получена абсолютно одинаковая!!!
5. В связи с жесткой привязкой к LAC вытекает особенность - смена LAC на секторе ведет к временной невозможности определить положение, до тех пор, пока не начнут поступать к Гуглю обновленные данные с GPS-пользователей.
Для желающих поэкспериментировать в базой БС Гугля, можно воспользоваться маленьким скритпом на Python. У кого нет интерпретатора Python, могут его скачать с
http://python.org/download/releases/2.5.2/
В скрипте в первой строке, указываете NET, CID, LAC и жмете на выполнение. В результате он слазает на сервер Гугля, и если есть БС в базе отобразит условные координаты в виде '59.200274 39.836925', иначе скажет 'no data in google'
net, cid, lac = 25501, xxxx, xxxx
import urllib
a = '000E00000000000000000000000000001B0000000000000000000000030000'
b = hex(cid)[2:].zfill(8) + hex(lac)[2:].zfill(8)
c = hex(divmod(net,100)[1])[2:].zfill(8) + hex(divmod(net,100)[0])[2:].zfill(8)
string = (a + b + c + 'FFFFFFFF00000000').decode('hex')
try:
_data = urllib.urlopen('http://www.google.com/glm/mmap',string)
_r = data.read().encode('hex')
_if len(r) > 14:
__print float(int(r[14:22],16))/1000000, float(int(r[22:30],16))/1000000
_else:
__print 'no data in google'
except:
_print 'connect error'
P.S.
1. В скрипте перед запуском в начале строк заменить подчеркивания "_" на пробелы, количество "_" должно равняться количеству "пробелов"
2. Для любителей программировать не составит труда добавить пару строчек, и например по указанным NET и LAC, перебрать все варианты CID (от 1 до 65536) и посмотреть какие сектора имеются у Гугля и узнать все их примерные координаты...
Взял с форума нетмониторщиков.
Только что проверил скрипт. Работает. Питон выдает координату. Я ее копирую. Вставляю в поиск гугль мапса. Показывает точку. Запрашиваю местоположение. Вуаля. Точки сходятся!