指定された半径内の住所を返すことができるように、緯度と経度の最小値と最大値の境界ボックスを生成する必要があります。
バウンディングボックスを確立するために必要な範囲を経度緯度座標に +/- 返すために、以下に 2 つの func<> があります。しかし、私は数学が100%だとは思わない
距離計算を生成するために Haversine 式を使用していますが、正確に機能しているようです。距離についても Vincenty 式を調査しましたが、私のニーズではやり過ぎでした。
私の問題は、長緯度座標に対する I +/- の範囲が楕円体の曲率または地球を考慮に入れるという点で、検索結果が Haversine と同じくらい正確であることです。
わかりました、ここに私のfunc<>があります...私は数学の教授ではないことに注意してください:o)
static Func<double, int, double> GetLatitudeRange = (latitude, distance) => (180.0 / Math.PI) * (distance / EARTH_RADIUS_IN_KM);
static Func<double, double, int, double> GetLongitudeRange = (longitude, latitude, distance) =>
(
Math.Asin(
Math.Sin(distance / EARTH_RADIUS_IN_KM) / Math.Cos(latitude)
)
);