Я занимаюсь поиском любимых мест с помощью API Mapbox и Google Maps.
На данный момент я использую формулу haversine для осуществления кругового поиска, начиная с точки. Например, когда я нажимаю на штат на карте, это возвращает мне широту и долготу штата как такового (точно центр штата или страны), а также возвращает мне широту и долготу каждой кардинальной точки (север-юг). Восток-Запад) по формуле haversine я вычисляю расстояние между центром и каждой из точек, и с помощью этого я получаю среднее расстояние с помощью PHP.
math class
{
const radius = 6371;
public function __construct ()
{
}
public function harversine ($ lat, $ lng, $ lat2, $ lng2)
{
$ d = 0;
$ t1 = deg2rad ($ lat);
$ t2 = deg2rad ($ lat2);
$ dt = deg2rad (($ lat2 - $ lat));
$ dl = deg2rad (($ lng2 - $ lng));
$ a = (sin ($ dt / 2) * sin ($ dt / 2)) +
(cos ($ t1) * cos ($ t2)) *
(sin ($ dl / 2)) sin ($ dl / 2));
$ c = 2 * atan2 (sqrt ($ a), sqrt ((1 - $ a)));
$ d = self :: radius * $ c;return floor ($ d);
}
}
Теперь, используя это среднее расстояние, я выполняю поиск в базе данных на основе этого расстояния, чтобы найти места, которые я сохранил, с их соответствующими координатами, которые являются моими любимыми, в пределах базы я снова вычисляю формулу.
Все идеально, проблема заключается в круговом поиске и не ограничивается передачей другого состояния, если расстояние определяет его таким образом, я объясню немного подробнее на примере.
Если я ищу Тлапу, штат Герреро, Мексика и обрабатываю поиск, этот поиск выполняется в форме круга на расстоянии X (от центра).
Я приведу все места, если они находятся в области круга, проблема в том, что она проходит от демаркации штата Герреро и, следовательно, больше не работает с моим приложением.
Я говорю, что я сделал поиск в пределах ограничений штата, не проходя через другое государство, но учитывая расстояние поиска, в этом примере 50 км, он продолжит поиск на западе и юго-западе, но больше не будет выходить за пределы северо-востока и северо-востока.
Существует ли какой-либо API Google или Mapbox, который дает мне эти границы или как я могу их рассчитать?
Задача ещё не решена.
Других решений пока нет …