为Windows Mobile设备创建位置感知的应用程序
2011-01-06 10:59:01 来源:WEB开发网{
IntPtr hRIL = IntPtr.Zero;
IntPtr hResult = IntPtr.Zero;
hResult = RIL.RIL_Initialize(1,
new RIL.RILRESULTCALLBACK(CellTowerData),
null, 0, 0, out hRIL);
if (hResult != IntPtr.Zero)
return null;
hResult = RIL.RIL_GetCellTowerInfo(hRIL);
dataReceived.WaitOne();
RIL.RIL_Deinitialize(hRIL);
CellTower ct = new CellTower();
ct.LAC = (int)towerInfo.dwLocationAreaCode;
ct.MCC = (int)towerInfo.dwMobileCountryCode;
ct.MNC = (int)towerInfo.dwMobileNetworkCode;
ct.CellId = (int)towerInfo.dwCellID;
return ct;
}
private static void CellTowerData(uint dwCode,
IntPtr hrCmdID, IntPtr lpData, uint cbData, uint dwParam)
{
towerInfo = new RIL.RILCELLTOWERINFO();
Marshal.PtrToStructure(lpData, (object)towerInfo);
dataReceived.Set();
}
}
为了取得你所连接的基站位置,你还需要一些其他的附加功能,如数据库或Web服务以查询基站的坐标。有一些商业的和一些免费的Web服务可用于取得蜂窝基站的位置信息。这篇文章使用了两个托管与Yahoo的Web服务来获取基站的经纬度信息。Yahoo有一个极其易用的Web服务可以取得蜂窝基站的邮政编码。有了蜂窝基站的邮政编码,你可以传递这个邮编给另一个Yahoo的Web服务以转化一个邮编为经纬度。要获得基站位置,请参阅Yahoo网站。传递从RIL_GetCellTowerInfo 得到的国家代码(dwMobileCountryCode)、网络代码(dwMobileNetworkCode)、地区代码(dwLocationAreaCode)和基站ID(dwCellID),你就可以得到一个包含基站位置的邮政编码。你可以传递这个邮编给另一个Yahoo Web 服务,就可以取得你当前连接的蜂窝基站的经纬度。要使用这些Web服务,你必须注册并获取个Application ID。获得一个Application Id是很容易的。下面的屏幕展示了通过不同的Web服务取得的基站位置。
更多精彩
赞助商链接