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); ;


然後,我們發現附近的數據被我們查詢到了!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章