1

MAPアプリを開発中です。オーバーレイを描画するための緯度と経度の詳細を数千保存します。ユーザーがオーバーレイに触れると、SQL に保存されたレコードから最も近い緯度と経度を取得します。

私が使う:

SELECT * 
FROM track_points 
WHERE segmentId = '22' 
ORDER BY (ABS(latitude - 25.312005) + ABS(longitude - 91.730433))

まったく同じことを行いますが、問題は、特定のオーバーレイに数千の緯度と経度の詳細がある場合です。上記のクエリを完了するには、長い時間がかかります。

最も近いデータが取得された場合でも、DB データ全体が 1 つのポイントを取得するように実行されます。

ちょうど28.2525 が与えられたとき、25.2520 に近い何かが必要で、それで終わりです。22.23252 などから始めて 10 行目から始めて、5000 行目で 25.2520 に到達した後、最後の行まで続けたくありません。

4

1 に答える 1

1

まず、Spatialite が必要かどうかを引き続き調査します。

ただし、クエリが考慮しているポイントの数を減らす必要があります。

SELECT * 
FROM track_points 
WHERE segmentId = '22' 
ORDER BY (ABS(latitude - 25.312005) + ABS(longitude - 91.730433))
WHERE latitude BETWEEN 25.31 AND 25.32
      AND
      longitude BETWEEN 91.73 AND 91.74

境界はできるだけ狭く設定する必要がありますが、少なくとも 1 つの結果が確実に得られるように十分に広くします。緯度と経度が規則的な格子である場合、これは簡単です。

BETWEEN @value - @tolerance AND @value + @toleranceその場で値を決定するために使用できます。

于 2013-02-05T04:08:48.247 に答える