2009-03-09 14 views
4

特定の国や都市に限定されているすべてのオブジェクトをGoogleマップに見つける必要があるアプリケーションが必要です。ジオ近接検索

Googleマップapiを使用して事前に緯度経度のオブジェクトをデータベースに保存しています。これらのオブジェクトは、サービスを提供することができる一定のサービス範囲/半径を有するサービスを提供する場合がある。

今の状況は、たとえばアムステルダムにあるオブジェクト をすべて探したいと思うようなものです。

アムステルダムにあるオブジェクト、アムステルダムに正確に位置していないオブジェクト、アムステルダムまでは であることがわかります。

アムステルダムの緯度、経度の値は Googleマップで返されています。また、それぞれのlat、lngの値と のサービス範囲/半径を持つオブジェクトもデータベースに格納されています。どうすればそれを可能にすることができますか?

+0

アムステルダム(または他の場所)は、市の境界線を表す不規則な多角形で表されてはなりませんか? –

+0

これは私の物理学の時代を思い出させる神です:アムステルダムが球であると仮定してください... – annakata

+0

それはあなた自身の質問の重複ではありません:http://stackoverflow.com/questions/610496? – vartec

答えて

2

おそらく国や都市をDBでポリゴンとして表現し、OpenGIS形式のポリゴン交差関数を使って交差させるべきです。

しかし、MySQLのは適切に( - 最小外接矩形のみMBR)をポリゴン交差点を実装していませありません。したがって、このアプローチは、理論上は間違いありませんが、MySQLではうまく動作しません。あなたはPostgresへの移行を検討したいかもしれません。

DBのMBR交差機能を使用して、ポリゴン/ポイント交差を行う独自のコードを補うことができます(これを行うライブラリを見つけることができます)。

+0

このソリューションは、データベースのスキーマまたはデータベース全体を変更する必要があるため動作しない可能性があります。別の方法がありますか?私はアムステルダムが存在するバウンディングボックスと、そのサービス範囲がアムステダムの境界ボックスと重なるオブジェクトの境界ボックスを得ることができます – Asif

+0

アムステルダムのポリゴンを持たない場合、どのように動作するのかわかりません。 –

+0

それでは、GoogleのAPIを使用してポリゴンの詳細を取得するにはどうすればよいですか? – Asif

1

MySQLのspatial extensionsをご覧ください。

Contains機能を使用する必要があります。しかし、ポールがコメントで述べたように、地域はポリゴンとして表現されるべきです。もしそうでなければ、あなたが持っているポイントを中心としたポリゴンを作成するのが最善の策だと私は信じています。

+0

どのように私は持っているポイントに基づいてポリゴンデータを計算することができますか?また、MySQLの空間拡張を使用するには、データベース構造を変更する必要がありますか? – Asif

+0

ポリゴン関数を使用するか、円の場合は距離を使用するだけです。はい、空間フィールドとインデックスを使用する必要があります。 –

+0

はいポリゴン機能を使用する必要がありますが、使用するポリゴン機能には私の国や都市を定義する座標が必要です。私たちはそれを得ることができるフォーム? – Asif

1

OKから基本的には、2つの緯度/経度の間の距離を計算しようとしています。私は、あなたの外にいる場所(10マイルと言う)を割り引くことから始めます。あなたの中心点から、10マイル、東、西、南、北の座標を取得したいと思うでしょう。これを行うには、Great-circle distanceの式を使用する必要があります。

このデータからさらにデータを破棄したい場合は、その時点からポイントを中心点から距離順に並べ替える必要があります。これを行うには、Haversine formula

私はあなたがPHPタグを持っていることがわかりますが、いくつかの数式と例をSQL(主に)とC#の両方に含めました。

Haversine Formula in C# and in SQL

Determine the distance between ZIP codes using C#

Great Circle SQL

Great Circle 2

+0

Thanxのヘルプ。しかし、これはあなたに2つのポイント間の距離を与えるだけです。 また、あなたは10マイルの範囲にあるポイントを見つけようとしています。 – Asif

+0

私の場合、私は特定の国/都市(範囲や半径に関係なく)にある点を見つけたいと思っています。この国や都市にはないが、近くの地域では国/都市の境界線 – Asif

1

あなたは、外部サービスへの接近の仕組みを残したいと思った場合にも、LocalSolr/LocalLuceneのようなもので見ることができます。