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

回到目錄

為數據集合的坐標字段添加索引

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM