C 简单实现LBS基站定位

这篇博客介绍了如何使用C语言实现基站定位,通过访问Google服务器获取经纬度信息。基站定位基于LAI和CID,内容包括理解基站信息组成、构造请求发送到Google服务器以及解析返回的经纬度数据。代码简单易移植,适用于多种平台。

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

    目前移动设备定位基本使用GPS的定位方式,使用基站定位的比较少,但是有些设备对定位要求不是很高或者需要节省掉gps芯片带来的成本,那么就可以考虑使用基站定位了。

     基站定位的原理很简单:就是访问Google服务器,告诉它我们的基站信息,服务器就会返回经纬度信息实现定位。那么我们只要知道基站信息是由什么组成的、如何组织Google服务器需要的基站信息,然后发送给Google服务器就好了。

    基站信息简单的说是由LAI(Location Area Identification) + CID(Cell Identity)组成的, LAI由(MCC +MNC+LAC)组成其中MCC全名Mobile Country Code,移动国家码,三位数,如中国为460。MNC全名Mobile Network Code,移动网络号,两位数。LAC全名Location Area Code,是一个2个字节长的十六进制BCD码(不包括0000和FFFE)。Cell Identity 小区码,同样是2个字节长的十六进制BCD码。我们只需要知道LAC和CID就可以完成定位。

    组消息发送给Google服务器时应注意要使用POST的方式向www.google.com/glm/mmap 提交请求内容,内容类型必须是Binary,其次内容格式是必须按照google规定的方式填充没什么好说的,注意网络字节序即可。

    在获取Google服务器返回的内容时,offset=7后的4个字节是latitude,offset=11后4个字节是longitude。

    下面是用C语言实现只依赖于C库很方便移植,本人在ARM平台及X86 linux下均测可用,同样可用于Android JNI。

/*
 * Copyright(c) 2010-2015 Beck. All rights reserved.
 *
 * Function : get latitude and longitude using cell identity and location area code
 * Author   : Beck <becklc@163.com>
 *
*/

#include <stdio.h>
#include <string.h>
#include <netdb.h>
#include <errno.h>
#include <sys/socket.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值