1. 程式人生 > >MongoDB學習筆記~地圖座標的支援與附近點的查詢

MongoDB學習筆記~地圖座標的支援與附近點的查詢

回到目錄

Mongodb這個資料庫很不錯,它的方法也不錯,為了實現座標功能,它甚至為我們提供了geo裡的一些演算法,幫助我們通過某個點去位置和查詢N個附近的點。

表面

在您儲存地理資料和編寫查詢條件前,首先,您必須選擇表面型別,這將被用在計算中。您所選擇的型別將會影響您的資料如何被儲存,建立的索引的型別,以及您的查詢的語法形式。

MongoDB提供了兩種表面型別:

球面

如果需要計算地理資料就像在一個類似於地球的球形表面上,您可以選擇球形表面來儲存資料,這樣就可以使用 2dsphere 索引。

您可以按照座標軸:經度,緯度 的方式把位置資料儲存為GeoJSON物件。GeoJSON的座標參考系使用的是 

WGS84 資料。

平面

如果需要計算距離,就像在一個歐幾里德平面上,您可以按照正常座標對的形式儲存位置資料並使用 2d索引。

測試類

    public class Zoo : NoSqlEntity
    {
        public string title { get; set; }
        public double[] loc { get; set; }

    }

測試資料

        [TestMethod]
        public void Addloc()
        {
            
for (int i = -180; i < 180; i += 5) MongoDbClient.MongoManager<Zoo>.Instance.InsertOne(new Zoo { title = "北京" + i, loc = new double[] { i, i } }); }

資料新增後的列表

查詢你需要的附近的點

       [TestMethod]
        public void Findloc()
        {
            var filter = Builders<Zoo>.Filter.Near(i => i.loc, 50
, 50, maxDistance: 50); var result = MongoDbClient.MongoManager<Zoo>.Instance.Find(filter); foreach (var item in result.ToList()) { Console.WriteLine(item.title); } }

回到目錄

為資料集合的座標欄位新增索引