2011-01-08 14 views
5

MySQLデータベースに何千もの緯度/経度の点を保存したいと思います。テーブルを設定し、地理空間拡張を使用してデータを追加することに成功しました。この場合、 'coord'列はPoint(lat、lng)です。球形ジオメトリを使用したMySQLジオスペースエクステンションの使用方法

問題:

I、迅速「X」度、経度「Y」度緯度する「N」の最も近いエントリを検索します。 Distance()関数はまだ実装されていないので、GLength()関数を使用して、(X、Y)と各エントリ間の距離を計算し、昇順にソートし、N個の結果に限定します。問題は、これが球形ジオメトリとの最短距離を計算していないことです。つまり、Y = 179.9度の場合、最も近いエントリのリストには、179.9から始まり、-179.9から増加する経度の近い方のエントリが存在するにもかかわらず、減少するだけの経度が含まれます。

データベースで球形のジオメトリを使用する場合、経度の不連続性はどのように扱われますか?これには簡単な解決策が必要ですが、私は何か役に立つものが見つからないので、間違ったことを探していなければなりません。

GLength()関数を忘れ、角度分離を計算するための独自の関数を作成する必要がありますか?私がこれを行うなら、それはまだ速く地理空間拡張を利用するでしょうか?

ありがとうございます!

ジョシュ


UPDATE:

This私は上記の記述しています正確に何です。ただし、SQL Serverのみです。明らかにSQL Serverには、ジオメトリ地理データ型があります。地理学は私が必要とするものを正確に行います。 MySQLに似たものがありますか?

答えて

4

データベースで球形のジオメトリを使用する場合、経度の不連続性はどのように処理されますか?

ジオスペリアルの拡張機能は本当に嗅ぎタバコではないので、MySQLを使用する人はほとんどいません。ドキュメントから

"All calculations are done assuming Euclidean (planar) geometry."

ソリューションは、通常roll your ownにあります。

また、距離が500マイル未満の場合は、緯度と経度を直角座標として扱い、ユークリッド距離式(sqrt(a^2 + b^2))を使用してください。

+0

答えをありがとう。人々はこれに何を使うのですか?しばらく前にリンクしたページを見ましたが、それは指定された緯度/経度に最も近いポイントを見つける問題を解決するに過ぎません。地域内のすべてのポイントを要求するという問題は解決しません。ロールを使用して独自の方法では、178 lonから-178 lonまで、30 latから35 lat(矩形領域)までのすべてのポイントを要求することはできません。 – Joshua

+0

私は[PostGIS](http://postgis.refractions.net/)を使用しています。使用できるオープンソースライブラリもいくつかあります - [osgeo](http://www.osgeo.org/)をチェックしてください。あなたがしていることすべてが相対的な距離計算であっても、それは残忍かもしれません。 – Seth

関連する問題