Вычисление расстояния между двумя почтовыми индексами

Я смотрел на другие вопросы, на которые были даны ответы, однако я все еще не уверен, как это сделать;

  1. Получить данные почтового индекса Великобритании, включая долготу, широту, Grid-N и Grid-E, в мою базу данных

  2. Если я использую API, как мне это сделать? С чего начать?

  3. Нужно ли мне использовать теорему Пифагора для вычисления расстояния между двумя почтовыми индексами?
  4. У меня есть таблица в моей базе данных, когда пользователь добавляет свойство. Может быть, есть способ, когда кто-то добавляет свойство, он может добавить этот почтовый индекс вместе с другой информацией о почтовых индексах (long, lat, grid-ref) в мою таблицу почтовых индексов, чтобы я мог определить расстояние между двумя почтовыми индексами.

Спасибо

-1

Решение

У меня есть класс, который я использую специально для этого:

class Geocode
{
/**
* Work out the distance between two sets of lat/lng coordinates as the crow flies.
*
* @param float $lat1
* @param float $lng1
* @param float $lat2
* @param float $lng2
*
* @return float
*/
public static function distance($lat1 = 0.0, $lng1 = 0.0, $lat2 = 0.0, $lng2 = 0.0) {
$theta = $lng1 - $lng2;
$dist = sin(deg2rad($lat1)) * sin(deg2rad($lat2)) +  cos(deg2rad($lat1)) * cos(deg2rad($lat2)) * cos(deg2rad($theta));
$dist = acos($dist);
$dist = rad2deg($dist);
return $dist * 60 * 1.1515;
}

/**
* Get the lat/lng coordinates for an address.
*
* @param string $address
*
* @return stdClass
*/
public static function convert($address = '')
{
$address = str_replace(" ", "+", urlencode(str_replace(PHP_EOL, ', ', $address)));
$url = "https://maps.googleapis.com/maps/api/geocode/json?address={$address}&region=uk&sensor=false";

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$response = json_decode(curl_exec($ch), TRUE);

if($response['status'] != 'OK') {
return (object) ['status' => $response['status']];
}
$geo = $response['results'][0]['geometry'];

return (object) [
'lat'       => $geo['location']['lat'],
'lng'       => $geo['location']['lng'],
'status'    => $response['status']
];
}
}
0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]