我想使用 wi-fi 查找距离并在 iPhone 的地图上绘制标记。
所以我能得到任何想法或代码吗?
在第一次阅读您的问题时,我假设您指的是到接入点的距离。在写了一堆关于那个之后,我意识到你可能意味着别的东西。如果这就是你的意思,请继续阅读......
鉴于您的配置:
这是无法做到的。即使您在PHY级别工作,这也是一个不可能解决的问题。为了使其更可行,您需要对接收器相对于两个(但最好更多)基站的位置进行三角测量。即使这样,这仍然是一个难题。RF 波以光速传播,因此使用中继技术来测量往返信号传播延迟不会提供良好的精度(接收器必须运行得非常快,然后就会出现多路径问题......)。同样,这一切都假设您基本上是在构建自己的 RF 硬件,显然您不会为 iPhone 做这件事。
追踪基站位置的最佳选择是在更改手机位置时记录 WiFi 信号强度。通过“改变位置”,您基本上必须扫过该区域。通过一些良好的启发式方法和处理与距离无关的信号衰减的鲁棒性,您可以获得不错的准确度(可能在 10 米左右)。
仅使用网卡的信号强度无法获得到接入点的准确距离(以米或英尺为单位)。
使用 Apple 的 CoreLocation 框架,它可以为您提供您所在位置的坐标。我无法链接到它,因为我无权访问 iPhone 文档。
在这里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));
}
可能您将能够使用 3 个或更多接入点获得粗略的距离。现在有一种技术可以使用 3 个 GSM 移动基站来获取到移动用户的距离。
使用接收到的功率,您可以使用射频传播模型计算从发射器到接收器的距离。但是,听起来您想要的是位置,而不仅仅是距离。
自由空间路径损失模型:
你想在这里达到什么目的?
如果您尝试使用 Iphone 在地图上绘制您的位置,那么此功能已经是 Iphone 的一部分,它具有 GPS 接收器,并且可以“开箱即用”。
如果您尝试使用 wifi 查找笔记本电脑的位置并将该位置发送到 iphone,那么您将遇到一个相当困难的问题,如果没有大量工作,这可能是无法解决的。
有一些设施可以让您从 GSM 桅杆上对您的位置进行三角测量,但这些设施位于已知纬度/经度的固定位置。Wifi 接入点没有地理位置数据库,因此从这些位置进行三角测量将非常困难/不可能。
您可以使用诸如此类的 3rd 方服务来使用 GSM 跟踪您的位置,但是这些非常不准确,除非您在大城市并且需要您在所跟踪的任何内容中都有 GSM 调制解调器。