【问题标题】:Get latitude and longitude from cellid, lac, MCC, MNC in ASP.NET webservice从 ASP.NET webservice 中的 cellid、lac、MCC、MNC 获取经纬度
【发布时间】:2012-09-21 20:00:55
【问题描述】:

我有一个 .asmx 网络服务,它可以获取 cellid、MCC、MNC 和 LAC,我想使用 opencellid 从这些信息中获取纬度和经度,我没有在互联网上找到资源,所以我没有知道从哪里开始。如果你能帮助我找出如何做到这一点,或者给我一个替代解决方案来从这些信息中找到纬度和经度,那就太好了。谢谢

【问题讨论】:

    标签: asp.net location cellid


    【解决方案1】:

    我面临同样的情况。读这个..答案就在这里。您可以将此代码合并到您的项目中..

    http://android-coding.blogspot.com/2011/06/convert-celllocation-to-real-location.html

    【讨论】:

      【解决方案2】:

      如何使用GoogleMaps Api 以一种优雅而优雅的方式从这些参数中获取纬度和经度。

      我在这里写了一篇关于它的博客文章:Blog Post

      将此类添加到您的项目中:

      public class GoogleMapsApi
      {
          static byte[] PostData(int MCC, int MNC, int LAC, int CID)
          {
      
              /* The shortCID parameter follows heuristic experiences:
      
               * Sometimes UMTS CIDs are build up from the original GSM CID (lower 4 hex digits)
      
               * and the RNC-ID left shifted into the upper 4 digits.
      
               */
      
              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 (shortCID)
      
                  CID &= 0xFFFF;      /* Attempt to resolve the cell using the
      
                              GSM CID part */
      
              if ((Int64)CID > 65536) /* GSM: 4 hex digits, UTMS: 6 hex
      
                              digits */
      
                  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;
      
          }
      
          static public string[] GetLatLng(int MCC, int MNC, int LAC, int CID)
          {
      
              string[] result = new string[2];
      
              try
              {
      
                  String url = "http://www.google.com/glm/mmap";
      
                  HttpWebRequest req = (HttpWebRequest)WebRequest.Create(
      
                      new Uri(url));
      
                  req.Method = "POST";
      
                  byte[] pd = PostData(MCC, MNC, LAC, CID);
      
                  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;
      
                          result[0] = lat.ToString();
                          result[1] = lon.ToString();
                          return result;
      
                      }
      
                      else
                      {
      
                          return result;
                      }
      
                  }
      
                  else
      
                      return result;
      
              }
      
              catch (Exception ex)
              {
                  result[0] = ex.Message;
                  return result;
      
              }
      
          }
      }
      

      调用类以获取所需的纬度和经度:

      string[] s = GoogleMapsApi.GetLatLng(MCC, MNC, lac, cellid);
      double lat = 0;
      Boolean b1 = double.TryParse(s[0], out lat);
      double lon = 0;
      Boolean b2 = double.TryParse(s[1], out lon);
      

      【讨论】:

      • 链接已损坏。无法访问该页面。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-05-23
      • 1970-01-01
      相关资源
      最近更新 更多