2009-07-09 17 views
3

Grailsの下でGoogleマップを使用してマッシュアップを行っています。ユーザーはgeofencesを作成できます。地図上のある点と半径を選択します。これは私のデータベースに格納され、アプリケーションは常にGPSデバイスから座標のセットを受け取ります。円内の座標を見つける

受信した座標を円に格納されている領域と比較したいと思います。ポイントが円の内側(または外側)にある場合、プログラムはアクションを実行します。しかし、座標が円の内側/外側にあるかどうか調べる方法を知りたい。これを可能にするJavascriptライブラリがありますが、私はこれをサーバー上で行う必要があります。

このためのJava(またはGroovy)ライブラリはありますか? どのように実装しますか?円の距離点から中心が円の< = 半径がある場合

答えて

6

それは円の内側です。
エリアがすべてのサークルに比べて複数のサークルで作成されている場合は、それほど時間がかかりません。

java.awt.geom.Point2D.Doubleはこれに最適です。

4

「完璧」である必要がない場合は、円などのプロットを心配する必要はありません。 2つの場所(テストしたい場所と円の中心)を取得し、ピタゴラスを使用して距離を見つけることができます。その距離が円の半径よりも小さい場合は、内側にあります。

しかし、これが完璧ではない理由は、あなたのポイントではおそらく緯度と経度を取得しようとしているということです。地球は球です。それで、地球の極の近くで、これは崩壊するでしょう。しかし、それはあなたがやっていることに十分に良いかもしれません。

0

選択した座標と円の中心との距離であるベクトルを見つけ、ベクトルの成分を二乗して加算して、選択した座標と円の中心との間の平方距離を計算します一緒に;そのスカラー(二乗距離)が半径の二乗よりも小さい場合、点は円内にあります。

この方法では、平方根をとる必要がなくなり、通常の距離比較と同じ正確さが得られます。

0

1つの可能性は、中心点からの距離を計算し、それを半径と比較することです。

アプリケーションによっては、世界が2次元ではなく球であることを考慮する必要があります。地球上の距離を計算するには、formulaを使用します。

2

悲しいことに、GPSの座標は度単位であるため、悲しいことに、ここの回答のほとんどは便利には機能しません。緯度と経度の2つの点から大きな円の距離に変換する必要があります。これは簡単なピタゴラスの定理が不足しています。

GoogleマップAPIを使用している場合は、おそらくGLatLngを使用して必要な作業をすべて行うことができます。他のポスターが指摘しているように、2点間の距離が指定された円の半径よりも小さいと判断できます。特にGLatLng.distance(other:GLatLng)はGPS位置の間のメートル距離を返します。

実際に円を表示するには、もう少し精巧さが必要です。円周を描くにはGPolygonを作成する必要があります。これを行うための多くの無料のJavaScript関数があります。

0

あなたはGoogleマップを使用しており、地理的距離のためにユークリッドジオメトリではなく球形ジオメトリが保持されているためです。しかし、駐車場などのように相対距離が小さい場合は、ユークリッド距離式(http://en.wikipedia.org/wiki/Distance)を使用して、点が円の内側か外側かを調べることができます。

私はあなたが円の中心C(XC、YC)とその半径の座標を知っていると推定、R.次に任意の点P(X1、Y1)のため

正方形としてユークリッド距離、Dを見つけます。根((x1-xc)^ 2 +(y1-yc)^ 2))。 D> Rの場合、点は円の外側にあります。 D < Rの場合、点は円の内側にあります。 D = Rの場合、点は円の円周上にあります。

距離を測定している場合は、測地線を探してください(http://en.wikipedia.org/wiki/Great-circle_distanceを確認してください)。

私はそれが役に立ちそうです。

歓声

2

VictorとBeskaには正しい答えがあります。つまり、ポイントと中心の間の距離が半径よりも小さい場合、それは円の中にあります。

great circle 2点間の距離はGeoTools 'GeodeticCalculatorです。特に、setStartingGeographicPointsetDestinationGeographicPointを使用してポイントと半径を設定した後、getOrthodromicDistanceを呼び出して距離を返します。

関連する問題