2017-07-13 13 views
-1

私は、動的に計算し、MySQL/Mariadbテーブル(Geospatial拡張機能を使用)の各行に提供されたGPS座標のセットを動的に返す方法について、 。SQLクエリで距離を動的に計算する

私のクエリは次のとおりです。(私は、指定された座標のクエリを動的に生成する代わりに、プレースホルダとして任意のGPS座標を使用しています)。

SET @distance = 0; 
select name, X(location), Y(location), 
@distance = (((ACOS(SIN(17.4681194 * PI()/180) 
* SIN(X(location) * PI()/180) + COS(17.4681194 * PI()/180) 
* COS(X(location) * PI()/180) * COS((78.495423 - Y(location)) 
* PI()/180)) * 180/PI()) * 60 * 1.1515) 
* 1.609) 
as distance from Points 

問題は、私の出力では、すべての距離が、私は慎重にポイントテーブルを播種したいので、私は、これらの値が間違っている知って0または1のどちらかであるということです。

SQLでこれをやっている理由は、Python(またはコードレベル)ではなく、ORDER BYとTOPを使用できるようにするためです。距離が正しく設定され、テーブルからの場所。次のように

私の出力は、次のとおりです。

+----------------+--------------------+-------------------+----------+ 
| name   | X(location)  | Y(location)  | distance | 
+----------------+--------------------+-------------------+----------+ 
| randomsr1  |   17.4901059 |  78.4819368 |  0 | 
| randomsr2  |   17.4895687 |  78.4830526 |  0 | 
| randomsr3  |   17.45602 |   78.448551 |  0 | 
| randomsr4  |   17.4681194 |   78.495423 |  1 | 
| randomsra  |   17.515589 |  78.4749738 |  0 | 
| randomsrb  |   17.4041657 |  78.4930975 |  0 | 
| randomsrc  | 17.40658541008292 | 78.47815974049286 |  0 | 
| randomsrd  | 17.468381171457448 | 78.46161846857831 |  0 | 
| randomsr6  | 17.4649552904376 | 78.45982138853833 |  0 | 
| location5  |   17.515562 |   78.474973 |  0 | 
+----------------+--------------------+-------------------+----------+ 
+0

ニースの出力を。ありがとうございました。 – Strawberry

+0

あなたは歓迎ですが、美化について言えば、それはすべてのMySQL/MariaDBです。 :) – kilokahn

+0

私は質問が本当にシンプルなものであることを知っていますが、誰も私がdownvotedになった理由を教えてくれますか?私はMySQLの専門家ではありません。これは私の学習経験でした。 おそらく、私に伝えるメッセージは、「あなたの問題を抱えてから、SOに来る前に眠っていますか? – kilokahn

答えて

0

申し訳ありませんが、ばかな質問。私は ''の前に '='を計算することを忘れてしまいました。

select name, X(location), Y(location), 
@distance := (((ACOS(SIN(17.4681194 * PI()/180) 
* SIN(X(location) * PI()/180) + COS(17.4681194 * PI()/180) 
* COS(X(location) * PI()/180) * COS((78.495423 - Y(location)) 
* PI()/180)) * 180/PI()) * 60 * 1.1515) 
* 1.609) 
as distance from Points; 

は今返します

+----------------+--------------------+-------------------+--------------------+ 
| name   | X(location)  | Y(location)  | distance   | 
+----------------+--------------------+-------------------+--------------------+ 
| randomsr1  |   17.4901059 |  78.4819368 | 2.831730948299528 | 
| randomsr2  |   17.4895687 |  78.4830526 | 2.7213934426686652 | 
| randomsr3  |   17.45602 |   78.448551 | 5.149213292389459 | 
| randomsr4  |   17.4681194 |   78.495423 |     0 | 
| randomsra  |   17.515589 |  78.4749738 | 5.705042143392742 | 
| randomsrb  |   17.4041657 |  78.4930975 | 7.1137416855834115 | 
| randomsrc  | 17.40658541008292 | 78.47815974049286 | 7.081262494869047 | 
| randomsrd  | 17.468381171457448 | 78.46161846857831 | 3.5847244189457905 | 
| randomsr6  | 17.4649552904376 | 78.45982138853833 | 3.7915534696376625 | 
| location5  |   17.515562 |   78.474973 | 5.702298292174848 | 
+----------------+--------------------+-------------------+--------------------+