MongoDB学习笔记~地图坐标的支持与附近点的查找
回到目錄
Mongodb這個(gè)數(shù)據(jù)庫(kù)很不錯(cuò),它的方法也不錯(cuò),為了實(shí)現(xiàn)坐標(biāo)功能,它甚至為我們提供了geo里的一些算法,幫助我們通過(guò)某個(gè)點(diǎn)去位置和查找N個(gè)附近的點(diǎn)。
表面
在您存儲(chǔ)地理數(shù)據(jù)和編寫(xiě)查詢條件前,首先,您必須選擇表面類(lèi)型,這將被用在計(jì)算中。您所選擇的類(lèi)型將會(huì)影響您的數(shù)據(jù)如何被存儲(chǔ),建立的索引的類(lèi)型,以及您的查詢的語(yǔ)法形式。
MongoDB提供了兩種表面類(lèi)型:
球面如果需要計(jì)算地理數(shù)據(jù)就像在一個(gè)類(lèi)似于地球的球形表面上,您可以選擇球形表面來(lái)存儲(chǔ)數(shù)據(jù),這樣就可以使用?2dsphere?索引。
您可以按照坐標(biāo)軸:經(jīng)度,緯度?的方式把位置數(shù)據(jù)存儲(chǔ)為GeoJSON對(duì)象。GeoJSON的坐標(biāo)參考系使用的是?WGS84?數(shù)據(jù)。
平面如果需要計(jì)算距離,就像在一個(gè)歐幾里德平面上,您可以按照正常坐標(biāo)對(duì)的形式存儲(chǔ)位置數(shù)據(jù)并使用?2d索引。
測(cè)試類(lèi)
public class Zoo : NoSqlEntity{public string title { get; set; }public double[] loc { get; set; }}測(cè)試數(shù)據(jù)
[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 } });}數(shù)據(jù)添加后的列表
查找你需要的附近的點(diǎn)
[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);}}回到目錄
為數(shù)據(jù)集合的坐標(biāo)字段添加索引
?
轉(zhuǎn)載于:https://www.cnblogs.com/lori/p/6952208.html
總結(jié)
以上是生活随笔為你收集整理的MongoDB学习笔记~地图坐标的支持与附近点的查找的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: Chromium 操作系统即将支持所有
- 下一篇: python面向对象-4类的继承与方法的