![](/img/trans.png)
[英]How to convert Longitude/ Latitude and zoom level to Google coordinates in C#?
[英]Latitude/Longitude coordinates to BCD in C#
我正在编写C#代码以在GPS跟踪器(Sinowell G102)上对地理围栏进行编程。 地理围栏是矩形的。 我基本上必须获取左上角坐标和右下角坐标,并将其编程到跟踪器中。 现在,跟踪器希望这些坐标为BCD格式(二进制编码的十进制)。 每个坐标为4个字节长。 现在,我想出了如何将正纬度或经度坐标转换为BCD-根据跟踪器的协议手册,坐标如下:
22°33.995′ (即北22度,东33.995分钟)
变为四个字节02 23 39 95
这很简单。 但是,我的问题是,我不知道如何解决南半球的负坐标(例如我们在南非遇到的-25°33.995′)
我设法与该跟踪器的制造商取得了联系,但不幸的是这是一家中国公司,他们的英语不是很好。 但是,他们确实向我发送了以下图片:
不幸的是,我不完全理解此代码。 我将不胜感激任何帮助....谢谢。
if (val&0x80000000)
如果设置了高位,则此if语句为true。 二进制0x80000000是1,后跟全零。
val&0x7FFFFFFF
该语句会将高位设置为零。
0-(val&0x7FFFFFFF)
将高位设置为零后,该值取反。
因此,将其反转,您将需要使用现有算法将绝对值( abs(raw)
)转换为二进制。 假设原始值在一个名为raw
的变量中,而二进制在一个名为binary
的变量中。 如果raw为负,则需要在binary
上设置高位。 像这样:
if (raw < 0) {
binary = binary | 0x80000000;
}
&和| 是按位运算。 对参数中的每个位的应用和/或逻辑。 因此0x1&0x0 = 0、0x1&0x1 = 1、0x0 | 0x0 = 0x0和0x0 | 0x1 = 0x1。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.