0

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();
4

0 に答える 0