maxDistance
メソッドの引数のユニット型は何ですかQuery<U>.Near<T>
(MongoDB C# ドライバーで)?
注: インデックスを作成し、それが「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();