凯立德K码转经纬度

本文详细介绍了如何将凯立德导航系统的K码转换为经纬度坐标,涉及K码的象限划分、参考点及转换方法。通过C++和Java代码示例,展示了从K码到经纬度的具体计算过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

公司web应用要需要把 K 码转成经纬度,网上搜了一下,这方面的资料不多,多数介绍都不全面。根据网上的说法,自己有琢磨了一天,终于搞清了K码原委,基本原理叙述如下。


K码能标识的范围为 东经 70-140度,北纬 5-75度这块区域, 以这块区域的中心点东经105 北纬40 (105,40)为对称点,把这块区域划分为四个象限,分别标示为 5, 6 ,7 ,8 象限, 每个象限都有自己的参考点,5象限的参考点是(105,40),6象限的参考点是(70,40),7象限的参考点是(70,5),8象限的参考点是(105,5)。

K码计算方法如下, 把每个位置的经纬度和该位置所在的象限的参考点的经纬度分别相减,结果两个差值肯定不小于0,把经度相减的差值乘以3600再乘以10(得到的结果以0.1秒为单位),把该结果换算成凯立德自定义的34进制(特别注意,凯立德34进制是 低位在前,高位在后,和十进制高位在前低位在后相反),换算的结果是4位的34进制数(不足四维补0)。下面K码转 经纬度的代码,有C++ 的,有java的


kcode.h


#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <assert.h>


#define IS_NUM(al) al != 'l' && al != 'o' && ( (al >= '0' && al <= '9') || (al >= 'a' && al <= 'z'))


static char maps[34] = {
'0','1','2','3','4',
'5','6','7','8','9',
'a','b','c','d','e',
'f','g','h','i','j',
'k','m','n','p','q',
'r','s','t','u','v',
'w','x','y','z'
};


static short r_maps[123];


void init_r_maps();


int convert34to10(const char* num34, int len);


int convert(char* num34, int len, float& ltu, float& lat);


int pow34(int i);


kcode.cpp

#include "kcode.h"


int main(int argc, char **argv)
{
if(argc != 2)
{
printf("Usage: %s <KCode>\n", argv[0]);
return 0;
}
init_r_maps();


float lu,la;
convert((char*)argv[1],9,lu,la);
printf("%f,%f\n",lu,la);


return 0;
}




int convert34to10(const char* num34, int len)
{
int num10 = 0;
for(int i = 0; i < len; ++i)
{
assert(IS_NUM(num34[i]));
num10 += r_maps[ num34[i] ] * pow34(i);
}


return num10;
}


int convert(char* num34, int

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值