在网上收集了一部分关于使用Google API进行手机定位的资料和大家分享
在網(wǎng)上收集了一部分關(guān)于使用Google API進行手機定位的資料和大家分享:
關(guān)于基站定位方面的介紹:
http://tech.c114.net/164/a140837.html
開發(fā)方面的幫助:
http://www.dotblogs.com.tw/kylin/archive/2009/08/09/9964.aspx
http://code.google.com/intl/zh-C ... ntation/staticmaps/
http://www.codeproject.com/KB/mobile/DeepCast.aspx
http://heresy.spaces.live.com/bl ... .0&sa=334916734
以上方法的流程一般如下:
通過RIL獲取CellTowerInfo----->通過google api獲取經(jīng)緯度------->轉(zhuǎn)換成54或是地方坐標后在地圖上顯示位置
本人整理了代碼進行了測試,效果不是很好,使用的多普達S700,windows mobile 專業(yè)版 6.1 ,地點在上海,
定位結(jié)果如下
CELLID=1346
LAC=43060
MCC=460
MNC=0
從google獲取的坐標31.109,121.368,定位位置到了莘西路上
經(jīng)過計算與實際位置直線距離在8KM左右
而通過Google Maps在手機上測試當前位置提示精度為18000m,呵呵,這個精度恐怕只能確定在那個城市了,個人認為:原因可能有以下幾點:
1.周圍基站分布較少或是真的很遠,上海的移動2G基站每年的數(shù)量都在減少,有時在公司的時候都會出現(xiàn)盲區(qū),信號不是很好
2.直接通過cellid,lac,mcc,mnc等信息在Google上獲取的經(jīng)緯度沒有經(jīng)過誤差分析,沒有太大的精度可言
3.繞開中國移動運營商進行手機基站定位比較難,人家要靠這個賺錢的,當然也牽涉到國家安全,呵呵
4.RIL相關(guān)函數(shù)嚴格來說在Windows Mobile 上面都不是必須被實現(xiàn)的
下面是我的代碼和注釋,有些地方還是不能理解:
??1? ? public class RIL
??2? ???{
??3? ?? ?? ?//CellTower信息
??4? ?? ?? ?private static string celltowerinfo = "";
??5
??6? ?? ?? ?//通過RIL獲取CellID
??7? ?? ?? ?public static string GetCellTowerInfo()
??8? ?? ?? ?{
??9? ?? ?? ?? ? //初始化句柄
10? ?? ?? ?? ? IntPtr hRil = IntPtr.Zero;
11? ?? ?? ?? ? IntPtr hRes = IntPtr.Zero;
12
13? ?? ?? ?? ? //初始化結(jié)果變量
14? ?? ?? ?? ? celltowerinfo = "";
15
16? ?? ?? ?? ? //為一個Client初始化RIL? ?
17? ?? ?? ?? ? hRes = RIL_Initialize(1,
18? ?? ?? ?? ?? ?? ?? ?? ?? ?? ???new RILRESULTCALLBACK(rilResultCallBack),
19? ?? ?? ?? ?? ?? ?? ?? ?? ?? ???null,
20? ?? ?? ?? ?? ?? ?? ?? ?? ?? ???0,
21? ?? ?? ?? ?? ?? ?? ?? ?? ?? ???0,
22? ?? ?? ?? ?? ?? ?? ?? ?? ?? ???out hRil);
23
24? ?? ?? ?? ? if (hRes != IntPtr.Zero)
25? ?? ?? ?? ? {
26? ?? ?? ?? ?? ???return "不能初始化RIL";
27? ?? ?? ?? ? }
28
29? ?? ?? ?? ? //獲取當前Phone使用的基站信息
30? ?? ?? ?? ? hRes = RIL_GetCellTowerInfo(hRil);
31
32? ?? ?? ?? ? waithandle.WaitOne();
33
34? ?? ?? ?? ? //解除RIL
35? ?? ?? ?? ? RIL_Deinitialize(hRil);
36
37? ?? ?? ?? ? return celltowerinfo;
38
39
40? ?? ?? ?}
41
42? ?? ?? ?private static AutoResetEvent waithandle = new AutoResetEvent(false);
43
44? ?? ?? ?public static void rilResultCallBack(uint dwCode,
45? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ? IntPtr hrCmdID,
46? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ? IntPtr lpData,
47? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ? uint cdData,
48? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ? uint dwParam)
49? ?? ?? ?{
50? ?? ?? ?? ? RILCELLTOWERINFO rilCellTowerInfo = new RILCELLTOWERINFO();
51
52? ?? ?? ?? ? //將數(shù)據(jù)lpData從非托管內(nèi)存塊封送到rilCellTowerInfo托管對象中
53? ?? ?? ?? ? Marshal.PtrToStructure(lpData, rilCellTowerInfo);
54
55? ?? ?? ?? ? celltowerinfo = rilCellTowerInfo.dwCellID + "-" + rilCellTowerInfo.dwLocationAreaCode + "-" +
56? ?? ?? ?? ?? ?? ?? ?? ?? ???rilCellTowerInfo.dwMobileCountryCode+"-"+rilCellTowerInfo.dwMobileNetworkCode;
57? ?? ?? ?? ?? ?
58? ?? ?? ?? ? //將事件狀態(tài)設(shè)置為終止狀態(tài),允許一個或多個等待線程繼續(xù)
59? ?? ?? ?? ? waithandle.Set();
60? ?? ?? ?}
61? ?? ?? ?
62? ?? ?? ?public delegate void RILRESULTCALLBACK(uint dwCode,IntPtr hrCmdID,IntPtr lpData,uint cbData,uint dwParam);
63
64? ?? ?? ?public delegate void RILNOTIFYCALLBACK(uint dwCode,IntPtr lpData,uint cbData,uint dwParam);
65
66? ?? ?? ?//RIL基站信息類
67? ?? ?? ?public class RILCELLTOWERINFO
68? ?? ?? ?{
69? ?? ?? ?? ?? ? public uint cbSize;??
70? ?? ?? ?? ?? ? public uint dwParams;??
71? ?? ?? ?? ?? ? public uint dwMobileCountryCode;??
72? ?? ?? ?? ?? ? public uint dwMobileNetworkCode;??
73? ?? ?? ?? ?? ? public uint dwLocationAreaCode;??
74? ?? ?? ?? ?? ? public uint dwCellID;??
75? ?? ?? ?? ?? ? public uint dwBaseStationID;??
76? ?? ?? ?? ?? ? public uint dwBroadcastControlChannel;??
77? ?? ?? ?? ?? ? public uint dwRxLevel;??
78? ?? ?? ?? ?? ? public uint dwRxLevelFull;??
79? ?? ?? ?? ?? ? public uint dwRxLevelSub;??
80? ?? ?? ?? ?? ? public uint dwRxQuality;??
81? ?? ?? ?? ?? ? public uint dwRxQualityFull;??
82? ?? ?? ?? ?? ? public uint dwRxQualitySub;??
83? ?? ?? ?? ?? ? public uint dwIdleTimeSlot;??
84? ?? ?? ?? ?? ? public uint dwTimingAdvance;??
85? ?? ?? ?? ?? ? public uint dwGPRSCellID;??
86? ?? ?? ?? ?? ? public uint dwGPRSBaseStationID;??
87? ?? ?? ?? ?? ? public uint dwNumBCCH;??
88
89
90? ?? ?? ?}
91
92? ?? ?? ?/* 調(diào)用API? ?
93? ?? ?? ? * 初始化RIL? ?
94? ?? ?? ? * MSDN:? ?http://msdn.microsoft.com/zh-cn/library/aa919106(en-us).aspx */
95? ?? ?? ?[DllImport("ril.dll")]
96? ?? ?? ?private static extern IntPtr RIL_Initialize(uint dwIndex, RILRESULTCALLBACK pfnResult, RILNOTIFYCALLBACK pfnNotify, uint dwNotificationClasses, uint dwParam, out IntPtr lphRil);
97? ?? ?? ?[DllImport("ril.dll")]
98? ?? ?? ?private static extern IntPtr RIL_GetCellTowerInfo(IntPtr hRil);
99? ?? ?? ?[DllImport("ril.dll")]
100? ?? ?? ?private static extern IntPtr RIL_Deinitialize(IntPtr hRil);
101
102? ???}
之后是有關(guān)通信方面的,通過基站信息獲取經(jīng)緯度(GOOGLE API)
代碼
??public class GMM
? ? {? ???
? ?? ?? ? static byte[] PostData(int MCC, int MNC, int LAC, int CID,??
? ?? ?? ?? ?? ?? ?? ?? ?? ?? ? bool shortCID)??
? ?? ?{
? ?? ?? ???
? ?? ?? ?? ?byte[] pd = new byte[]{??
? ?? ?? ?? ?? ? 0x00, 0x0e,??
? ?? ?? ?? ?? ? 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,??
? ?? ?? ?? ?? ? 0x00, 0x00,??
? ?? ?? ?? ?? ? 0x00, 0x00,??
? ?? ?? ?? ?? ? 0x00, 0x00,??
? ?? ?? ?? ?? ? 0x1b,??
? ?? ?? ?? ?? ? 0x00, 0x00, 0x00, 0x00, // Offset 0x11??
? ?? ?? ?? ?? ? 0x00, 0x00, 0x00, 0x00, // Offset 0x15??
? ?? ?? ?? ?? ? 0x00, 0x00, 0x00, 0x00, // Offset 0x19??
? ?? ?? ?? ?? ? 0x00, 0x00,??
? ?? ?? ?? ?? ? 0x00, 0x00, 0x00, 0x00, // Offset 0x1f??
? ?? ?? ?? ?? ? 0x00, 0x00, 0x00, 0x00, // Offset 0x23??
? ?? ?? ?? ?? ? 0x00, 0x00, 0x00, 0x00, // Offset 0x27??
? ?? ?? ?? ?? ? 0x00, 0x00, 0x00, 0x00, // Offset 0x2b??
? ?? ?? ?? ?? ? 0xff, 0xff, 0xff, 0xff,??
? ?? ?? ?? ?? ? 0x00, 0x00, 0x00, 0x00??
? ?? ?? ?? ?};??
? ?? ?? ?? ?bool isUMTSCell = ((Int64)CID > 65535);??
? ?? ?? ?? ?if (isUMTSCell)??
? ?? ?? ?? ?? ? Console.WriteLine("UMTS CID.{0}", shortCID ???
? ?? ?? ?? ?? ???"Using short CID to resolve." : "");??
? ?? ?? ?? ?else??
? ?? ?? ?? ?? ? Console.WriteLine("GSM CID given.");??
? ?? ?? ?? ?if (shortCID)??
? ?? ?? ?? ?? ? CID &= 0xFFFF;? ?? ?/* Attempt to resolve the cell using the? ?
? ?? ?? ?? ?if ((Int64)CID > 65536) /* GSM: 4 hex digits, UTMS: 6 hex??
? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?digits */
? ?? ?? ?? ?if ((Int64)CID > 65536)
? ?? ?? ?? ?? ? pd[0x1c] = 5;??
? ?? ?? ?? ?else??
? ?? ?? ?? ?? ? pd[0x1c] = 3;??
? ?? ?? ?? ?pd[0x11] = (byte)((MNC >> 24) & 0xFF);??
? ?? ?? ?? ?pd[0x12] = (byte)((MNC >> 16) & 0xFF);??
? ?? ?? ?? ?pd[0x13] = (byte)((MNC >> 8) & 0xFF);??
? ?? ?? ?? ?pd[0x14] = (byte)((MNC >> 0) & 0xFF);??
? ?? ?? ?? ?pd[0x15] = (byte)((MCC >> 24) & 0xFF);??
? ?? ?? ?? ?pd[0x16] = (byte)((MCC >> 16) & 0xFF);??
? ?? ?? ?? ?pd[0x17] = (byte)((MCC >> 8) & 0xFF);??
? ?? ?? ?? ?pd[0x18] = (byte)((MCC >> 0) & 0xFF);??
? ?? ?? ?? ?pd[0x27] = (byte)((MNC >> 24) & 0xFF);??
? ?? ?? ?? ?pd[0x28] = (byte)((MNC >> 16) & 0xFF);??
? ?? ?? ?? ?pd[0x29] = (byte)((MNC >> 8) & 0xFF);??
? ?? ?? ?? ?pd[0x2a] = (byte)((MNC >> 0) & 0xFF);??
? ?? ?? ?? ?pd[0x2b] = (byte)((MCC >> 24) & 0xFF);??
? ?? ?? ?? ?pd[0x2c] = (byte)((MCC >> 16) & 0xFF);??
? ?? ?? ?? ?pd[0x2d] = (byte)((MCC >> 8) & 0xFF);??
? ?? ?? ?? ?pd[0x2e] = (byte)((MCC >> 0) & 0xFF);??
? ?? ?? ?? ?pd[0x1f] = (byte)((CID >> 24) & 0xFF);??
? ?? ?? ?? ?pd[0x20] = (byte)((CID >> 16) & 0xFF);??
? ?? ?? ?? ?pd[0x21] = (byte)((CID >> 8) & 0xFF);??
? ?? ?? ?? ?pd[0x22] = (byte)((CID >> 0) & 0xFF);??
? ?? ?? ?? ?pd[0x23] = (byte)((LAC >> 24) & 0xFF);??
? ?? ?? ?? ?pd[0x24] = (byte)((LAC >> 16) & 0xFF);??
? ?? ?? ?? ?pd[0x25] = (byte)((LAC >> 8) & 0xFF);??
? ?? ?? ?? ?pd[0x26] = (byte)((LAC >> 0) & 0xFF);??
? ?? ?? ?? ?return pd;??
? ?? ???}
? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?//GSM CID part */??
? ?? ? /// <summary>
? ?? ? /// 通過基站信息獲取經(jīng)緯度
? ?? ? /// </summary>
? ?? ? /// <param name="args"></param>
? ?? ? /// <returns></returns>
? ?? ???static public string GetLatLng(string[] args)??
? ?? ? {??
? ?? ?? ?? ?if (args.Length < 4)??
? ?? ?? ?? ?{??
? ?? ?? ?? ?? ? return string.Empty;??
? ?? ?? ?? ?}??
? ?? ?? ?? ?string shortCID = "";? ?/* Default, no change at all */??
? ?? ?? ?? ?if (args.Length == 5)??
? ?? ?? ?? ?? ? shortCID = args[4].ToLower();??
? ?? ?? ?? ?try??
? ?? ?? ?? ?{??
? ?? ?? ?? ?? ? String url = "http://www.google.com/glm/mmap";??
? ?? ?? ?? ?? ? HttpWebRequest req = (HttpWebRequest)WebRequest.Create(??
? ?? ?? ?? ?? ?? ???new Uri(url));??
? ?? ?? ?? ?? ? req.Method = "POST";??
? ?? ?? ?? ?? ? int MCC = Convert.ToInt32(args[0]);??
? ?? ?? ?? ?? ? int MNC = Convert.ToInt32(args[1]);??
? ?? ?? ?? ?? ? int LAC = Convert.ToInt32(args[2]);??
? ?? ?? ?? ?? ? int CID = Convert.ToInt32(args[3]);??
? ?? ?? ?? ?? ? byte[] pd = PostData(MCC, MNC, LAC, CID,??
? ?? ?? ?? ?? ?? ???shortCID == "shortcid");??
? ?? ?? ?? ?? ? req.ContentLength = pd.Length;??
? ?? ?? ?? ?? ? req.ContentType = "application/binary";??
? ?? ?? ?? ?? ? Stream outputStream = req.GetRequestStream();??
? ?? ?? ?? ?? ? outputStream.Write(pd, 0, pd.Length);??
? ?? ?? ?? ?? ? outputStream.Close();??
? ?? ?? ?? ?? ? HttpWebResponse res = (HttpWebResponse)req.GetResponse();??
? ?? ?? ?? ?? ? byte[] ps = new byte[res.ContentLength];??
? ?? ?? ?? ?? ? int totalBytesRead = 0;??
? ?? ?? ?? ?? ? while (totalBytesRead < ps.Length)??
? ?? ?? ?? ?? ? {??
? ?? ?? ?? ?? ?? ???totalBytesRead += res.GetResponseStream().Read(??
? ?? ?? ?? ?? ?? ?? ?? ?ps, totalBytesRead, ps.Length - totalBytesRead);??
? ?? ?? ?? ?? ? }??
? ?? ?? ?? ?? ? if (res.StatusCode == HttpStatusCode.OK)??
? ?? ?? ?? ?? ?{??
? ?? ?? ?? ?? ?? ???short opcode1 = (short)(ps[0] << 8 | ps[1]);??
? ?? ?? ?? ?? ?? ???byte opcode2 = ps[2];??
? ?? ?? ?? ?? ?? ???int ret_code = (int)((ps[3] << 24) | (ps[4] << 16) |??
? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ???(ps[5] << 8) | (ps[6]));??
? ?? ?? ?? ?? ?? ???if (ret_code == 0)??
? ?? ?? ?? ?? ?? ?{??
? ?? ?? ?? ?? ?? ?? ?? ?double lat = ((double)((ps[7] << 24) | (ps[8] << 16)??
? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ? | (ps[9] << 8) | (ps[10]))) / 1000000;??
? ?? ?? ?? ?? ?? ?? ?? ?double lon = ((double)((ps[11] << 24) | (ps[12] <<??
? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ? 16) | (ps[13] << 8) | (ps[14]))) /??
? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ? 1000000;??
? ?? ?? ?? ?? ?? ?? ?? ?return lat + "|" + lon;??
? ?? ?? ?? ?? ?? ???}??
? ?? ?? ?? ?? ?? ???else??
? ?? ?? ?? ?? ?? ?? ?? ?return string.Empty;??
? ?? ?? ?? ?? ? }??
? ?? ?? ?? ?? ? else??
? ?? ?? ?? ?? ?? ???return string.Empty;??
? ?? ?? ?? ?}??
? ?? ?? ?? ?catch (Exception ex)??
? ?? ?? ?? ?{??
? ?? ?? ?? ?? ? MessageBox.Show(ex.ToString());??
? ?? ?? ?? ?? ? return string.Empty;??
? ?? ?? ?? ?}??
? ?? ???}??
? ? }
下面在介紹一種只要知道cellid和lac兩個參數(shù)就可以獲取經(jīng)緯度的方法:
1??/// <summary>
2? ?? ?? ?/// 判斷是否正確獲取經(jīng)緯度信息
3? ?? ?? ?/// </summary>
4? ?? ?? ?/// <param name="cellid">cellid</param>
5? ?? ?? ?/// <param name="lac">LocationAreaCode</param>
6? ?? ?? ?/// <param name="Lat">latitude</param>
7? ?? ?? ?/// <param name="Lng">longgitude</param>
8? ?? ?? ?/// <returns></returns>
9? ?? ?? ?public static bool LocateGooleMapApi(uint cellid, uint lac, out double Lat, out double Lng)
10? ?? ?? ?{
11? ?? ?? ?? ? HttpWebRequest request =(HttpWebRequest)WebRequest.Create("http://www.google.com/glm/mmap");
12? ?? ?? ?? ? request.Method = "POST";
13
14? ?? ?? ?
15? ?? ?? ?? ? byte[] byteArray = {0x00,0x15,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,
16? ?? ?? ?? ?? ?? ?? ?? ? 0x65, 0x6E, // en
17? ?? ?? ?? ?? ?? ?? ?? ? 0x00, 0x07,
18? ?? ?? ?? ?? ?? ?? ?? ? 0x41, 0x6E, 0x64, 0x72, 0x6F, 0x69, 0x64,
19? ?? ?? ?? ?? ?? ?? ?? ? 0x00, 0x03,
20? ?? ?? ?? ?? ?? ?? ?? ? 0x31, 0x2E, 0x30, // 1.0
21? ?? ?? ?? ?? ?? ?? ?? ? 0x00, 0x03,
22? ?? ?? ?? ?? ?? ?? ?? ? 0x57, 0x65, 0x62, // web
23? ?? ?? ?? ?? ?? ?? ?? ? 0x1B,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
24? ?? ?? ?? ?? ?? ?? ?? ? 0x00,0x00,0x00,0x00,0x03,0x00,0x00,
25? ?? ?? ?? ?? ?? ?? ?? ? 0xFF, 0xFF, 0xFF, 0xFF, // CellID
26? ?? ?? ?? ?? ?? ?? ?? ? 0xFF, 0xFF, 0xFF, 0xFF, // LAC
27? ?? ?? ?? ?? ?? ?? ?? ? 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
28? ?? ?? ?? ?? ?? ?? ?? ? 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 };
29
30? ?? ?? ?? ? // write CellID
31? ?? ?? ?? ? byte[] intByte = BitConverter.GetBytes(cellid);
32? ?? ?? ?? ? byteArray[48] = intByte[3];
33? ?? ?? ?? ? byteArray[49] = intByte[2];
34? ?? ?? ?? ? byteArray[50] = intByte[1];
35? ?? ?? ?? ? byteArray[51] = intByte[0];
36
37? ?? ?? ?? ? // write LAC
38? ?? ?? ?? ? intByte = BitConverter.GetBytes(lac);
39? ?? ?? ?? ? byteArray[52] = intByte[3];
40? ?? ?? ?? ? byteArray[53] = intByte[2];
41? ?? ?? ?? ? byteArray[54] = intByte[1];
42? ?? ?? ?? ? byteArray[55] = intByte[0];
43
44? ?? ?? ?? ? // set request
45? ?? ?? ?? ? request.ContentLength = byteArray.Length;
46? ?? ?? ?? ? Stream postStream = request.GetRequestStream();
47? ?? ?? ?? ? postStream.Write(byteArray, 0, byteArray.Length);
48? ?? ?? ?? ? postStream.Close();
49
50? ?? ?? ?? ? // Get the response.
51? ?? ?? ?? ? HttpWebResponse response = (HttpWebResponse)request.GetResponse();
52? ?? ?? ?? ? Console.WriteLine("[I] Request response: {0}", response.StatusDescription);
53
54? ?? ?? ?? ? // Read response
55? ?? ?? ?? ? Stream dataStream = response.GetResponseStream();
56? ?? ?? ?? ? BinaryReader BR = new BinaryReader(dataStream);
57? ?? ?? ?? ? // skip 3 byte
58? ?? ?? ?? ? BR.ReadByte();
59? ?? ?? ?? ? BR.ReadByte();
60? ?? ?? ?? ? BR.ReadByte();
61
62? ?? ?? ?? ? // check state
63? ?? ?? ?? ? if (0 == BR.ReadInt32())
64? ?? ?? ?? ? {
65? ?? ?? ?? ?? ???// read lat
66? ?? ?? ?? ?? ???byte[] tmpByte = new byte[4];
67? ?? ?? ?? ?? ???tmpByte[3] = BR.ReadByte();
68? ?? ?? ?? ?? ???tmpByte[2] = BR.ReadByte();
69? ?? ?? ?? ?? ???tmpByte[1] = BR.ReadByte();
70? ?? ?? ?? ?? ???tmpByte[0] = BR.ReadByte();
71? ?? ?? ?? ?? ???Lat = (double)(BitConverter.ToInt32(tmpByte, 0)) / 1000000D;
72
73? ?? ?? ?? ?? ???// read lng
74? ?? ?? ?? ?? ???tmpByte[3] = BR.ReadByte();
75? ?? ?? ?? ?? ???tmpByte[2] = BR.ReadByte();
76? ?? ?? ?? ?? ???tmpByte[1] = BR.ReadByte();
77? ?? ?? ?? ?? ???tmpByte[0] = BR.ReadByte();
78? ?? ?? ?? ?? ???Lng = (double)(BitConverter.ToInt32(tmpByte, 0)) / 1000000D;
79
80? ?? ?? ?? ?? ???BR.Close();
81? ?? ?? ?? ?? ???dataStream.Close();
82? ?? ?? ?? ?? ???response.Close();
83? ?? ?? ?? ?? ???return true;
84? ?? ?? ?? ? }
85? ?? ?? ?? ? else
86? ?? ?? ?? ? {
87? ?? ?? ?? ?? ???BR.Close();
88? ?? ?? ?? ?? ???dataStream.Close();
89? ?? ?? ?? ?? ???response.Close();
90? ?? ?? ?? ?? ???Lat = 0;
91? ?? ?? ?? ?? ???Lng = 0;
92? ?? ?? ?? ?? ???return false;
93? ?? ?? ?? ? }
94
95
96? ?? ?? ?}
最后只要用C#2008 建立一個新項目,添加webbrowser控件,添加一個按鍵代碼如下:
1? ?? ? Cursor.Current = Cursors.WaitCursor;
2? ?? ?? ?? ? string [] cellidFields = RIL.GetCellTowerInfo().ToString().Split('-');
3? ?? ?? ?? ?? ?
4? ?? ?? ?? ? string[] args ={
5? ?? ?? ?? ?? ?? ?? ?? ?? ?? ???cellidFields[2],
6? ?? ?? ?? ?? ?? ?? ?? ?? ?? ???"0",
7? ?? ?? ?? ?? ?? ?? ?? ?? ?? ???cellidFields[1],
8? ?? ?? ?? ?? ?? ?? ?? ?? ?? ???cellidFields[0]
9? ?? ?? ?? ?? ?? ?? ?? ?? ? };
10? ?? ?? ?? ? string[] latlng = GMM.GetLatLng(args).Split('|');
11
12? ?? ?? ?? ? Uri url = new Uri("http://maps.google.com/staticmap?&maptype=satellite&key=xxx&markers=" + latlng[0].ToString().Replace(',', '.') + "," + latlng[1].ToString().Replace(',', '.') + "¢er=,&size=240x320&zoom=18");
13? ?? ?? ?? ? webBrowser1.Navigate(url);
14? ?? ?? ?? ? Cursor.Current = Cursors.Default;
總結(jié)
以上是生活随笔為你收集整理的在网上收集了一部分关于使用Google API进行手机定位的资料和大家分享的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 本人服务器遭受黑客长期攻击,特把这几天做
- 下一篇: --附加数据库失败