В базе данных есть таблица location :
id | latitude | longitude
---| -------- | --------
1 | 45.0000 | 90.0000
...
Поэтому я могу использовать SQL для запроса местоположений, которые мне нужны:
SELECT id FROM location
WHERE latitude BETWEEN min_latitude AND max_latitude
AND longitude BETWEEN min_longitude AND max_longitude;
Где min_latitude, max_latitude, min_longitude, max_longitude означают 4 границы на 1 км рядом с current_location.
Теперь я хочу знать, как я могу получить min_latitude, max_latitude, min_longitude, max_longitude с помощью current_location?
Я видел ответ на этот вопрос: Как чтобы получить ближайший район из списка мест?, если их слишком много allLocations , я не думаю, что это хорошее решение.
1 ответ
Имейте в виду, что ваш желаемый подход с max и min lat / lon выбирает строки, которые находятся внутри прямоугольника от текущей позиции, а не внутри круга, как предлагает диаграмма.
Проблема в том, что продольная дельта в градусах меняется с широтой на заданном расстоянии. Этот код упрощает Землю в идеальную сферу.
double centerLat = 45.0;
double centerLon = 90.0;
double d = 1000; // desired distance in meters
double angle = 45 * M_PI / 180; // 45 degrees in radians
double oneDegree = 111319.9; // distance in meters from degree to degree at the equator
double maxLat = centerLat + (d / oneDegree) * sin(angle);
double maxLon = centerLon + (d / (oneDegree*(cos(centerLat * M_PI / 180)))) * cos(angle);
double minLat = centerLat - (d / oneDegree)* sin(angle);
double minLon = centerLon - (d / (oneDegree*(cos(centerLat * M_PI / 180)))) * cos(angle);
double oneDegree = 111319.9
?
Похожие вопросы
Связанные вопросы
Новые вопросы
ios
iOS - мобильная операционная система, работающая на Apple iPhone, iPod touch и iPad. Используйте этот тег [ios] для вопросов, связанных с программированием на платформе iOS. Используйте связанные теги [target-c] и [swift] для проблем, характерных для этих языков программирования.