緯度と経度の最大値と最小値を計算して、2つの点間の距離を計算する前に巨大なデータを簡単にフィルタリングできるようにする必要があります。
しかし、私は距離が可変であるそこに何かを見つけていないよ、私は、私はおそらく段階でこれらを計算することができ考え出しので、私は、次のを思い付いた:場所から可変距離でMAXとMINの緯度と経度を計算する
DECLARE @area int = (69 * FLOOR(@maxDist/69) + 1)
DECLARE @lonMin float = @originLon - @maxDist/abs(cos(radians(@originLat)) * @area);
DECLARE @lonMax float = @originLon + @maxDist/abs(cos(radians(@originLat)) * @area);
DECLARE @latMin float = @originLat - (@maxDist/@area);
DECLARE @latMax float = @originLat + (@maxDist/@area);
私は値を適用しよう私はここで私のwhereステートメントで取得しますが、検索は単一度の違いを超えると失敗します。
WHERE
(endPoint.Longitude >= @lonMin and endPoint.Longitude <= @lonMax)
and
(endPoint.Latitude >= @latMin and endPoint.Longitude <= @latMax)
私の最高の推測では、私のロンミンとlonMaxが間違っているということですが、私はそれを破ってきた場所がわからないんだけど。私はかなり正しい計算式を使用していることを確信しています - これまで見たことのあるものは同じですか - 計算された問題は@area
なのでしょうか?
(私はマイルと33.631701、 -111.877582などの例入力で働いている)
使用しているデータベースのGIS機能または拡張機能を調べる必要があります。 –
私のDBの地理的な機能は良いです、私は彼らが何で、どのようにそれらを使用するのか知っていますが、それらの使用の結果は速度の大きな損失です。 私がやっているよりもはるかに大きくコストがかかるので、ある程度正確さを失ってもそれを避けたいと思います(これは私の使用のケースでは非常に重要ではありません)。 – Nol
@Nol 69度は赤道に沿った1度の旅行のおよその距離です。しかし、私は「地域」と思われるものを推測するのに迷っています。あなたは書いています:「私は正しい数式を使っていると確信しています - これまでに見たものは同じものです」 - URL(s)。距離が遠い場合などに問題があるようです。 67.5,68.0,68.5マイル –