Я пытаюсь разработать алгоритм «разделяй и властвуй» для определения квадратов широты и долготы.
Я буду sh для начала с квадрата 800 х 800 миль вокруг Великобритании. Затем разделите это на четыре квадрата и затем рекурсивно повторяйте этот процесс, пока квадраты не станут 25 квадратных миль. Затем это будет использоваться для фильтрации нежелательных результатов поиска близости в базе данных местоположений.
Однако алгоритм, который у меня есть, который применяет смещение к широте / долготе (см. Код ниже), дает мне проблемы. Я пробовал и другие, но с такими же результатами. Я думаю, что это может быть мое понимание применения системы координат к сфере.
Я ожидал, что с начальной точкой, двигаясь на восток на 800 миль, а затем на запад на 800 миль, мы вернемся к (приблизительно) там же. Однако это не так:
var coord =
{
lat : 60.678413562308236,
lng : -12.5
};
// Apply a distance and bearing to a set of coords.
var addOffset = function(coord, distance, angle)
{
// Earth Radius
//var radius = 6378.14; // KM
var radius = 3958.8; // Miles
// Degrees to Radians
var lat = coord.lat * (Math.PI/180);
var lng = coord.lng * (Math.PI/180);
var bearing = angle * (Math.PI/180);
var lat2 = Math.asin(Math.sin(lat)*Math.cos(distance/radius) + Math.cos(lat)*Math.sin(distance/radius)*Math.cos(bearing));
var lng2 = lng + Math.atan2(Math.sin(bearing)*Math.sin(distance/radius)*Math.cos(lat), Math.cos(distance/radius)-Math.sin(lat)*Math.sin(lat2));
// back to degrees
lat2 = lat2 * (180/Math.PI);
lng2 = lng2 * (180/Math.PI);
return { lat : lat2, lng : lng2};
}
console.log("start");
console.log(coord);
console.log("Move 800 miles east");
coord = addOffset(coord, 800, 90.0) // East
console.log(coord);
console.log("Move 800 miles west");
coord = addOffset(coord, 800, 270.0) // West
console.log(coord);
Кроме того, когда я «гуляю» по площади 800 миль вокруг Великобритании и нанося точки на карту Google, я получаю большие проблемы! Приведенный ниже рисунок начинается с северо-запада, идет на юг 800 миль, затем идет на восток 800 миль, затем на север 800 миль, затем на запад 800 миль. Как видите, все пошло совсем не так:
Here's a fiddle (couldn't work out how to get the map working on a code snippet here):
https://jsfiddle.net/leetaylor/aoxnsqeu/6/
Может ли кто-нибудь объяснить, в чем я ошибаюсь? Можно ли разделить географию на квадраты с помощью широты / долготы?