MongoDB學習筆記~地圖坐標的支持與附近點的查找
Mongodb這(zhe)個(ge)數據庫很不錯(cuo),它(ta)的(de)方法也不錯(cuo),為了實現坐標功能(neng),它(ta)甚至為我們提(ti)供了geo里的(de)一些算法,幫助我們通過某個(ge)點(dian)去位置和(he)查找N個(ge)附近的(de)點(dian)。
表(biao)面
在(zai)您存(cun)儲地理數據(ju)和編寫查(cha)詢(xun)條(tiao)件前(qian),首先,您必須選擇表面(mian)類型,這將被用在(zai)計算中。您所選擇的類型將會影(ying)響(xiang)您的數據(ju)如何被存(cun)儲,建立(li)的索引的類型,以(yi)及您的查(cha)詢(xun)的語(yu)法形(xing)式(shi)。
MongoDB提供了兩(liang)種表面類型:
球面
如果需要計算(suan)地理數據(ju)就像在一個類似于地球的球形表面(mian)(mian)上,您可以選擇球形表面(mian)(mian)來存儲數據(ju),這樣(yang)就可以使用 索引(yin)。
您可以按照坐標軸:經度,緯度 的方式把(ba)位置數(shu)據存儲為GeoJSON對象。GeoJSON的坐(zuo)標參(can)考系使用的是(shi) 數(shu)據。
平面
如果(guo)需要計算距離(li),就像(xiang)在(zai)一個歐幾里德平面上,您(nin)可(ke)以(yi)按照正常坐標(biao)對(dui)的(de)形(xing)式存儲位置數據并使用 索引(yin)。
測試類
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 } }); }
數據添加后的列表

查找你(ni)需(xu)要(yao)的(de)附近的(de)點
[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); } }
為數據(ju)集合的(de)坐標(biao)字段(duan)添(tian)加索引
