|
определение местоположения по сотам, можно ли узнать координаты по сотам |
|
|
|
Oct 1 2008, 11:27
|
Участник

Группа: Участник
Сообщений: 53
Регистрация: 19-12-05
Пользователь №: 12 391

|
в сетке куча проектов - видел постоянные базы москвы и питера и еще какие-то города присутствовали.... даже пользовал на mpx220-м когда то... правда опсосы периодически крутят антены и ессно базы перестают быть актуальными...
|
|
|
|
|
Oct 1 2008, 11:46
|

Йа моск ;)
     
Группа: Модераторы
Сообщений: 4 345
Регистрация: 7-07-05
Из: Kharkiv-city
Пользователь №: 6 610

|
Не очень точные координаты и не для всех операторов и не для всех мест можно получить следующим образом: 1. Необходимо узнать LAI/LAC/CID текущей рабочей вышки (тут все зависит от модуля, можно ли от него эту информацию получить). 2. Затем, пользуясь сервисом гугли получить координаты этой вышки. Но это будет координата вышки, а не модуля, как понимаете. Если сможете достать из модуля все вышки, которые он видит (обычно, около 6) и уровни сигналов, то можно оценить координаты самого модуля. Заметьте, оценить, а не измерить
--------------------
"Практика выше (теоретического) познания, ибо она имеет не только достоинство всеобщности, но и непосредственной действительности." - В.И. Ленин
|
|
|
|
|
Oct 1 2008, 13:01
|
Местный
  
Группа: Свой
Сообщений: 483
Регистрация: 1-09-06
Из: Гродно РБ
Пользователь №: 20 011

|
Цитата(Rst7 @ Oct 1 2008, 15:10)  Ну вот примерно вот так -
Круги с цифрами - это базовые станции, которые видит мой телефон в текущий момент. А я нахожусь там где крестик. Линейку масштаба пришлось прилепить с другого места. Но соответствует. Спасибо за ответ! По точности у меня представление имеется. Понятно что это не GPS. Но внутри помещенияGPS не работает. Для грубой оценки это вполне приемлимо по сотам. Мне както приходилось воспользоваться ориентацией в Вашингтоне с помощью гуглевкой карты в телефоне. В Минске, где я живу постоянно, пишет что услуга временно не работает. Просто по утверждениям некоторых людей, соты передают свои координаты. Вот у меня сомнения имеются на этот счет. Если я всетаки правильно понимаю, то от модуля я могу получить только какой-то номер(идентификатор) соты. А дальше мне нужно где то найти таблицу координат этих сот. Ну и дальше уже простая математическая задача. Если я не прав то подскжите мне.
|
|
|
|
|
Oct 1 2008, 13:05
|

Йа моск ;)
     
Группа: Модераторы
Сообщений: 4 345
Регистрация: 7-07-05
Из: Kharkiv-city
Пользователь №: 6 610

|
Цитата от модуля я могу получить только какой-то номер(идентификатор) соты Может быть Вы сможете получить от модуля идентификатор соты. Конкретно эти данные называются LAI,LAC и CID. Но, скорее всего, надо патчить софт модуля. Цитата А дальше мне нужно где то найти таблицу координат этих сот. Сходить на сервер гугли, он по этим данным отдаст широту и долготу. Цитата Просто по утверждениям некоторых людей, соты передают свои координаты. Врут.
--------------------
"Практика выше (теоретического) познания, ибо она имеет не только достоинство всеобщности, но и непосредственной действительности." - В.И. Ленин
|
|
|
|
|
Oct 1 2008, 17:47
|

старший лаборант
     
Группа: Свой
Сообщений: 2 702
Регистрация: 30-09-05
Из: ЮЗЖД
Пользователь №: 9 097

|
Цитата(Rst7 @ Oct 1 2008, 14:46)  1. Необходимо узнать LAI/LAC/CID текущей рабочей вышки (тут все зависит от модуля, можно ли от него эту информацию получить). 2. Затем, пользуясь сервисом гугли получить координаты этой вышки. 1. Обратный случай просто нет смысла рассматривать. Если модуль молчит, то меняем на тот, который скажет  2. Не обязательно гуглевским - там может быть устаревшая информация, может быть ложная или не быть вовсе. Это может быть и собственный сервис - на "ремэксперте" и на сайте microchip.ua этой темой интересовались; просили создать устройство, привязывающее текущие координаты, полученные от GPS-приёмника, к параметрам БС, полученным от модуля GSM. То, что такое устройство должно периодически перемещаться по интересуемой географической зоне с целью обновления данных - вроде вопросов не вызывает.  Но координаты конкретных БС априори известны операторам сотовой связи, чем они, собственно, и пользуются, предлагая за (не очень большую) плату услуги по определению местоположения абонента. С точностью до нескольких трамвайных остановок - проверено
--------------------
Китайская комплектация - европейское качество! ;)
|
|
|
|
|
Oct 1 2008, 22:27
|
Участник

Группа: Участник
Сообщений: 53
Регистрация: 19-12-05
Пользователь №: 12 391

|
из источника, имеющего прямое отношение к СБ КС(украинский опсос ) есть инфа - постоянная (по крайней мере раз в месяц) перенаправка антен. и о каких координатах в итоге мона говорить? только если у тебя есть порядка 1000 динамических объектов на средний город которые постоянно обновляют тебе связку жпс-гсм-сот. про географический центр украины с точки зрения операторов я вообще молчу...
|
|
|
|
|
Oct 2 2008, 04:06
|

Профессионал
    
Группа: Свой
Сообщений: 1 195
Регистрация: 26-07-05
Из: Санкт-Петербург
Пользователь №: 7 111

|
Цитата(M_Z @ Oct 1 2008, 11:39)  Доброго времени суток! подскажите каким образом можно определить координаты (долгота, широта) используя GSM модуль по сотам. Или только возможно получить номер соты, а координаты сот надо знать заранее. У МТС есть такая услуга www.mpoisk.ru На номер 7788 отправляется запрос, приходит ответ в текстовом формате(город, ближайшие улицы, метро). Возможно, с ними можно договориться о предоставлении информации в другом виде. Точность, правда, не очень большая. Бывает, что находясь на одном месте, можно получить несколько ответов о своем положении.
|
|
|
|
|
Oct 3 2008, 06:01
|
Участник

Группа: Участник
Сообщений: 46
Регистрация: 2-10-08
Пользователь №: 40 659

|
На яндекс карты поддерживается для мобильников точьность не измерял но районы соответствуют
|
|
|
|
|
Oct 3 2008, 19:38
|
Участник

Группа: Участник
Сообщений: 53
Регистрация: 19-12-05
Пользователь №: 12 391

|
по поводу "кручения антен" - когда в город Х. приезжала типа коммисия из стольного города К. начиналось кручение(типа, на скока я понимаю диагармы направленности не те иль покрытие не так), как только уезжали - местные возвращали взад... правда было это с годик тому.. что сичас - не знаю - не интересно.
|
|
|
|
|
Apr 30 2009, 08:46
|
Группа: Участник
Сообщений: 12
Регистрация: 15-01-09
Пользователь №: 43 428

|
Цитата(Rst7 @ Oct 1 2008, 15:46)  Не очень точные координаты и не для всех операторов и не для всех мест можно получить следующим образом: 1. Необходимо узнать LAI/LAC/CID текущей рабочей вышки (тут все зависит от модуля, можно ли от него эту информацию получить). 2. Затем, пользуясь сервисом гугли получить координаты этой вышки. Но это будет координата вышки, а не модуля, как понимаете. Если сможете достать из модуля все вышки, которые он видит (обычно, около 6) и уровни сигналов, то можно оценить координаты самого модуля. Заметьте, оценить, а не измерить  А можно немного поподробнее о том, как можно это сделать? Мой модуль выплевывает следующие данные: < nbcells>: number of base stations available. The first base station is the serving cell (0 ≤ i ≤ 7) < ARFCN>: Absolute Radio Frequency Channel Number < BSIC>: Base Station Identify Code < PLMN>: PLMN identifiers (3 bytes), made of MCC (Mobile Country Code), and MNC (Mobile Network Code). < LAC>: Location Area < CI>: Cell ID, 4 hexadecimal digits, e.g. ABCD. < RSSI>: Received signal level of the BCCH carrier, decimal value from 0 to 63. < TA>: Timing advance. Available only during a communication (equals to 0xff=255 at any other time). В данном случае, CID=>CI, LAC=>LAC, а что такое LAI - не совсем понимаю... Вот в этом документе нашел информацию, что LAI - это совокупность MNC, MCC, LAC и CID (то есть всего вышеперечисленного). Также не совсем понятно, как из этой информации можно получить задержку сигнала от определенной вышки... Подскажите, пожалуйста, как можно переколбасить эти данные в координаты. ЗЫ О каком, кстати, сервисе Гугла речь идет? Вроде информации по вышкам там взяться неоткуда...
|
|
|
|
|
Apr 30 2009, 09:37
|

Йа моск ;)
     
Группа: Модераторы
Сообщений: 4 345
Регистрация: 7-07-05
Из: Kharkiv-city
Пользователь №: 6 610

|
Цитата А можно немного поподробнее о том, как можно это сделать? Ну, все данные Вы получаете, судя по тексту ниже. Цитата Также не совсем понятно, как из этой информации можно получить задержку сигнала от определенной вышки.. TA - это и есть задержка. В у.е. Актуальна только при наличии соединения. Цитата Подскажите, пожалуйста, как можно переколбасить эти данные в координаты. ЗЫ О каком, кстати, сервисе Гугла речь идет? Вроде информации по вышкам там взяться неоткуда... Google Maps для мобильных устройств ходит на свой серверок, который по CID/LAC возвращает широту/долготу. Яндекс тоже имеет такой сервис. Недолгое гугление привело к коду Код function GetCoordFromGoogle(CountryCode, NetworkCode, LAC, CellID: Integer): string; var strA, strB, strC, strAll: string; sResult: string; ms: TMemoryStream; dLat, dLon: Double; iLat, iLon: Integer; i: Integer; b: byte; sTmp, sTmp2: string; iCntr: Integer; HTTP: TIdHTTP; begin Result := ''; strA := '000E00000000000000000000000000001B0000000000000000000000030000'; strB := '0000' + IntToHex(CellID, 2) + '0000' + IntToHex(LAC, 2); strC := '000000' + IntToHex(NetworkCode, 2) + '000000' + IntToHex(CountryCode, 2); strAll := strA + strB + strC + 'FFFFFFFF00000000'; HTTP := TIdHTTP.Create(nil); HTTP.Request.ContentType := 'application/x-www-form-urlencoded'; HTTP.Request.ContentLength := Length(strAll) div 2; ms := TMemoryStream.Create; try iCntr := 1; for i := 1 to (Length(strAll) div 2) do begin b := StrToInt('0x' + Copy(strAll, iCntr, 2)); iCntr := iCntr + 2; ms.Write(b, 1); end; ms.Seek(0, soFromBeginning); try sResult := HTTP.Post('http://www.google.com/glm/mmap', ms); if Length(sResult) > 14 then begin sTmp := '0x'; for i := 1 to 5 do begin sTmp2 := Copy(sResult, i + 6, 1); sTmp := sTmp + IntToHex(Ord(sTmp2[1]), 2); end; iLat := StrToInt(sTmp); sTmp := '0x'; for i := 1 to 4 do begin sTmp2 := Copy(sResult, i + 11, 1); sTmp := sTmp + IntToHex(Ord(sTmp2[1]), 2); end; iLon := StrToInt(sTmp); dLat := iLat/1000000; dLon := iLon/1000000; Result := Format('%12.7f%s%12.7f', [dLat, #13#10, dLon]); end; except // stub end; finally HTTP.Free; ms.Free; end; end;
function GetCoordFromYandex(CountryCode, NetworkCode, LAC, CellID: Integer): string; const cc_URL = 'http://mobile.maps.yandex.net/cellid_location/?&cellid=%d&operatorid=%d&countrycode=%d&lac=%d'; var sURL: string; rs: TStream; node: IXMLNode; HTTP: TIdHTTP; XML: TXMLDocument; begin Result := ''; sURL := Format(cc_URL, [CellID, NetworkCode, CountryCode, LAC]); rs := TMemoryStream.Create; HTTP := TIdHTTP.Create(nil); XML := TXMLDocument.Create(HTTP); // если указать nil то будет ошибка :-D try HTTP.Request.Accept := 'text/plain'; HTTP.Request.AcceptEncoding := 'windows-1251'; try HTTP.Get(sURL, rs); if rs.Size > 0 then begin rs.Seek(0, soFromBeginning); XML.LoadFromStream(rs); XML.NSPrefixBase := 'location'; node := XML.Node.ChildNodes.FindNode('location'); if (node <> nil) then begin node := node.ChildNodes.FindNode('coordinates'); if (node <> nil) then begin Result := StringReplace(node.Attributes['latitude'], '.', ',', []) + #13#10 + StringReplace(node.Attributes['longitude'], '.', ',' ,[]); end; end; end; except // stub end; finally XML.Free; HTTP.Free; rs.Free; end; end;
--------------------
"Практика выше (теоретического) познания, ибо она имеет не только достоинство всеобщности, но и непосредственной действительности." - В.И. Ленин
|
|
|
|
|
Apr 30 2009, 10:49
|
Группа: Участник
Сообщений: 12
Регистрация: 15-01-09
Пользователь №: 43 428

|
Rst7, спасибо! Круто, я б не догадался, что у Гугла с Яндексом есть такой замечательный сервис  Сейчас вижу вокруг себя 7 станций, то есть, если померить задержку до каждой - то можно получить довольно неплохую погрешность! Осталось найти способ, как можно измерить задержку для требуемой станции, потому как я пока не вижу, как для связи можно использовать какую-то определенную БС. Для этого есть какие-то определенные АТ-команды?
|
|
|
|
|
May 6 2009, 06:55
|
Группа: Участник
Сообщений: 12
Регистрация: 15-01-09
Пользователь №: 43 428

|
Цитата(Rst7 @ Apr 30 2009, 14:58)  Без ковыряний внутри софта модуля - никак, т.к. можно измерить задержку до текущей БС только в режиме разговора. Итак, как найти задержку разобрался. Убедился, что расстояние (благо, формулу знаю) можно измерить 1.только до текущей станции 2.только в режиме разговора  Погрешность - около полукилометра Сменить станцию посредством АТ-команд не предоставляется возможным - насколько я понимаю, то базовая станция выбирается не модулем, а сетью. То есть найти свои координаты по ТА не представляется возможным - можно только найти расстояние до текущей станции. Из остальных данные здесь может помочь, видимо, только уровень сигнала - он хоть как-то коррелирует с расстоянием, однако, как количественно связать эту цифру с расстоянием, я не знаю.
|
|
|
|
|
May 18 2009, 02:19
|
Местный
  
Группа: Свой
Сообщений: 202
Регистрация: 18-05-09
Из: Novosibirsk
Пользователь №: 49 204

|
Цитата(antisingle @ Apr 30 2009, 12:46)  А можно немного поподробнее о том, как можно это сделать?
Мой модуль выплевывает следующие данные: <nbcells>: number of base stations available. The first base station is the serving cell (0 ≤ i ≤ 7) <ARFCN>: Absolute Radio Frequency Channel Number <BSIC>: Base Station Identify Code <PLMN>: PLMN identifiers (3 bytes), made of MCC (Mobile Country Code), and MNC (Mobile Network Code). <LAC>: Location Area <CI>: Cell ID, 4 hexadecimal digits, e.g. ABCD. <RSSI>: Received signal level of the BCCH carrier, decimal value from 0 to 63. <TA>: Timing advance. Available only during a communication (equals to 0xff=255 at any other time).
... Подскажите пожалуйста, как GSM-модуль Вы используете? Помоему SIM300 не выдает параметр <TA>.
|
|
|
|
|
May 22 2009, 10:54
|
Группа: Участник
Сообщений: 12
Регистрация: 15-01-09
Пользователь №: 43 428

|
Цитата(alx125 @ May 18 2009, 06:19)  Подскажите пожалуйста, как GSM-модуль Вы используете? Помоему SIM300 не выдает параметр <TA>. Hilo, прошивка - 6.00, в более ранних версиях ТА, кажись, также не было.
|
|
|
|
|
May 27 2009, 13:25
|
Участник

Группа: Участник
Сообщений: 18
Регистрация: 3-08-06
Пользователь №: 19 291

|
Цитата(antisingle @ May 22 2009, 14:54)  Hilo, прошивка - 6.00, в более ранних версиях ТА, кажись, также не было. Спрашивалось про SIM300, а Вы про что?
|
|
|
|
|
Jun 2 2009, 12:54
|
Группа: Участник
Сообщений: 12
Регистрация: 15-01-09
Пользователь №: 43 428

|
Цитата Подскажите пожалуйста, как GSM-модуль Вы используете? Цитата(kslabs @ May 27 2009, 17:25)  Спрашивалось про SIM300, а Вы про что? Блин, вопрос прочитал как "...какой GSM-модуль..."
|
|
|
|
|
Mar 5 2013, 16:18
|
Знающий
   
Группа: Участник
Сообщений: 537
Регистрация: 22-02-06
Пользователь №: 14 594

|
Попробовал отправить данные на www.google.com/glm/mmap В ответ получаю Код HTTP/1.1 501 Not Implemented Content-Type: text/html; charset=UTF-8 Date: Tue, 05 Mar 2013 16:31:17 GMT Expires: Tue, 05 Mar 2013 16:31:17 GMT Cache-Control: private, max-age=0 X-Content-Type-Options: nosniff X-Frame-Options: SAMEORIGIN X-XSS-Protection: 1; mode=block Server: GSE Transfer-Encoding: chunked
<HTML> <HEAD> <TITLE>Not Implemented</TITLE> </HEAD> <BODY BGCOLOR="#FFFFFF" TEXT="#000000"> <H1>Not Implemented</H1> <H2>Error 501</H2> </BODY> </HTML> Вопрос - этот сервис все еще работает, а то появлялась информаия, что он закрыт? http://code.google.com/p/gears/wiki/GeolocationAPIВозможно, конечно я запрос криво составляю, но ответ подозрителен.
Сообщение отредактировал kan35 - Mar 5 2013, 16:20
|
|
|
|
|
Mar 5 2013, 19:32
|

Ally
     
Группа: Модераторы
Сообщений: 6 232
Регистрация: 19-01-05
Пользователь №: 2 050

|
Цитата Вопрос - этот сервис все еще работает, а то появлялась информаия, что он закрыт? http://code.google.com/p/gears/wiki/GeolocationAPIСервис google на основе JSON насколько знаю никогда не выдавал координат на основе базовых станций. Самое интересное что он мог это выдать адрес на основе переданных ему координат. А сервис www.google.com/glm/mmap это закрытый протокол. Исходники для которого тут выше показали. Только что проверил, этот сервис работает идеально.
|
|
|
|
|
Mar 6 2013, 05:20
|
Знающий
   
Группа: Участник
Сообщений: 537
Регистрация: 22-02-06
Пользователь №: 14 594

|
Цитата(AlexandrY @ Mar 5 2013, 23:32)  Сервис google на основе JSON насколько знаю никогда не выдавал координат на основе базовых станций. Самое интересное что он мог это выдать адрес на основе переданных ему координат. Это тоже интересно, кстати. Но я понял, что координаты он выдавать должен... Цитата(AlexandrY @ Mar 5 2013, 23:32)  А сервис www.google.com/glm/mmap это закрытый протокол. Исходники для которого тут выше показали. Только что проверил, этот сервис работает идеально. Я и делаю по аналогии. Это хорошая новость, значит у меня что то не так в запросе, прошу посмотреть, а то я в html совсем плохо... Или в теле запроса что то не то... Код char string_out[1500] = ""; unsigned short strleftlen = sizeof(string_out) - 1; strleftlen -= snprintf (string_out + strlen(string_out), strleftlen, "000E00000000000000000000000000001B0000000000000000000000030000"); strleftlen -= snprintf (string_out + strlen(string_out), strleftlen, "0000%.4X0000%.4X", u_tri.ya.cellid, u_tri.ya.lac); strleftlen -= snprintf (string_out + strlen(string_out), strleftlen, "000000%.4X000000%.4X", u_tri.ya.operatorid, u_tri.ya.countrycode); strleftlen -= snprintf (string_out + strlen(string_out), strleftlen, "FFFFFFFF00000000");
// PREAMBULA char preambula[200] = ""; strleftlen = sizeof(preambula)-1; strleftlen -= snprintf (preambula + strlen(preambula), strleftlen, "POST /glm/mmap HTTP/1.1\r\n"); //strleftlen -= snprintf (preambula + strlen(preambula), strleftlen, "Host: www.google.com\r\n"); //strleftlen -= snprintf (preambula + strlen(preambula), strleftlen, "Accept-Encoding: identity\r\n"); strleftlen -= snprintf (preambula + strlen(preambula), strleftlen, "Content-length: %d\r\n", strlen(string_out)); strleftlen -= snprintf (preambula + strlen(preambula), strleftlen, "Content-type: application/x-www-form-urlencoded\r\n"); strleftlen -= snprintf (preambula + strlen(preambula), strleftlen, "\r\n"); if ( netconn_write(google_locator, preambula, strlen(preambula), NETCONN_NOCOPY) == ERR_OK ) { printf("\r\n1\r\n"); } if ( netconn_write(google_locator, string_out, strlen(string_out), NETCONN_NOCOPY) == ERR_OK ) { printf("\r\n2\r\n"); } struct netbuf * in_buf = netconn_recv(google_locator); Ответ сервера - в предыдущем моем сообщении
|
|
|
|
|
Mar 6 2013, 11:06
|
Знающий
   
Группа: Участник
Сообщений: 537
Регистрация: 22-02-06
Пользователь №: 14 594

|
Спасибо за ответ, часть проблем действительно прояснилась, зато другая часть... у вас дамп данных слишком отличается от шаблона в примере. И в остальных примерах из интернета все поиному тоже, я в замешательстве. Например, начало у всех одинаковое: 00 0E 00 00 00 00 00 00 00 00 00 00 00 00 00 00 1B 00 00 00 0000000000000000030000 00 0e 00 00 00 00 00 00 00 00 00 00 00 00 00 00 1b 00 00 00 03 (в вашем дампе) Как интерпретировать остальные поля? Кое что понятно, типа код страны вижу F6, а остальное - не догадываюсь как идет, да и длина у вас 55, у меня 57...
Сообщение отредактировал kan35 - Mar 6 2013, 11:09
|
|
|
|
|
Mar 6 2013, 12:29
|
Знающий
   
Группа: Участник
Сообщений: 537
Регистрация: 22-02-06
Пользователь №: 14 594

|
Порблему нашел: на самом деле пример написан весьма криво. У автора написано, IntToHex каждый раз в параметре принимает длину в байт, в его конкретном случае это прокатило (2-байтные числа просто насильно выводились), а я смотря на параметр в функции подумал, этот параметр уже означает 2-байтный результат. Потом уже хелп на деkab глянул и прояснилось. Ну в общем и нарушил длину и выравнивание. А на самом деле ВСЕ 4 параметра передаются 4-байтными числами и не будет уже значительного количества непонятных нулей. Код strleftlen -= snprintf (string_out + strlen(string_out), strleftlen, "000E00000000000000000000000000001B0000000000000000000000030000"); strleftlen -= snprintf (string_out + strlen(string_out), strleftlen, "%.8X%.8X", u_tri.ya.cellid, u_tri.ya.lac); strleftlen -= snprintf (string_out + strlen(string_out), strleftlen, "%.8X%.8X", u_tri.ya.operatorid, u_tri.ya.countrycode); strleftlen -= snprintf (string_out + strlen(string_out), strleftlen, "FFFFFFFF00000000"); Интересно, что значат остальные байты...
|
|
|
|
|
Mar 13 2013, 14:08
|
Знающий
   
Группа: Участник
Сообщений: 537
Регистрация: 22-02-06
Пользователь №: 14 594

|
А вообще, тут нафиг не нужно работать со строками, преобразовывать их туда-сюда. Все тупо в структуру укладывается. Если бы еще не big endian, то совсем было бы красиво, но и так сойдет: Код struct GOOGLE_REQUEST_Y{ unsigned char pre[31]; unsigned long cellid; unsigned long lac; unsigned long operatorid; unsigned long countrycode; unsigned char post[8]; }send = { {0x00, 0x0E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00}, ((u_tri.ya.cellid<<24)&0xFF000000) | ((u_tri.ya.cellid<<8)&0x00FF0000) | ((u_tri.ya.cellid>>8)&0x0000FF00) | ((u_tri.ya.cellid>>24)&0x000000FF), ((u_tri.ya.lac<<24)&0xFF000000) | ((u_tri.ya.lac<<8)&0x00FF0000) | ((u_tri.ya.lac>>8)&0x0000FF00) | ((u_tri.ya.lac>>24)&0x000000FF), ((u_tri.ya.operatorid<<24)&0xFF000000) | ((u_tri.ya.operatorid<<8)&0x00FF0000) | ((u_tri.ya.operatorid>>8)&0x0000FF00) | ((u_tri.ya.operatorid>>24)&0x000000FF), ((u_tri.ya.countrycode<<24)&0xFF000000) | ((u_tri.ya.countrycode<<8)&0x00FF0000) | ((u_tri.ya.countrycode>>8)&0x0000FF00) | ((u_tri.ya.countrycode>>24)&0x000000FF), {0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00} }; Теперь вот столкнулся с проблемой собственно определения местоположения. Для начала тупо усреднил координаты видимых вышек и получил вполне сравнимый с яндекс-локатором результат. Даже лучче)) Но понятно, что нужно решать некую систему квадратных уравнений. У кого нибудь такое решение может имеется? поделитесь плиз.
Сообщение отредактировал kan35 - Mar 13 2013, 14:28
|
|
|
|
|
Mar 13 2013, 17:42
|
Местный
  
Группа: Свой
Сообщений: 403
Регистрация: 29-04-11
Из: Украина
Пользователь №: 64 682

|
Цитата(kan35 @ Mar 13 2013, 18:08)  Если бы еще не big endian, то совсем было бы красиво htonl( ) украсит код
Сообщение отредактировал GeGeL - Mar 13 2013, 17:45
|
|
|
|
|
Mar 24 2013, 12:18
|
Знающий
   
Группа: Участник
Сообщений: 537
Регистрация: 22-02-06
Пользователь №: 14 594

|
Цитата(GeGeL @ Mar 13 2013, 21:42)  htonl( ) украсит код Код украсил, спасибо :-) Код #pragma pack(1) struct GOOGLE_REQUEST_Y{ unsigned char pre[31]; unsigned long cellid; unsigned long lac; unsigned long operatorid; unsigned long countrycode; unsigned char post[8]; }send = { {0x00, 0x0E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00}, htonl((unsigned long)u_tri.ya.cellid), htonl((unsigned long)u_tri.ya.lac), htonl((unsigned long)u_tri.ya.operatorid), htonl((unsigned long)u_tri.ya.countrycode), {0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00} }; #pragma pack(4) // PREAMBULA char preambula[200] = ""; unsigned short strleftlen = sizeof(preambula)-1; strleftlen -= snprintf (preambula + strlen(preambula), strleftlen, "POST /glm/mmap HTTP/1.1\r\n"); strleftlen -= snprintf (preambula + strlen(preambula), strleftlen, "Content-type: application/binary\r\n"); strleftlen -= snprintf (preambula + strlen(preambula), strleftlen, "Content-length: %d\r\n", sizeof(send)); strleftlen -= snprintf (preambula + strlen(preambula), strleftlen, "Accept-Encoding: identity\r\n"); strleftlen -= snprintf (preambula + strlen(preambula), strleftlen, "\r\n"); if ( netconn_write(google_locator, preambula, strlen(preambula), NETCONN_NOCOPY) == ERR_OK ) { } if ( netconn_write(google_locator, &send, sizeof(send), NETCONN_NOCOPY) == ERR_OK ) { } struct netbuf * in_buf = netconn_recv(google_locator); if ( in_buf ) { unsigned long buflen = netbuf_len(in_buf); ... Но правильно вычислить координаты все еще не получилось. Мозг зачерствел. Прошу помощи: Нужно из координат и силы сигнала вышек базовых станций определить координату точки. Задача вроде бы для школы, где то на уровне подсознания "крутятся" вектора, но... эх..
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|