计算两个邮政编码之间的距离
Working out the distance between two postcodes
我已经查看了其他已回答的问题,但是我仍然不确定如何回答;
将包括经度、纬度、Grid-N 和 Grid-E 在内的英国邮政编码数据获取到我的数据库中
如果我使用 API 我该怎么做?我从哪里开始?
- 我是否需要使用毕达哥拉斯定理来计算两个邮政编码之间的距离?
- 当用户添加 属性 时,我的数据库中有一个 table。也许,当有人添加 属性 时,有一种方法可以将该邮政编码连同邮政编码的其他信息(长、纬度、网格参考)添加到我的邮政编码 table 中,以便我可以计算两个邮政编码之间的距离。
谢谢
我有一个 class 我专门为此使用:
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}®ion=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']
];
}
}
我已经查看了其他已回答的问题,但是我仍然不确定如何回答;
将包括经度、纬度、Grid-N 和 Grid-E 在内的英国邮政编码数据获取到我的数据库中
如果我使用 API 我该怎么做?我从哪里开始?
- 我是否需要使用毕达哥拉斯定理来计算两个邮政编码之间的距离?
- 当用户添加 属性 时,我的数据库中有一个 table。也许,当有人添加 属性 时,有一种方法可以将该邮政编码连同邮政编码的其他信息(长、纬度、网格参考)添加到我的邮政编码 table 中,以便我可以计算两个邮政编码之间的距离。
谢谢
我有一个 class 我专门为此使用:
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}®ion=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']
];
}
}