2017-07-13 10 views
0

緯度と経度をデータベースに保存すると、データ型Decimalとして格納されます。 経度は34として保存され、緯度は118 として保存されます。これはhaversine式で動作します。ユーザーの現在地から20マイル以内の場所を探しています。mySqlのhaversine式の正しいデータ型は何ですか

+0

いいえ、これ以上の精度が必要でしょう – Strawberry

+0

これはどれだけ離れていますか?それが1マイルまたは2マイル離れている場合は、それは大丈夫です。そして、この形式のhaversine式は動作しますか? – dscrown

+0

https://stackoverflow.com/questions/12504208/what-mysql-data-type-should-be-used-for-latitude-longitude-with-8-decimal-places – dscrown

答えて

1

いいえ、間違いなく動作しません。

1度の緯度は約70マイルです。これはあなたが望む精度よりはるかに大きいです。

距離を20マイルに換算する場合は、緯度と経度の小数点以下1桁が必要です.0.1度の緯度は7マイルで、0.1度の経度がそれに加算されます約10マイル(√2x 7 = 9.8)です。もちろん、ソースデータで利用可能な精度であれば、より良い結果が得られます。

おそらくここで間違っているのは、幅を指定せずに緯度と経度にDECIMALタイプを使用したことです。 MySQLでは、デフォルトでDECIMAL(10,0) - 10桁で、すべて小数点の前にあります(たとえば、1234567890.)。あなたはおそらくDECIMAL(10,6)の行に沿って何かを探しています。これにより、10桁の数字とその小数点以下6桁の数字(たとえば、1234.123456)を列に格納できます。 Six decimal places of latitude/longitude gives you a resolution of about 4 inchesなので、これ以上保存する必要はありません。

+0

何をするのが最善の方法でしょうかこの?コードを探すのではなく、10進数が正しい形式でない場合はどのようなアプローチを取るべきですか? – dscrown

+0

@dscrown DECIMAL型に関する注意を追加しました。 – duskwuff

関連する問題