8

LatLng ポイントが円の境界内にあるかどうかをテストするにはどうすればよいですか? (Google マップ JavaScript v3)

getBounds() メソッドは円のバウンディング ボックス (長方形) を返すため、ポイントが円の外側にあるがバウンディング ボックス内にある場合、間違った答えが得られます。

4

6 に答える 6

15

球面ジオメトリ ライブラリを使用します(必ず API に含めてください)。

function pointInCircle(point, radius, center)
{
    return (google.maps.geometry.spherical.computeDistanceBetween(point, center) <= radius)
}
于 2013-01-30T11:42:41.527 に答える
3

距離の比較は、かなり簡単に手動で行うことができます。

(x1 - x2)^2 + (y1 - y2)^2 <= D^2 
于 2013-01-30T07:09:25.680 に答える
2

Circleオブジェクトを使用して表示することができます。

new google.maps.Circle({
            map : map,
            center : new google.maps.LatLng(lat,lng),
            strokeColor:'#00FFCC',
            strokeWeight:2,
            fillOpacity:0,
            radius:radiusm
        });

そして、ピタゴラスの定理を座標に適用します。ただし、この場合、緯度と経度の1°の間の比率は緯度によって異なるため、これを「実際の」円にするには、少なくとも次のように調整する必要があります。

var kmRadius = 100; //(radius of 100 km)
var lat_gap = kmRadius/111.1;
var lng_gap = lat_gap / Math.cos(lat / (Math.PI/180));
于 2013-01-30T07:24:37.957 に答える
0

このような方法でうまくいくはずです(コードはテストされていません):

public boolean pointInCircle(Circle c, LatLng coord) {
  Rectangle r = c.getBounds();
  double rectX = r.getX();
  double rectY = r.getY();
  double rectWidth = r.getWidth();
  double rectHeight = r.getHeight();

  double circleCenterX = rectX + rectWidth/2;
  double circleCenterY = rectY + rectHeight/2;

  double lat = coord.getLatitude();
  double lon = coord.getLongitude();

  // Point in circle if (x−h)^2 + (y−k)^2 <= r^2
  double rSquared = Math.pow(rectWidth/2, 2);
  double point = Math.pow(lat - circleCenterX, 2) + Math.pow(lon - circleCenterY, 2);

  return (point <= rSquared) ? true : false;
}
于 2013-01-30T07:27:59.250 に答える
0

これをピタゴラスの定理で簡単に計算してみませんか?あなたはa²+b²=c²を知っています。c が r (半径) よりも小さい場合は、内側にあることがわかります。

var isInside=Math.pow(x1 - x2, 2) + Math.pow(y1 - y2, 2) >= r*r;
于 2013-01-30T07:11:52.553 に答える