Как определить, находится ли точка в окружности?
Как я могу проверить, находится ли точка LatLng в пределах круга? (Google Maps JavaScript v3)
метод getBounds () возвращает ограничивающую рамку для круга, который является прямоугольником, поэтому, если точка выходит за пределы круга, но находится в ограничивающем поле, вы получите неправильный ответ.
6 ответов
использовать библиотека сферической геометрии (обязательно включите его в API)
function pointInCircle(point, radius, center)
{
    return (google.maps.geometry.spherical.computeDistanceBetween(point, center) <= radius)
}
вы можете просто выполнить сравнение расстояний вручную, довольно тривиально.
(x1 - x2)^2 + (y1 - y2)^2 <= D^2 
вы можете использовать объект Circle, чтобы показать его;
new google.maps.Circle({
            map : map,
            center : new google.maps.LatLng(lat,lng),
            strokeColor:'#00FFCC',
            strokeWeight:2,
            fillOpacity:0,
            radius:radiusm
        });
и применить теорему Пифагора к координатам: но в этом случае сделать его" реальным " кругом, так как соотношение между 1° lat и долготой варьируется в разных широтах, вы должны по крайней мере настроить их так:
var kmRadius = 100; //(radius of 100 km)
var lat_gap = kmRadius/111.1;
var lng_gap = lat_gap / Math.cos(lat / (Math.PI/180));
почему бы вам просто не вычислить это с помощью теорема Пифагора? Вы знаете a2+b2=c2. Если c меньше R (радиус), вы знаете, что он внутри.
var isInside=Math.pow(x1 - x2, 2) + Math.pow(y1 - y2, 2) >= r*r;
что-то вроде этого должно сделать трюк (код не проверен):
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;
}
попробуйте это (Javascript):
const toRadians = (val) => {
   return val * Math.PI / 180;
}
const toDegrees = (val) => {
   return val * 180 / Math.PI;
}
// Calculate a point winthin a circle
// circle ={center:LatLong, radius: number} // in metres
const pointInsideCircle = (point, circle) => {
    let center = circle.center;
    let distance = distanceBetween(point, center);
    return distance < circle.radius; // Use '<=' if you want to get all points in the border
};
const distanceBetween = (point1, point2) => {
    var R = 6371e3; // metres
    var φ1 = toRadians(point1.latitude);
    var φ2 = toRadians(point2.latitude);
    var Δφ = toRadians(point2.latitude - point1.latitude);
    var Δλ = toRadians(point2.longitude - point1.longitude);
    var a = Math.sin(Δφ / 2) * Math.sin(Δφ / 2) +
            Math.cos(φ1) * Math.cos(φ2) *
            Math.sin(Δλ / 2) * Math.sin(Δλ / 2);
    var c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1 - a));
    return R * c;
}
ссылки:http://www.movable-type.co.uk/scripts/latlong.html
этот вспомогательный модуль npm делает то же самое и возвращает логическое значение относительно того, находится ли элемент в круге.