1

Androidでアプリを作りたいです。このアプリでは、ユーザーはこのアプリに登録する必要があります。登録すると、GPS の場所 (緯度と経度) がユーザー情報と共にデータベース テーブルに保存されます。このアプリでは、「ルートにいる人を検索する」という機能を追加したいと考えています。ユーザーは始点と終点を入力できます (例: ムンバイからデリー)。そして、この 2 点間のすべての人々が発見されることを望んでいます。

例: User-A がこのアプリに新規登録しました。ユーザー A の GPS 位置は、緯度 = 20.234554、経度 = 56.21455255 のようになります。今、彼はムンバイとデリーのような 2 つのポイントを入力し、検索ボタンをクリックします。ここで、すべての人々の情報が既に保存されているデータベースにクエリを実行したいと考えています。「ムンバイからデリーまでの人々がいる場所(テーブル)から*を選択する」というデータベースでクエリを実行したい

データベース テーブル "locations" には、緯度、経度、都市名の 4 つのフィールド ID があります。ここで、データベースで上記のクエリを実行して、入力された 2 つの地理的ポイントの間にいる人を見つけることができます。

私が達成したいことは、入力された場所(緯度と経度)を使用してデータベーステーブルから近くの場所(緯度と経度)を検索したいだけであることを理解していただけたことを願っています。

4

3 に答える 3

3

インデックスを作成できるいくつかの条件によって、場所を制限することをお勧めします。米国からパリの誰かを最寄りの場所としてリストしたくないので、簡単にそれを行うことができます。

RustamISクエリを少し変更するだけで、無関係な場所のほとんどを削除できます。

select * from gps_location_table t 
where
    t.x between 20.134554 and 20.334554 and t.y between 56.11455255 and 56.31455255
order by 
    sqrt((t.x - 20.234554)*(t.x - 20.234554) + (t.y - 56.21455255)*(t.y - 56.21455255)
desc

そこで、最も近い人を探したい長方形を定義しました。

于 2012-10-30T10:51:58.700 に答える
3
SELECT *, ((ACOS(SIN(23.037698 * PI() / 180) * SIN(latitude * PI() / 180) + COS(23.037698 * PI() / 180) * COS(latitude * PI() / 180) * COS((72.564835 - longitude) * PI() / 180)) * 180 / PI()) * 60 * 1.1515 * 1.609344) as distance FROM location;

上記のクエリは、入力すると距離を返します

lat = 23.037698
long = 72.564835

ここで、距離を比較して、距離 > 50km とします。

これは私にとってはうまくいきました。

于 2012-10-30T10:39:08.703 に答える
2

long => Y および lat => X にしてから、次のようにクエリします

select * from gps_location_table t 
order by 
     sqrt(pow((t.x - 20.234554),2) + pow((t.y - 56.21455255),2))
desc

答えはこのようなものでなければなりません!!! この式は正しい距離を返さないことに注意してください。ただし、実際の距離を計算するよりも速く機能します。

主な意味は、2 つの座標間の距離は次のとおりです。

sqrt((x1-x2)^2 + (y1-y2)^2)    
于 2012-10-30T10:36:01.663 に答える