GPS данные

Средства разработки, технические вопросы, отвечает (по мере сил) Отдел Разработок
fiery-elf
Аспирант (2 lvl)
Сообщения: 69
Зарегистрирован: Ср янв 03, 2007 23:16

GPS данные

Сообщение fiery-elf » Вт фев 13, 2007 21:28

Я не спец в програмировании, но все мне известне софтины GPS е подходят!!!
Нужна растровая, очень точная (дабы у 6515 точность есть...) навигация.

вот и решил сам... как нибудь...
натолкнуися на беду:
<<<$GPRMC,164158.20,A,5313.731694,N,05011.466474,E,005.8,118.0,130207,,*30>>>
как из этой строки выдернуть "5313.731694,N" и "05011.466474,E" не зная их значений!!!
помогите!!! я на vb писать пытаюсь...

Да и кстати, есть ли activeX для ЖПС на 6500

Аватара пользователя
igorekk
Модератор
Сообщения: 3788
Зарегистрирован: Ср июн 04, 2003 15:03

Сообщение igorekk » Ср фев 14, 2007 10:29

Регулярным выражением в 1 строчку делается это.
Вот только не знаю, как с их поддержкой в VB.

sshd
Нобелевский лауреат (7 lvl)
Сообщения: 2159
Зарегистрирован: Вс мар 19, 2006 15:55

Сообщение sshd » Ср фев 14, 2007 10:48

а что, по запятым пробежаться - не судьба?
там же их, как я понимаю - фиксированное количество.
Samsung GT-S8500 + MicroSD 8Gb

fiery-elf
Аспирант (2 lvl)
Сообщения: 69
Зарегистрирован: Ср янв 03, 2007 23:16

Сообщение fiery-elf » Ср фев 14, 2007 19:19

я же не спец в vb!!!
и даже толком его не знаю. :)

подскажи как разбить эту строчку по запятым (как значения засунуть в разделенные переменные)

sshd
Нобелевский лауреат (7 lvl)
Сообщения: 2159
Зарегистрирован: Вс мар 19, 2006 15:55

Сообщение sshd » Ср фев 14, 2007 21:39

fiery-elf писал(а):я же не спец в vb!!!
а причём здесь vb?
тут от языка требуется только, чтобы были функции получения длины строки, получения N-го символа из строки. а потом - в цикле искать запятые.
это в любом языке так (если конечно нет более удобных механизмов по типу regexp'ов или функций поиска символа/подстроки).
Samsung GT-S8500 + MicroSD 8Gb

fiery-elf
Аспирант (2 lvl)
Сообщения: 69
Зарегистрирован: Ср янв 03, 2007 23:16

Сообщение fiery-elf » Ср фев 14, 2007 22:37

а строчку на vb не можешь написать?
пример раделяющий 3 значения в 3 переменные
а у строчки длинна разная в зависимости от сигнала (есть или нет)

sshd
Нобелевский лауреат (7 lvl)
Сообщения: 2159
Зарегистрирован: Вс мар 19, 2006 15:55

Сообщение sshd » Чт фев 15, 2007 00:05

fiery-elf писал(а):а у строчки длинна разная в зависимости от сигнала (есть или нет)
ну так приведи пример строчки для обоих случаев
Samsung GT-S8500 + MicroSD 8Gb

kvv@home
Студент (1 lvl)
Сообщения: 44
Зарегистрирован: Чт янв 11, 2007 23:30

Сообщение kvv@home » Чт фев 15, 2007 01:19

если по рабоче-крестьянски, то все можно сделать за один проход цикла, примерно так (vb под рукой нет, попробовал на VBA)

Код: Выделить всё

Dim GPSS As String  ' входные данные
Dim Param0 As String  ' время  по гринвичу
Dim Param1 As String  ' широта градусы
Dim Param2 As String  ' север/юг
Dim Param3 As String  ' долгота
Dim Param4 As String  ' запад/восток

Param0 = ""
Param1 = ""
Param2 = ""
Param3 = ""
Param4 = ""

Word = 0  ' счетчик слов
GPSS = "<<<$GPRMC,164158.20,A,5313.731694,N,05011.466474,E,005.8,118.0,130207,,*30>>>"
For i = 1 To Len(GPSS)
  If GPSS(i) = "," Then ' следующее слово
     Word = Word + 1
  Else
  Select Case Word
   Case 1: Param0 = Param0 + GPSS(i)
   Case 3: Param1 = Param1 + GPSS(i)
   Case 4: Param2 = Param2 + GPSS(i)
   Case 5: Param3 = Param3 + GPSS(i)
   Case 6: Param4 = Param4 + GPSS(i)
 End Select
   End If
Next i
Да, по описанию протокола, в команде GPRMC нужно еще CRC проверять, а то правильность данных не гарантируется. Части данных тоже может не быть, но количество запятых должно быть одинаковым, так что парситься параметры должны в любом случае.

Кстати, а почему GPRMC ? Если вам нужны только координаты, то достаточно парсить GPGGA или даже GPGLL, их парсить еще проще.
kvv

fiery-elf
Аспирант (2 lvl)
Сообщения: 69
Зарегистрирован: Ср янв 03, 2007 23:16

Сообщение fiery-elf » Пт фев 16, 2007 12:00

Огромное тебе спасибо!
GPLL данных в коде nmea я не нашол (hp nw6515d) А говориш GPGGA проще? там не надо проверять CRC?
Какие еще параметры присутствуют там кроме времяни, координат и высоты?
заранее спасибо.

да и немного не в тему:
как в vb обрезать переменную например до 45 символов, отрезав все послеидущие символы.

sshd
Нобелевский лауреат (7 lvl)
Сообщения: 2159
Зарегистрирован: Вс мар 19, 2006 15:55

Сообщение sshd » Пт фев 16, 2007 13:08

fiery-elf писал(а):как в vb обрезать переменную например до 45 символов, отрезав все послеидущие символы
http://msdn.microsoft.com/library/defau ... ctLeft.asp
Samsung GT-S8500 + MicroSD 8Gb

fiery-elf
Аспирант (2 lvl)
Сообщения: 69
Зарегистрирован: Ср янв 03, 2007 23:16

Сообщение fiery-elf » Пт фев 16, 2007 14:10

sshd все конечно хорошо, но я с кпк в интернет выхожу(страница нормально не отображается) и ничего там не понял. точно знаю что както можно ограничить размер при обьяавлени переменной типо:
dim xxx as string (и чето еше дожно следовать)
если в такую переменную засунуть значение длиннее: xxx = textbox1.text
то значение в xxx будет отрезанно по нужные символы.

kvv@home
Студент (1 lvl)
Сообщения: 44
Зарегистрирован: Чт янв 11, 2007 23:30

Сообщение kvv@home » Пт фев 16, 2007 14:12

fiery-elf писал(а):GPLL данных в коде nmea я не нашол (hp nw6515d) А говориш GPGGA проще? там не надо проверять CRC?
Какие еще параметры присутствуют там кроме времяни, координат и высоты?
Вот тут описание протокла например:
http://www.navgeocom.ru/support/nmea/index.htm

Вообще в GPGGA много всякого интересного, но CRC можно пне проверять, в GPGLL вообще только время и координаты местоположения - парсится проще.
kvv

fiery-elf
Аспирант (2 lvl)
Сообщения: 69
Зарегистрирован: Ср янв 03, 2007 23:16

Сообщение fiery-elf » Пт фев 16, 2007 17:15

Значит GPGGA.
Я еще так понял на разных gps и nmea коды разного состава (у меня многие отсуствуют).
А как обрезать(обьявить урезанную) переменную на бейсике не знаешь?

kvv@home
Студент (1 lvl)
Сообщения: 44
Зарегистрирован: Чт янв 11, 2007 23:30

Сообщение kvv@home » Пт фев 16, 2007 22:46

fiery-elf писал(а):А как обрезать(обьявить урезанную) переменную на бейсике не знаешь?
Функция Left оставляет символы слева

Код: Выделить всё

Dim  Str1, Str2
Str1 = "1234567890"   
Str2 = Left(Str1, 5)   ' Str2  равно "12345"
Функция Right оставляет символы справа

Код: Выделить всё

Dim  Str1, Str2
Str1 = "1234567890"   
Str2 = Right(Str1, 5)   ' Str2  равно "67890"

Есть еще функция Mid, делает и то и другое сразу =)
kvv

fiery-elf
Аспирант (2 lvl)
Сообщения: 69
Зарегистрирован: Ср янв 03, 2007 23:16

Сообщение fiery-elf » Вс фев 18, 2007 11:41

в vb раньше это делалось так:
dim name as string *45
создание переменной типа string длинной 45 символов.

я сделал немного не так:
mame = name(0) + name(1) + name(2) +...

а на счет формата карты можеш посоветовать(jpg при разрешении 1500\1500 это предел памяти кпк). мне понравился gig (gig navigator) но декодировать его я не знаю.

Закрыто

Вернуться в «Программирование для КПК»