いつもお世話になっております。
現在PHP+MySQL5系(MariaDB)で、特定の施設に対し近隣の施設3箇所を表示するスクリプトを作っているのですが、思ったような結果が得られず困っております。SQL文に変数で入れた場合と、直接座標を書き込んだ場合で大きく結果が異なるのです。
手順は以下の通りです。
ベースになる施設の座標は以下のSQLで取得
SQL
1select X(s_location),Y(s_location) from shisetsu where id = 15;
上記で得られた結果を変数に入れる
PHP
1$lat = $location[0]; 2$lng = $location[1];
座標が取得できているか確認のため表示してみる → OK
PHP
1echo $lat; // 35.65802690046396 2echo $lng; // 139.74535764076472
次に上記座標を基点に近隣施設3箇所を表示させます。
SQL
1SELECT X(s_location) as lng,Y(s_location) as lat, 2(6371*acos(cos(radians( $lat ))*cos(radians(Y(s_location)))*cos(radians(X(s_location))-radians( $lng ))+sin(radians( $lat ))*sin(radians(Y(s_location))))) as distance 3 from shisetsu order by distance LIMIT 1,3";
↑この書き方では実際と大きく異なる結果になってしまうのですが、
SQL
1SELECT X(s_location) as lng,Y(s_location) as lat, 2(6371*acos(cos(radians( 35.65802690046396 ))*cos(radians(Y(s_location)))*cos(radians(X(s_location))-radians( 139.74535764076472 ))+sin(radians( 35.65802690046396 ))*sin(radians(Y(s_location))))) as distance 3 from shisetsu order by distance LIMIT 1,3";
のように、$lat、$lngを実際の座標の値に置き換えると期待通りの結果が表示されます。SQL文の書き方か変数の取扱いがおかしいのでしょうか?MySQLのGEOMETRY型を使うのは今回が初めてで、よく分かっていない部分も多々あるのですが、アドバイス頂けたら幸いです。何卒よろしくお願いいたします。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。