如何在移动设备上室内使用GPS?

时间:2010-01-10 09:59:09

标签: java-me gps

我是移动应用程序的新手。基本上我想在室内获取用户的GPS坐标。 我在室外检测移动设备没有问题,只有在室内时才会给我带来问题。 我试过设定准确度,但没有用。

有解决方案吗?

这是我的代码:

new Thread()
{

    public void run()
    {
        try
        {
            Criteria cr= new Criteria();
            cr.setHorizontalAccuracy(1000);
            LocationProvider lp= LocationProvider.getInstance(cr);

            Location l = lp.getLocation(60);
            Coordinates c = l.getQualifiedCoordinates();

            if(c != null )
            {
                lat = c.getLatitude();
                lon = c.getLongitude();
            }
        }
        catch(Exception e)
        {
            System.out.println("Error");
        }
    }
}.start();

4 个答案:

答案 0 :(得分:21)

GPS基于从发射卫星到接收器的距离估计。您的GPS接收器(通常)需要来自至少4颗卫星的信号才能计算其位置。在开阔天空条件下L1频带的信号电平大约达到-130dBm。商用接收机,例如集成在移动电话中的接收机,能够跟踪低至-160dBm的卫星。在此阈值下,接收器无法使用该信号。这30dB的余量允许从诸如树叶,玻璃窗,甚至光墙等障碍物中进行一些衰减,但是几个建筑物楼层几乎可以完全屏蔽来自几乎所有方向的信号,从而使GPS完全无法使用。即使衰减允许接收器使用信号来计算其位置,所达到的精度可能还不足以满足您的目标应用(信号衰减会降低精度)。

另一方面,Skyhook(在许多移动平台上实施)等Wi-Fi定位系统通常能够计算建筑物内部的位置,但这种方法面临两个主要缺点:

  • 数据库覆盖范围没有 包括室内场地(AFAIK),所以 返回的位置非常近似 并且无法用于任何应用程序。
  • 基于使用信号电平对热点进行距离估计的Wi-Fi定位算法受室内障碍物(人,家具等)的影响很大。这会降低定位精度。

还有第三种选择:从最后已知的GPS位置整合移动电话中MEMS chpset的加速度。这可能在某些条件下有效......

总之,手机中的室内定位没有现成的解决方案,但有些正在研究这个主题(例如http://www.polestar.eu/en/node/111/y

编辑:我忘了提到基于蜂窝塔的定位,只要手机对蜂窝网络进行了有效的数据校正,就可以使用。这种方法的准确性足以给出移动电话所在的城市。

答案 1 :(得分:7)

不幸的是,GPS从未打算在室内工作。实际上,大多数消费者GPS传感器除非能够清晰地看到天空,否则无法获得有效的GPS定位。即使是高层建筑和茂密的树木也可能造成重大问题。

答案 2 :(得分:2)

有无线接入点的数据库,因此您可以从范围内的接入点获得一个非常好的主意:http://gadgets.boingboing.net/2008/10/22/google-gears-adds-wi.html http://www.skyhookwireless.com/

答案 3 :(得分:2)

我认为JSR 179支持开箱即用的基于网络的定位,因为Google Maps是一个具有此功能的Java应用程序。但根据the Sony Ericsson developer forum和诺基亚开发人员论坛上的一些帖子,看起来最好的选择是[{3}},并使用look up the cell id yourself via system properties之类的查询服务。

在Nokias上,似乎可以直接通过JSR 179进行基于网络的定位工作,尽管它涉及改变手机设置。

设置

  

菜单 - >设置 - >手机设置 - >常规 - >定位 - >定位服务器

到supl.nokia.com(粘贴自opencellid.org)。这将启用基于网络的定位。有关可用的位置方法,请参阅nokia dev forums