maxDistance
方法的Query<U>.Near<T>
参数的单位类型是什么(在MongoDB C#Driver中)?
注意:我创建了一个索引,并检查它是否为“2d”索引:
var keys = IndexKeys<Loc>.GeoSpatial<double[]>(l => l.Coordinates);
var options = IndexOptions.SetName("Loc_Coordinates").SetBackground(true);
Locations.EnsureIndex(keys, options);
索引检查:
var idxes = Locations.GetIndexes();
foreach (var i in idxes)
{
Program.Log(i.Key);
}
索引是:
{ "_id" : 1 }
{ "Coordinates" : "2d" }
我认为单位应该是弧度,所以我写了这个帮手方法将米转换为弧度:
const double EarthRadius_m = 6371.01 * 1000d; //m
public static double MeterToRadian(this double meter) { return meter / EarthRadius_m; }
但如果我使用米(在密集区域),我会得到太多结果,如果我使用弧度,我什么都没有,除非它很大(乘以1000!)。也许MeterToRadian
有一些问题?或者单位是km
而不是m
? (但在网站上,它表示它是米)。
我通过以下代码查询集合:
var radius = meter.MeterToRadian();
var query = Query<Loc>.Near<double[]>(l => l.Coordinates, lon, lat, radius);
var answer = Locations.Find(query).SetLimit(limit).ToList();