Нахождение набора координат в определенном диапазоне от широты и долготы - PullRequest
2 голосов
/ 24 августа 2010

Я работаю над проектом в javascript с использованием карт Google.

Цель состоит в том, чтобы определить 16-20 координатных точек в пределах n километров от набора координат широты и долготы, чтобы 16 точек, если они были подключены, былисформируйте окружность вокруг исходных координат.

Конечная цель - сделать так, чтобы я мог вычислять координаты для построения и соединения на картах Google, чтобы создать окружность вокруг заданного набора координат.

Код будет выглядеть примерно так:

var coordinates = Array();
function findCoordinates(lat, long, range) {
}
coordinates = findCoordinates(-20, 40, 3);

Теперь, чтобы волшебство произошло в функции findCoordinates().

Ответы [ 2 ]

7 голосов
/ 24 августа 2010

По сути, вы пытаетесь найти N точек на радиусе круга от заданной точки с заданным радиусом.Один из простых способов сделать это - разбить 360 градусов круга на N равные куски и найти точки через равные промежутки времени.

Следующее должно примерно соответствовать тому, что вы ищете -

function findCoordinates(lat, long, range)
{
    // How many points do we want? (should probably be function param..)
    var numberOfPoints = 16;
    var degreesPerPoint = 360 / numberOfPoints;

    // Keep track of the angle from centre to radius
    var currentAngle = 0;

    // The points on the radius will be lat+x2, long+y2
    var x2;
    var y2;
    // Track the points we generate to return at the end
    var points = [];

    for(var i=0; i < numberOfPoints; i++)
    {
        // X2 point will be cosine of angle * radius (range)
        x2 = Math.cos(currentAngle) * range;
        // Y2 point will be sin * range
        y2 = Math.sin(currentAngle) * range;

        // Assuming here you're using points for each x,y..             
        p = new Point(lat+x2, long+y2);

        // save to our results array
        points.push(p);

        // Shift our angle around for the next point
        currentAngle += degreesPerPoint;
    }
    // Return the points we've generated
    return points;
}

Массив точек, которые вы получите, может быть легко использован для рисования желаемого круга на вашей карте Google.

Если ваша общая цель, однако, состоит в том, чтобы просто нарисовать круг с фиксированным радиусом вокруг точки, то гораздо более простым решением может быть использование наложения.Я обнаружил, что KMBox очень легко настроить - вы задаете ему центральную точку, радиус и наложение изображения (в вашем случае прозрачный круг с видимой линией вокруг края) изаботится обо всем остальном, включая изменение его размера при увеличении / уменьшении.

1 голос
/ 24 августа 2010

Мне нужно было найти какой-то код для вычисления расстояний Великого круга некоторое время назад (просто Google "Великий круг", если вы не знаете, о чем я говорю), и я нашел этот сайт:

http://williams.best.vwh.net/gccalc.htm

Возможно, вам удастся создать свой собственный код JavaScript для выполнения расчетов диапазона широты / долготы с использованием JavaScript с этого сайта в качестве ссылки.Для меня это звучит так, как будто вам просто нужно разделить 360 градусов по кругу на равное количество частей и провести линию на равном расстоянии от центра в каждой «опоре».Как только вы узнаете широту / долготу на другом конце каждой оси / расстояния, соединение точек для формирования многоугольника будет тривиальным.

...