質問

していることができるようになphpの判断機能のリストをzipコードを一定の範囲内での郵便コードです。しかし、私の次のタスクは少し複雑になります。

でのテーブルには次の列があります:

id,
username
info
latitude
longitude
range

それぞれに独自の行id、一部の情報、緯度、経度、最大限の範囲からの座標においてこ入れます。そのため、私が作成したエントリの座標-20 50の範囲は15としたい人15マイルの座標-20,50きにいろいろと教えてもらいます。コーヒーに飽きたら寿司に緯度-経度のユーザーの検索は自明します。

場合には、ユーザを検索してデータベースのすべてのレコード取得するための緯度や経度の座標の値の範囲、利用者からの緯度経度の長さです。

なので、非機能的な例を使用したコードまでの距離の算式を明らこう

$userLat =緯度のユーザーの実行を検索

$userLong =、緯度経度のユーザーが稼働するのを検索

SELECT info FROM table 
WHERE sqrt(($userLat - lat)^2 - ($userLong - long)^2) <= range 
ORDER BY username ASC

ることが望ましいと思うものでは有効ではありませんからコーディングの観点から.、本当にありがとうに上記の比較をPHP、MySQLは一つのクエリー?これを走ることができる事業を複数のカラム値からです。


更新+液

作成した別の質問に入るアドレスはこの問題は非常にコンパクト機能というこの問いました。この機能によるcoderprosとしてのインスピレーションでの彼の数多くりのための特定の状況).しかし、私は自分の機能が制限を入力の上、作成した別の機能です。見つけることができる。

MySQLユーザー定義の関数のための緯度経度の構文

役に立ちましたか?

解決

このniftyリルmySQLの機能に書いたすべきだという。

BEGIN
   DECLARE x decimal(18,15);
   DECLARE EarthRadius decimal(7,3);
   DECLARE distInSelectedUnit decimal(18, 10);

   IF originLatitude = relativeLatitude AND originLongitude = relativeLongitude THEN
          RETURN 0; -- same lat/lon points, 0 distance
   END IF;

   -- default unit of measurement will be miles
   IF measure != 'Miles' AND measure != 'Kilometers' THEN
          SET measure = 'Miles';
   END IF;

   -- lat and lon values must be within -180 and 180.
   IF originLatitude < -180 OR relativeLatitude < -180 OR originLongitude < -180 OR relativeLongitude < -180 THEN
          RETURN 0;
   END IF;

   IF originLatitude > 180 OR relativeLatitude > 180 OR originLongitude > 180 OR relativeLongitude > 180 THEN
         RETURN 0;
   END IF;

   SET x = 0.0;

   -- convert from degrees to radians
   SET originLatitude = originLatitude * PI() / 180.0,
       originLongitude = originLongitude * PI() / 180.0,
       relativeLatitude = relativeLatitude * PI() / 180.0,
       relativeLongitude = relativeLongitude * PI() / 180.0;

   -- distance formula, accurate to within 30 feet
   SET x = Sin(originLatitude) * Sin(relativeLatitude) + Cos(originLatitude) * Cos(relativeLatitude) * Cos(relativeLongitude - originLongitude);

   IF 1 = x THEN
          SET distInSelectedUnit = 0; -- same lat/long points
          -- not enough precision in MySQL to detect this earlier in the function
   END IF;

   SET EarthRadius = 3963.189;
   SET distInSelectedUnit = EarthRadius * (-1 * Atan(x / Sqrt(1 - x * x)) + PI() / 2);

   -- convert the result to kilometers if desired
   IF measure = 'Kilometers' THEN
          SET distInSelectedUnit = MilesToKilometers(distInSelectedUnit);
   END IF;

   RETURN distInSelectedUnit;
END

でoriginLatitude,originLongitude,relativeLatitude,relativeLongitude、測定パラメータとしてを測定するだけで簡単に Miles または Kilometers

こ!

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top