Нужно найти латы и длинные места, которые находятся примерно в 50 км от места - PullRequest
0 голосов
/ 22 июля 2011

Мне нужно найти латы и длинные точки в любой точке, которая находится на расстоянии около 50 км от конкретной точки.Как мне это сделать?

Ответы [ 3 ]

1 голос
/ 22 июля 2011

Это приблизит вас, оно основано на доступных уравнениях и коде примера здесь :

window.pointsAround = function(centerLat, centerLng, radius) {
    var result = [];

    //do annoying trig maths to work out the delta in latitude between our start and end points
    var targetD = radius;          //km
    var R = 6371;                  //km
    var c = (targetD / R) / 2;
    var sqrtA = Math.sin(c);
    var a = sqrtA * sqrtA;
    var sinHalfDLat = Math.sqrt(a);
    var dLat = Math.asin(sinHalfDLat) * 2;
    var dLatDegrees = ((dLat / (2 * Math.PI)) * 360);

    var minLat = centerLat - dLatDegrees;            //furthest valid latitude above the origin
    var maxLat = centerLat + dLatDegrees;            //furthest valid latitude below the origin

    //alert("minLat=" + minLat + ", maxLat=" + maxLat + ", dLat=" + dLat + ", dLatDegrees=" + dLatDegrees);

    //topmost and bottommost points in the circle
    result.push({lat: minLat, lng: centerLng});
    result.push({lat: maxLat, lng: centerLng});

    //step from minLat to maxLat, interpolating coordinates that lie upon the circle
    var step = (maxLat - minLat) / 180.0;
    for (var count = 0; count < 179; count++) {
        minLat += step;
        dLat = (centerLat - minLat) * Math.PI / 180;

        //more annoying trig to work out the delta in longitude for our interpolated coordinate
        var dLon = 2 * Math.asin(Math.sqrt((a - (Math.sin(dLat/2) * Math.sin(dLat/2))) / (Math.cos(minLat) * Math.cos(centerLat))));
        var dLonDegrees = ((dLon / (2 * Math.PI)) * 360);

        var newLng = centerLng + dLonDegrees;
        var deltaLng = newLng - centerLng;
        result.push({lat: minLat, lng: newLng});
        result.push({lat: minLat, lng: centerLng - deltaLng});
    }

    return result;
};

Извините за ужасные имена переменных, как я уже сказал, онина основе примера реализации, в котором используются те же имена.

Вот рабочий пример: http://jsfiddle.net/HmchC/8/

График более эллиптический, чем мне бы хотелось, но ме.На данный момент это настолько близко, насколько я могу себе это представить.

Обновление

Я исправил проблему с эллиптическим графиком, он просто пропускал преобразование из градусов в радианы,Когда математика узнает, что только градусы имеют смысл?

В любом случае, рабочий пример здесь: http://jsfiddle.net/HmchC/11/

0 голосов
/ 22 июля 2011

Вы хотите найти формулу сбора урожая или кривую заполнения пространства или пространственный индекс. Формула harvesine вычисляет столкновение двух окружностей, а кривая заполнения пространства рекурсивно подразделяет карту на плитки. Это похоже на дерево quadtree, и оно уменьшает сложность 2d до сложности 1d. Вы хотите найти уникальный ключ или квадрант для поиска ближайших точек. Вы хотите заглянуть в блог дерева квадратов с пространственным индексом Ника Гильберта.

0 голосов
/ 22 июля 2011

ммм, не особенно понятно, что вы ищете здесь.

Если у вас есть известная точка (с известными широтой и долготой), и после широты и долготы точки лежат на окружности 50-километрового круга вокругизвестная точка зрения?

Вот так я все равно читаю это ... ты мог бы сделать это с помощью некоторой математики, я полагаю.Постоянное расстояние, такое как километр, будет означать постоянное изменение широты / долготы, которое вы можете рассчитать и определить.Там, где будет сложно, определить, какое из этих изменений применить к широте и сколько к длине, я полагаю, вы могли бы использовать компасный подшипник, если устройство поддерживает один

Правка: если мы правы в том, чтовы хотите, чтобы ссылка в комментарии Арот помогла вам

...