2012-03-08 10 views
0

私は十進数の緯度/経度の値の形式で2倍の連続を持っています。これらの値を保存したいのですが、リストに新しい値を追加する場合は、リストに既に緯度と経度の±0.0001の値があるかどうかを確認してください。値が緯度または経度のいずれかの±0.0001である場合、私はそれを保存したくありません。C#double型の配列を含むリストの格納とフィルタリング

私が再作成したいのは、MongoDB Geospatial $ nearコマンドのバージョンです。

誰でもこの問題についてどのようなアドバイスを提供できますか?この目標を達成するのに役立つ無料のC#ジオスペースライブラリがありますか?

多くのアドバイスをいただきありがとうございます。

+1

数字が0.0001,0.00015、0.00021で、最初に0.0001を保存するとどうなりますか?その後、0.00015を保存したときに.0001と.00021が保存されます。それは考慮されていませんか?おそらく、すべての値を格納し、必要に応じてフィルタリングする必要があります。 –

+0

いくつの値を保存する必要がありますか? – sga101

+0

[SharpMap](http://sharpmap.codeplex.com/)は必要な作業を行いますか? – sga101

答えて

0

ライブラリはありませんが、LINQを使用できます。ここList<Tuple<double, double>>ための一つです:

var y = new Tuple<double, double>(15.25, 18.700001); 

if(!coordinates.Any(x => Math.Abs(x.Item1 - y.Item1) <= 0.0001 || Math.Abs(x.Item2 - y.Item2) <= 0.0001)) { 
    // No coordinate in the list is within ±0.0001 of either the latitude or the longitude 
    coordinates.Add(y); 
} 
0

私が正しく理解していた場合は、このようなものは、座標は、コンテナのいくつかの種類に包まれていると仮定すると、あなたのために働く必要があります。

public class Coordinates 
{ 
    public double Latitude { get; set; } 
    public double Longitude { get; set; } 
} 
public bool IsNear(List<Coordinates> coords, double lat, double lon, double tolerance) 
{ 
    return coords.Any(p => Math.Abs(p.Latitude - lat) < tolerance || Math.Abs(p.Longitude - lon) < tolerance); 
} 
0

は、あなたは2点間の距離を計算する必要があります。

if (Math.Abs(Math.Sqrt((longitude - longitude_before) * (longitude - longitude_before) + (latitude - latitude_before) * (latitude - latitude_before))) > 0.0001) 
{ 
    // Record new point 
} 

latitude_beforeと最後に記録されたパスのエントリlongitude_beforeある - 前の点を確認する必要がないように私には思えるが。それが問題であると判明した場合は、range searchを見てください。

関連する問題