|
определение местоположения по сотам, можно ли узнать координаты по сотам |
|
|
|
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
|
|
|