рдпреВрдирд┐рд╡рд░реНрд╕рд▓ NMEA 0183 рдкрд╛рд░реНрд╕рд░ / рд╕реА # рдореЗрдВ рдлреЙрд░реНрдореЗрдЯ (+ рдЬрд╛рд╡рд╛ рдкрд░ рдкреЛрд░реНрдЯ)

рдЙрдкрд╕рд░реНрдЧ


рдХреЛрдИ рдлрд░реНрдХ рдирд╣реАрдВ рдкрдбрд╝рддрд╛ рдХрд┐ рдпрд╣ рдХрд┐рддрдирд╛ рд╕рд╣реА рд▓рдЧ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдПрдХ рддреИрдпрд╛рд░ рд╕рдорд╛рдзрд╛рди рдХреА рддрд▓рд╛рд╢ рд╣реИ рдЬреЛ (рдореЗрд░реА рд░рд╛рдп рдореЗрдВ) NMEA рд╕рдВрджреЗрд╢реЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдореЗрдВ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╕рдорд░реНрдерди рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рдореБрдЭреЗ рдпрд╣ рдирд╣реАрдВ рдорд┐рд▓рд╛ред

рдЖрдзрд┐рдХрд╛рд░рд┐рдХ рджрд╕реНрддрд╛рд╡реЗрдЬ рдХрд╛ рдЕрдзреНрдпрдпрди рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рдореБрдЭреЗ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдЗрд╕ рдмрд╛рдд рдХрд╛ рдПрд╣рд╕рд╛рд╕ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдкреНрд░реЗрд░рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рдФрд░ рджреЛ рдмрд╛рд░ рд╕реЛрдЪрдиреЗ рдХреЗ рдмрд┐рдирд╛, рдореИрдВ рдЦреБрдж рдХреЛ рд╢реЛ рдореЗрдВ рд▓реЗ рдЧрдпрд╛ред

рдХрд╣рд╛рдиреА


рдореБрдЭреЗ рдХреНрд╖рдорд╛ рдХрд░реЗрдВ, рдЬреЛ рд▓реЛрдЧ рдЬрд╛рдирдХрд╛рд░ рд╣реИрдВ, рд▓реЗрдХрд┐рди рд╕реНрдкрд╖реНрдЯрддрд╛ рдХреЗ рд▓рд┐рдП, рдореИрдВ рдлрд┐рд░ рднреА рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ рдШрдЯрдирд╛ рдХреЗ рднреМрддрд┐рдХреА рдХрд╛ рд╡рд░реНрдгрди рдХрд░реВрдВрдЧрд╛ред
рддреЛ, NMEA рдорд╛рдирдХ рдХрд╛ рд╕рдВрджреЗрд╢, рдорд╛рдирдХ рдореЗрдВ рд╣реА "рд╡рд╛рдХреНрдп" рдХрд╣рд▓рд╛рддрд╛ рд╣реИ, рдЬреЛ рдЗрди "рд╡рд╛рдХреНрдпреЛрдВ" "рдмреЛрд▓рддрд╛ рд╣реИ" - "рдмрд╛рдд рдХрд░рдиреЗ рд╡рд╛рд▓рд╛" рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, NMEA рдХреЗ рднреАрддрд░ рдПрдХ GPS рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдореЗрдВ рдкрд╣рдЪрд╛рдирдХрд░реНрддрд╛ "GP" рд╣реИ, рдФрд░ рдЪреЗрдмрд░реНрд▓рд┐рди рдХрд╛ рд╣рдорд╛рд░рд╛ рдЙрддреНрддрд░ "GL" рд╣реИред

рдореМрдЬреВрджрд╛ рд╕рдорд╛рдзрд╛рдиреЛрдВ рдиреЗ рдпрд╛ рддреЛ рдХреЗрд╡рд▓ рдЗрди рджреЛ рдкреНрд░рдХрд╛рд░ рдХреЗ рдЙрдкрдХрд░рдгреЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд┐рдпрд╛, рдФрд░ рд╕рдмрд╕реЗ рдЕрдЪреНрдЫреА рд╕реНрдерд┐рддрд┐ рдореЗрдВ рд╡реЗ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдирд┐рд░реНрдорд╛рддрд╛рдУрдВ (рдЬрд░реНрдорд┐рди, рдпреВрдмреАрдПрд▓рдУрдХреНрд╕, рдЖрджрд┐) рдЯреАрдо рд░рд┐рд╕реАрд╡рд░реНрд╕ рдХреЗ рд▓рд┐рдП рд╡рд┐рднрд┐рдиреНрди рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╕рдордЭ рдЧрдПред
рдФрд░ рдХреМрди рдЬрд╛рдирддрд╛ рд╣реИ, рдЕрдЪрд╛рдирдХ рдпрд╣ рдЬрд░реВрд░реА рд╣реЛрдЧрд╛ рдХрд┐ рд╡рд╣ рдкрд░рдорд╛рдгреБ рдШрдбрд╝реА (Talker: ZA) рд╕реЗ рдЖрдиреЗ рд╡рд╛рд▓реЗ рдбреЗрдЯрд╛ рдХреА рд╡реНрдпрд╛рдЦреНрдпрд╛ рдХрд░реЗ, рдпрд╛ рдЦреБрдж рдХреЛ Loran-C рд╕рд┐рд╕реНрдЯрдо (Talker: LC) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╕реНрдерд╛рди рджреЗрдВ, рд▓реЗрдХрд┐рди рдСрдЯреЛрдкрд╛рдпрд▓рдЯ (Talker: AG) рдХреЗ рд╕рд╛рде рдЪреИрдЯ рдХрд░рдиреЗ рдХреА рд╕рдВрднрд╛рд╡рдирд╛ рдХреЛ рдмрд┐рд▓реНрдХреБрд▓ рднреА рдЦрд╛рд░рд┐рдЬ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ!



рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдорд╛рдирдХ 34 рдкреНрд░рдХрд╛рд░ рдХреЗ рдЙрдкрдХрд░рдгреЛрдВ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рддрд╛ рд╣реИ рдЬреЛ рдмрд╛рдд рдХрд░рдиреЗ рд╡рд╛рд▓реЛрдВ рдХреЗ рд░реВрдк рдореЗрдВ рдХрд╛рд░реНрдп рдХрд░рддреЗ рд╣реИрдВ, рд▓рдЧрднрдЧ 74 рдкреНрд░рдХрд╛рд░ рдХреЗ рд╕рдВрджреЗрд╢ (рд╡рд╛рдХреНрдп), рдПрдХ рдорд╛рд▓рд┐рдХрд╛рдирд╛ рдХреЛрдб (Talker: P) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рд╕рдВрднрд╛рд╡рдирд╛ - рдбрд┐рд╡рд╛рдЗрд╕ рдирд┐рд░реНрдорд╛рддрд╛ рдХреЗ рд╡рд┐рд╡реЗрдХ рдкрд░ рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рдЖрджреЗрд╢ред рдФрд░ рдЗрд╕ рдкреВрд░реЗ рдХрд┐рдЪрди рдХреЛ рдПрдХ рд╣реА рдирд╛рдорд╕реНрдерд╛рди рдХреЗ рдиреАрдЪреЗ рд░рдЦрдирд╛ рдФрд░ рди рд░рдЦрдирд╛ рд╢рд░реНрдо рдХреА рдмрд╛рдд рд╣реЛрдЧреА!

рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рдореИрдВрдиреЗ рд╡рд╛рдВрдЫрд┐рдд рдкрд░рд┐рдгрд╛рдо рд╕реЗ рд╢реБрд░реБрдЖрдд рдХреАред рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк, рдХрд╛рд░реНрдп рд╕реЗрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ рддрд╛рдХрд┐ рдирд┐рдореНрди рдХреЛрдб рдХрд╛рдо рдХрд░реЗ:

NMEASentence parsedSentence = NMEAParser.Parse(sourceString); 


рдФрд░ рдЕрдзрд┐рдХ:

 string NMEASentenceString = NMEAParser.Build(parsedSentence); 


рдФрд░ рддрд╛рдХрд┐ NMEASentence рдХреЗ рдЕрдВрджрд░ рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИ:

 public sealed class NMEASentence { public TalkerIdentifiers TalkerID; public SentenceIdentifiers SentenceID; public object[] parameters; } 


рд╡реИрд╕реЗ, NMEA рд╡рд╛рдХреНрдп рдХреЗ рд╕рд╛рдорд╛рдиреНрдп рд░реВрдк рдореЗрдВ рдпрд╣ рд╣реИ:

$ <talker ID> <entence ID,> [рдкреИрд░рд╛рдореАрдЯрд░ 1], [рдкреИрд░рд╛рдореАрдЯрд░ 2], ... [<* рдЪреЗрдХрд╕рдо>] <CR> <LF>

рдпрд╣ рдПрдХ ASCII рд╕реНрдЯреНрд░рд┐рдВрдЧ рд╣реИ рдЬреЛ 82 рд╡рд░реНрдгреЛрдВ рд╕реЗ рдЕрдзрд┐рдХ рдирд╣реАрдВ рд╣реИ, рд╢реБрд░реБрдЖрдд рдореЗрдВ рдФрд░ рдЕрдВрдд рдореЗрдВ "$" рд╣реИред рдЗрд╕ рддрд░рд╣ рдХреЗ рдПрдХ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреЛ рднрд╛рдЧреЛрдВ рдореЗрдВ рдЫрд╛рдВрдЯрдиреЗ рдореЗрдВ рдХреЛрдИ рдХрдард┐рдирд╛рдИ рдирд╣реАрдВ рд╣реИ - рд╕рдм рдХреБрдЫ рд╕рд░рд▓ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреЗ рд╕рд╛рде рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ редplit () ;, рд╕рдорд╕реНрдпрд╛ рдпрд╣ рд╣реИ рдХрд┐ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐рдпреЛрдВ рдХреЛ рдХреИрд╕реЗ рдЬрд╛рдВрдЪреЗрдВ рдФрд░ рдкрд╛рд░реНрд╕ рдХрд░реЗрдВред
рдорд╛рдирдХ рдХрдИ рдмреБрдирд┐рдпрд╛рджреА рдкреНрд░рдХрд╛рд░ рдХреЗ рдбреЗрдЯрд╛ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рддрд╛ рд╣реИ, рдорд╛рдирдХ рдХреЗ рд▓рд┐рдП рдкреНрд░рд▓реЗрдЦрди рдореЗрдВ рд╡реЗ рдирд┐рдореНрдирд╛рдиреБрд╕рд╛рд░ рдЗрдВрдЧрд┐рдд рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ:

"X" рд╕рдВрдкреВрд░реНрдг рд╣реИ
"Xx" - рд╡рд╛рд╕реНрддрд╡рд┐рдХ
"рд╕реА - рд╕реА" рдПрдХ рд╕реНрдЯреНрд░рд┐рдВрдЧ рд╣реИ
рд╣ - рд╣реЗрдХреНрд╕рд╛рдбреЗрд╕рд┐рдорд▓
"Llll.ll" - рдЕрдХреНрд╖рд╛рдВрд╢
"рдпрдпрдпреНрдп.рдпреНрдп" - рджреЗрд╢рд╛рдВрддрд░
"рд╣реИрдореНрд╕рд╕реЗрд╕реН" - рд╕рдордп
"Ddmmyy" - рддрд╛рд░реАрдЦ
"рдП" рдПрдХ рдкреНрд░рддреАрдХ рд╣реИ

рдЕрднреА рднреА рдПрдХ рдЬрд╛рджреБрдИ рд╕реНрдЯреНрд░рд┐рдВрдЧ рд╣реИ "...", рдЬрд┐рд╕рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐ рдмрд╛рдж рдХреЗ рд╕рднреА рд╕рдВрджреЗрд╢ рдкреИрд░рд╛рдореАрдЯрд░ рдкрд┐рдЫрд▓реЗ рдПрдХ рдХреЗ рд╕рдорд╛рди рдкреНрд░рдХрд╛рд░ рдХреЗ рд╣реИрдВред

рдкрд╛рд░реНрд╕рд┐рдВрдЧ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╡рд┐рднрд┐рдиреНрди рд╡рд┐рдХрд▓реНрдкреЛрдВ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рдкреНрд░рддреНрдпреЗрдХ рдХрдорд╛рдВрдб рдХреЛ рдХреБрдЫ рдореВрд▓ рд╕реЗ рд╡рд┐рд░рд╛рд╕рдд рдореЗрдВ рд▓реЗрдиреЗ рдФрд░ рдкреНрд░рддреНрдпреЗрдХ рдХрдорд╛рдВрдб рдХреЗ рддрд░реНрдХ рдХреЛ рдЕрд▓рдЧ-рдЕрд▓рдЧ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдкреНрд░рддреНрдпреЗрдХ рдкреИрд░рд╛рдореАрдЯрд░ рдХреЛ рд╣реЗрдпреБрд░рд┐рд╕реНрдЯрд▓реА рдкрд╛рд░реНрд╕ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдПред

рд╕рдорд╛рдзрд╛рди рд╕рддрд╣ рдкрд░ рдирд┐рдХрд▓рд╛: рдПрдВрдЯреАрдкреИрд░реНрдЯрди рдореИрдЬрд┐рдХ рд╕реНрдЯреНрд░рд┐рдВрдЧреНрд╕ рд▓рд╛рдЧреВ рдХрд░реЗрдВ!

рдЪреВрдВрдХрд┐ рд╕рднреА рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдЗрд╕ рд░реВрдк рдореЗрдВ рд╕рдВрджреЗрд╢реЛрдВ рдХреЗ рдкреНрд░рд╛рд░реВрдк рдХрд╛ рд╡рд░реНрдгрди рдХрд░рддреЗ рд╣реИрдВ:

$ GPRMA, A, llll.ll, a, yyyyy.yy, a, xx, xx, xx, xx, xx, рдПрдХ <CR> <LF>

рдЗрд╕рд▓рд┐рдП рдЙрдиреНрд╣реЗрдВ рдХреЛрдб рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд┐рдпрд╛ рдЬрд╛рдП - рдПрдХ рд╣реА рд╕рдордп рдореЗрдВ рдирдП рд╕рдВрджреЗрд╢реЛрдВ рдХреЗ рд▓рд┐рдП рд╕рдорд░реНрдерди рдЬреЛрдбрд╝рдирд╛ рдмреЗрд╣рдж рд╕рд░рд▓ рд╣реИ:
1) рдореИрдиреБрдЕрд▓ рд╕реЗ рд╡рд┐рд╡рд░рдг рдХреА рдкреНрд░рддрд┐рд▓рд┐рдкрд┐ рдмрдирд╛рдПрдБ
2) рдХреЛрдб рдореЗрдВ рдбрд╛рд▓реЗрдВ
рей) ???
4) рд▓рд╛рдн

рддреАрди рдкреНрд░рд╢реНрдиреЛрдВ рдХреЗ рддрд╣рдд, рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╡рд┐рдЪрд╛рд░ред
рд╕рднреА рд╕рдВрджреЗрд╢ рд╡рд┐рд╡рд░рдг рд╢рдмреНрджрдХреЛрд╢ рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ, рдЬрд╣рд╛рдВ рдХреБрдВрдЬреА рд╕рдВрджреЗрд╢ рдкрд╣рдЪрд╛рдирдХрд░реНрддрд╛ рд╣реИ, рдПрдирдо:

 public enum SentencesIdentifiers { AAM, ALM, APA, ... } 


рдФрд░ рдЕрд░реНрде, рдореИрдиреБрдЕрд▓ рд╕реЗ рд╡рд╛рдВрдЫрд┐рдд "рдЬрд╛рджреВ рд▓рд╛рдЗрди"ред рдпрд╣ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИ:

 public static Dictionary<SentenceIdentifiers, string> SentencesFormats = new Dictionary<SentenceIdentifiers, string>() { { SentenceIdentifiers.AAM, "A,A,xx,N,c--c" }, { SentenceIdentifiers.ALM, "xx,xx,xx,xx,hh,hhhh,hh,hhhh,hhhhhh,hhhhhh,hhhhhh,hhhhhh,hhh,hhh" }, { SentenceIdentifiers.APB, "A,A,xx,a,N,A,A,xx,a,c--c,xx,a,xx,a" }, ... 


рдЕрдм рдЗрд╕рдХрд╛ рдХреНрдпрд╛ рдХрд░реЗрдВ?
рдЖрдЙрдЯрдкреБрдЯ рдпрд╣ рд╣реИ: рд╕рдВрджреЗрд╢ рдкреИрд░рд╛рдореАрдЯрд░ рдФрд░ рдЗрд╕рдХреЗ рдкрд╣рдЪрд╛рдирдХрд░реНрддрд╛ рдХрд╛ рдЪрдпрди рдХрд░рдирд╛, рд╕реЗрдВрдЯреЗрдВрд╕рдлреЙрд░реНрдореЗрдЯреНрд╕ рдбрд┐рдХреНрд╢рдирд░реА рд╕реЗ рдЗрд╕рдХрд╛ рдкреНрд░рд╛рд░реВрдк рд╡рд┐рд╡рд░рдг рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдирд╛, рдЬреЛ рддрдм рдШрдЯрдХреЛрдВ рдореЗрдВ рд╡рд┐рднрд╛рдЬрд┐рдд рд╣реЛрддрд╛ рд╣реИ, рдФрд░ рдлрд┐рд░ рдХреБрдЫ рд╡рд┐рдзрд┐ рдХреЗ рдЗрдирдкреБрдЯ рдХреЛ рдЦрд┐рд▓рд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ:

 private static object ParseToken(string token, string formatter) { ??? } 


рдкреВрд░реЗ рд╕рд┐рд╕реНрдЯрдо рдХрд╛ рд╕рдмрд╕реЗ рдЕрдЬреАрдм рд╣рд┐рд╕реНрд╕рд╛, рд╕рднреА рдХрд╛рдиреВрдиреЛрдВ рдФрд░ рд╡рд░реНрдгрдорд╛рд▓рд╛рдУрдВ рджреНрд╡рд╛рд░рд╛, рдЗрди рддреАрди рд╕рд╡рд╛рд▓реЛрдВ рдХреЗ рддрд╣рдд, рдХреБрдЫ рдкреНрд░рдХрд╛рд░ рдХреЗ рд▓рдВрдмреЗ рд╕реНрд╡рд┐рдЪ рдХреЗ рд░реВрдк рдореЗрдВ рддрдп рд╣реЛрдЧрд╛:

 switch (formatter) { case "xx": { return double.Parse(token, CultureInfo.Invariant); } ... default: return token; //    ,  ,     } 


рдЗрд╕ рдЕрдбрд╝рдЪрди рдкрд░, рд╕рд┐рд╕реНрдЯрдо рдХрд╛ рд╕рд╛рд░рд╛ рд▓рдЪреАрд▓рд╛рдкрди рдЦреЛ рдЬрд╛рдПрдЧрд╛, рдЬреЛ рдЕрдЪреНрдЫрд╛ рдирд╣реАрдВ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдРрд╕рд╛ рдХрд░рдирд╛ рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рд╣реИ:

 return parsers[format](token); 


рдирд╛рдо рдХреЗ рддрд╣рдд рдкрд╛рд░реНрд╕рд░реНрд╕ рд╕рд┐рд░реНрдл рдЪреАрдиреА рд╣реА рдЫреБрдкрд╛ рд░рд╣рд╛ рд╣реИ:

 private static Dictionary<string, Func<string,object>> parsers = new Dictionary<string, Func<string,object>>() { { "x", x => int.Parse(x) }, ... { "hh", x => Convert.ToByte(x, 16) }, ... { "xx", x => double.Parse(x, CultureInfo.InvariantCulture) }, { "c--c", x => x }, { "llll.ll", x => ParseLatitude(x) }, { "yyyyy.yy", x => ParseLongitude(x) }, { "hhmmss.ss", x => ParseCommonTime(x) }, { "ddmmyy", x => ParseCommonDate(x) }, ... }; 


рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рдпрд╣ рдПрдХ рд╢рдмреНрджрдХреЛрд╢ рд╣реИ, рдЬрд╣рд╛рдВ рдХреБрдВрдЬреА рдПрдХ рдкреНрд░рд╛рд░реВрдкрдг рд╕реНрдЯреНрд░рд┐рдВрдЧ рд╣реИ, рдФрд░ рдорд╛рди рдПрдХ рдлрд╝рдВрдХреНрд╢рди рд╣реИ рдЬреЛ рдкреИрд░рд╛рдореАрдЯрд░ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреЛ рдСрдмреНрдЬреЗрдХреНрдЯ рдореЗрдВ рдмрджрд▓ рджреЗрддрд╛ рд╣реИред

рдЗрд╕ рддрд░рд╣ рдХреА рдбрд┐рдХреНрд╢рдирд░реА рдХреЛ рдирдИ рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде рдХреНрд░рдордмрджреНрдз рдФрд░ рдЖрд╕рд╛рдиреА рд╕реЗ рд╡рд┐рд╕реНрддрд╛рд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рд╕рд╛рде рд╣реА рд╕рдорд░реНрдерд┐рдд рд╕рдВрджреЗрд╢реЛрдВ рдХреА рдПрдХ рд╕реВрдЪреА рднреАред

рдЙрдкрд░реЛрдХреНрдд рдкрд░рд┐рджреГрд╢реНрдп рд╕реЗ рдорд╛рдореВрд▓реА рд╡рд┐рдЪрд▓рди рдХреЗ рд╕рд╛рде рд╕реНрдерд┐рддрд┐ рд╕реНрд╡рд╛рдорд┐рддреНрд╡ рд╕рдВрджреЗрд╢реЛрдВ рдХреЗ рд╕рд╛рде рд╕рдорд╛рди рд╣реИред

рдкреЛрд╕реНрдЯрдлрд╝рд┐рдХреНрд╕


рдКрдкрд░ рд╡рд░реНрдгрд┐рдд рд╡рд┐рдЪрд╛рд░ рдкреВрд░реА рддрд░рд╣ рд╕реЗ NMEAParser рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдореЗрдВ рд▓рд╛рдЧреВ рдХрд┐рдП рдЧрдП рдереЗред
рдирд┐рд░реНрдорд╛рддрд╛ рдХреЛрдб рдХреА рдПрдХ рдкреВрд░реА рд╕реВрдЪреА, 222 рдПрдВрдХрд░ рдкреЙрдЗрдВрдЯ (рдбреЗрдЯрд╛, рдбреАрдУрдкреА) рдХреА рдПрдХ рд╕реВрдЪреА рднреА рд╣реИред

рдореИрдВ рд╡рд┐рд╖рдп рдХреЗ рд▓рд┐рдП рдкреБрд╕реНрддрдХрд╛рд▓рдп рд╕реНрд░реЛрдд рдХреЛрдб рдХреЗ рд╕рд╛рде рдПрдХ рд╕рдВрдЧреНрд░рд╣ рд╕рдВрд▓рдЧреНрди рдХрд░рдирд╛ рдЪрд╛рд╣реВрдВрдЧрд╛, рд▓реЗрдХрд┐рди рдЪреВрдВрдХрд┐ рдРрд╕рд╛ рдХреЛрдИ рдЕрд╡рд╕рд░ рдирд╣реАрдВ рд╣реИ, рдореБрдЭреЗ рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рдкреАрдЖрд░ рдХреЗ рд▓рд┐рдП рдирд╣реАрдВ, рдХреЛрдбрдкреНрд░реЛрдЬреЗрдХреНрдЯ рдкрд░ рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рд▓реЗрдЦ рдХреЗ рд▓рд┐рдП рдПрдХ рд▓рд┐рдВрдХ рдХреЛ рдорд╛рдл рдХрд░ рджреЗрдВ - рд▓реЗрдХрд┐рди рдореИрдВрдиреЗ рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдХреЛрд╢рд┐рд╢ рдХреА рдХрд┐ рдХрд╛рдо рдмрд░реНрдмрд╛рдж рдирд╣реАрдВ рд╣реБрдЖред

рдореБрдЭреЗ рдЖрд▓реЛрдЪрдирд╛, рдЗрдЪреНрдЫрд╛рдУрдВ рдФрд░ рд╕реБрдЭрд╛рд╡реЛрдВ рдХреЛ рд╕реБрдирдХрд░ рдЦреБрд╢реА рд╣реЛрдЧреАред

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~
рдЕрджреНрдпрддрди: рдЬрд╛рд╡рд╛ рдкреЛрд░реНрдЯ рдирд┐рд░реНрджрд┐рд╖реНрдЯ CodeProject рд▓рд┐рдВрдХ рдореЗрдВ рджрд┐рдЦрд╛рдИ рджреЗрддрд╛ рд╣реИ

Source: https://habr.com/ru/post/In132493/


All Articles