zoukankan      html  css  js  c++  java
  • MongoDB,使用C#实现2d地理位置检索

    这两天在研究mongoDB,从零开始接触它,为什么要研究它呢,因为它支持2d地图索引,而且速度非常快,可以用它来做类似微信的(摇一摇功能),不过网上很难搜到.net操作的,而且就算搜索到了也不能用,也许是驱动版本的问题。总之到处都找不到可用的代码,只好自己慢慢研究调试,终于成功查询到了附近的数据了。

    我用的驱动版本是最新的,CSharpDriver-1.7.0.4714版本,在项目中引用相应驱动

    MongoDB.Driver

    MongoDB.Bson

    定义全局变量
    Random rd = new Random();

     string dbname = "test";
     string cstr = "mongodb://127.0.0.1:27017";

    新建两个内部类a1是我们的数据对象,loc是我们的2d位置坐标

    public class a1 
            {
                public MongoDB.Bson.ObjectId _id { get; set; }
                public string T1 { get; set; }
                public string T2 { get; set; }
                public loc lo { get; set; }
                
            }
            public class loc 
            {
                public float lat { get; set; }
                public float lon { get; set; }
                public loc(float la, float lo)
                {
                    lat = la;
                    lon = lo;
                }

    首先,自动生成50个随机坐标的数据

     for (int i = 0; i < 100; i++)
                {
                    a1 a = new a1();
                    a.T1 = "DDDD";
                    a.T2 = "DTTT";
                    a.lo = new loc((float)rd.Next(90) + 3, (float)rd.Next(90) + 3);
                    MongoDB.Driver.MongoServer server = MongoDB.Driver.MongoServer.Create(cstr);


                    MongoDB.Driver.MongoDatabase db = server.GetDatabase(dbname);
                    MongoDB.Driver.MongoCollection col = db.GetCollection("user");
                    col.Insert<a1>(a);
                }
                public loc()
                {
                    // TODO: Complete member initialization
                }
            }

    转化对象为json字符串

     /// <summary>
            /// 生成Json格式
            /// </summary>
            /// <typeparam name="T">传入的类型</typeparam>
            /// <param name="obj">传入的数据</param>
            /// <returns>生成的json字符串</returns>
            public static string GetJson<T>(T obj)
            {
                JavaScriptSerializer jss = new JavaScriptSerializer();
                return jss.Serialize(obj);
            }
          

    查找距离指定位置最近的20条数据

     MongoDB.Driver.MongoServer server = MongoDB.Driver.MongoServer.Create(cstr);

                MongoDB.Driver.MongoDatabase db = server.GetDatabase(dbname);
                MongoDB.Driver.MongoCollection col = db.GetCollection("user");
                col.CreateIndex("lo","2d");//创建2d索引
                var query = new MongoDB.Driver.QueryDocument { {"T1","DDDD"} };
          
          
               var re4 = col.GeoNearAs<a1>(query, 10.0, 10.0, 20);
               var t = re4.Hits;
               List<object> list = new List<object>();
               for (int i = 0; i < t.Count; i++)
               {
                   var b = t.ElementAt(i);
                   list.Add(b.Document);
               }
               richTextBox4.Text = GetJson<List<object>>(list); ;

    然后,我们发现附近的数据被我们查询到了!

  • 相关阅读:
    简单的jQuery扩展函数-让函数缓冲执行
    Sharepoint更新字段触发工作流(无代码)
    jQuery Multi-TouchWipe / Multi-TouchZoom
    jQuery WipeTouch
    当页弹出对话框的实现
    SlidesJS的使用
    三级浮动菜单的实现
    UI中经常出现的下拉框下拉自动筛选效果的实现
    图片预加载,按需加载
    项目新的需求,网页的自适应交付/响应式交付 Responsive/Adaptive Delivery
  • 原文地址:https://www.cnblogs.com/xubao/p/12275583.html
Copyright © 2011-2022 走看看