web-dev-qa-db-ja.com

緯度と経度が円の中にあるかどうかを確認します

この図を参照してください。

enter image description here

私が知りたいのは:

  1. 緯度と経度、および距離(10キロメートル)が与えられたときにエリア(円)を作成する方法
  2. 緯度と経度がエリアの内側か外側かを確認(計算)する方法

Javaまたは特にAndroid for Google Maps API V2の場合)のコード例を教えていただければ幸いです

17
Peter Warbo

基本的に必要なのは、マップ上の2点間の距離です。

float[] results = new float[1];
Location.distanceBetween(centerLatitude, centerLongitude, testLatitude, testLongitude, results);
float distanceInMeters = results[0];
boolean isWithin10km = distanceInMeters < 10000;

Locationオブジェクトがすでにある場合:

Location center;
Location test;
float distanceInMeters = center.distanceTo(test);
boolean isWithin10km = distanceInMeters < 10000;

使用されているAPIの興味深い部分を次に示します。 https://developer.Android.com/reference/Android/location/Location.html

30
flx

新しい GeoFencing API を体験しましたか?それはあなたを助けるはずです。通常の実装には時間がかかります。 これ を使用すると、簡単に実装できます。

1
Seshu Vinay

https://developer.Android.com/reference/Android/location/Location.html を参照してください

Location areaOfIinterest = new Location;
Location currentPosition = new Location;

areaOfIinterest.setLatitude(aoiLat);
areaOfIinterest.setLongitude(aoiLong);

currentPosition.setLatitude(myLat);
currentPosition.setLongitude(myLong);

float dist = areaOfIinterest.distanceTo(currentPosition);

return (dist < 10000);
1
Android Newbie

これをチェックして:

 private boolean isMarkerOutsideCircle(LatLng centerLatLng, LatLng draggedLatLng, double radius) {
    float[] distances = new float[1];
    Location.distanceBetween(centerLatLng.latitude,
            centerLatLng.longitude,
            draggedLatLng.latitude,
            draggedLatLng.longitude, distances);
    return radius < distances[0];
}
1
gulab ahirwar

「エリアを作成する方法」という意味で、マップ上にエリアを描画したい場合は、マップV2リファレンス クラスCircleのドキュメント に例があります。

円の中心と点の間の距離が10 kmを超えているかどうかを確認するには、静的メソッド Location.distanceBetween(...) を使用することをお勧めします。これにより、不要なオブジェクトの作成が回避されます。

領域が円ではなく多角形である場合のコード例については、 ここ (回答の最後)も参照してください。

0
user2808624