回到目錄
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);
}
}
為資料集合的坐标字段添加索引
作者:倉儲大叔,張占嶺,
榮譽:微軟MVP
QQ:853066980
支付寶掃一掃,為大叔打賞!