2012-01-23 42 views
2

私は特定の都市からの投稿を表示するサイトを持っています。私はCitiesからユーザーの周囲の半径(この場合は10km)に変更することを考えていました。半径10km以内の緯度経度値を持つ行を選択しますか?

radiusを使用してクエリを実行する方法がわかりません。私は2つの条件でクエリを実行し、正方形を取得すると考えることができます。例:

SELECT fields 
FROM points 
WHERE lat BETWEEN LAT1 AND LAT2 
AND lon BETWEEN LON1 AND LON2 

特定の場所から半径Xkm/mi以内の行を選択することはできますか?

+0

[This(http://stackoverflow.com/questions/5492750/efficient-sorted-bounding-box-query)質問はあなたにとって価値があるかもしれません.MySQLではなく、その考えはまだ成り立っています。 –

+0

2点間の距離を計算する式はありますか?これは、SQLで実行できるかどうかを判断するのに役立ちます。 –

+0

私はそれが緯度または経度点aproxあたり111kmだと思います。したがって、ピタゴラスを使用すると、関数は(lat * 111)^ 2 +(lon * 111)^ 2 = distance^2となります。私はどのように 'CREATE FUNCTION 'をするのか分かりません。 – lisovaccaro

答えて

1

一般に、任意の条件でWHEREクエリを使用できます。だから、あなたは、2つの地理的な点間の距離を計算することができます機能distance()を持っていると仮定、あなたが行うことができます:

SELECT fields 
FROM points 
WHERE distance(lat, lon, city_lat, city_lon) <= 10 

city_latcity_lonは、市内中心部のロケーションです。

PostgreSQLには、earthdistance()というアドオン機能が含まれています。

+0

可能性があります。その機能についての質問です。私はちょうど通常のPHP関数のようなクエリの上にそれを書くと、それは?あるいは、クエリを実行するために別の何かをしなければならないのですか? – lisovaccaro

+0

いいえ、データベースからアクセスできる必要があります(PHPスクリプト内の関数はありません)。つまり、[CREATE FUNCTION'](http:// dev。 mysql.com/doc/refman/5.0/en/create-function.html)を参照してください。 –

関連する問題