如何使用Wi-Fi获得距离

时间:2009-03-26 07:09:36

标签: iphone objective-c wifi

我希望使用Wi-Fi找到距离并在iPhone上绘制地图上的标记。

那么我可以得到任何想法或代码吗?

7 个答案:

答案 0 :(得分:10)

在第一次阅读您的问题时,我假设您指的是到接入点的距离。写了一堆关于那个,我意识到你可能意味着别的东西。如果这是你的意思,继续阅读......

鉴于您的配置:

  • 单个固定接收器(您的手机无需修复,但如果您正在寻找即时测量,则可以有效修复)
  • 单个固定基站(接入点)
  • 接收器上的全向天线
  • 802.11 b / g协议

这不可能。即使您在PHY级别工作,这也是一个不可能解决的问题。为了使其更加可行,您需要triangulate接收器相对于两个(但最好是更多)基​​站的位置。即使然后这仍然是一个难题。 RF波以光速传播,因此使用中继技术测量往返信号传播延迟将无法提供良好的准确性(接收器必须极快地运行,然后出现multipath个问题......)。再说一遍,假设您基本上构建自己的RF硬件,显然您不打算为iPhone做这件事。

追踪基站位置的最佳选择是在更改手机位置时记录WiFi信号强度。通过'改变位置',你基本上必须扫过该区域。通过一些良好的启发式算法和处理非距离相关信号衰减的鲁棒性,您可以获得不错的精度(可能大约10米)。

答案 1 :(得分:2)

仅使用网卡的信号强度,无法获得接入点的准确距离(以米或英尺为单位)。

答案 2 :(得分:1)

使用Apple的CoreLocation框架,它可以为您提供您所在位置的坐标。我无法链接到它,因为我无法访问iPhone文档。

答案 3 :(得分:1)

在这里http://www.mathforum.com/library/drmath/view/51711.html,您可以找到用于计算GPS中两个位置之间距离的公式。这是我在此创建的C#代码(它缩放到公制系统)

    private double Distance(GpsPosition p1, GpsPosition p2)
    {
        // http://www.mathforum.com/library/drmath/view/51711.html

        double A = p1.Latitude / 57.29577951;
        double B = p1.Longitude / 57.29577951;
        double C = p2.Latitude / 57.29577951;
        double D = p2.Longitude / 57.29577951;

        if((A==C) && (B==D))
            return 0;

        if((Math.Sin(A)*Math.Sin(C)+Math.Cos(A)*Math.Cos(C)*Math.Cos(B-D)) > 1.0)
            return 6372.72 * Math.Acos(1);
        else
            return 6372.72 * Math.Acos(Math.Sin(A) * Math.Sin(C) + Math.Cos(A) * Math.Cos(C) * Math.Cos(B - D));
    }

答案 4 :(得分:0)

可能您可以使用3个或更多接入点获得粗略距离。现在有一种技术可以使用3个GSM移动基站获得与移动用户的距离。

答案 5 :(得分:0)

使用接收到的功率,您可以使用从发射器到接收器的射频传播模型来计算距离。但是,听起来你想要的位置,而不仅仅是距离。

自由空间路径损耗模型:

http://en.wikipedia.org/wiki/Free-space_path_loss

答案 6 :(得分:0)

你想在这里实现什么目标?

如果您尝试使用Iphone在地图上绘制您的位置,那么此功能已经是具有GPS接收器的Iphone的一部分,并将“开箱即用”。

如果您正在尝试使用wifi查找笔记本电脑的位置并将该位置发送到iphone,那么您有一个很难解决的问题,如果没有大量工作可能无法实现。

有一些设施可以让你从GSM桅杆上对你的位置进行三角测量,但这些设备处于固定位置,知道纬度/长度。无线接入点没有地理位置数据库,因此很难/不可能进行三角测量。

您可以使用第三方服务(例如this)使用GSM跟踪您的位置,但这些服务非常不准确,除非您在大城市并且要求您拥有GSM调制解调器,无论您正在跟踪什么。