112 lines
3.4 KiB
PHP
112 lines
3.4 KiB
PHP
|
<?php
|
||
|
/**
|
||
|
* $Desc$
|
||
|
*
|
||
|
* @version $Id$
|
||
|
* @package opalestate
|
||
|
* @author Opal Team <info@wpopal.com >
|
||
|
* @copyright Copyright (C) 2019 wpopal.com. All Rights Reserved.
|
||
|
* @license GNU/GPL v2 or later http://www.gnu.org/licenses/gpl-2.0.html
|
||
|
*
|
||
|
* @website http://www.wpopal.com
|
||
|
* @support http://www.wpopal.com/support/forum.html
|
||
|
*/
|
||
|
|
||
|
if ( ! defined( 'ABSPATH' ) ) {
|
||
|
exit; // Exit if accessed directly
|
||
|
}
|
||
|
class OpalEstate_GeoLocation {
|
||
|
|
||
|
/*
|
||
|
* function to geocode address, it will return false if unable to geocode address
|
||
|
*/
|
||
|
public static function get_points_in_miles( $latitude, $longitude, $miles ) {
|
||
|
|
||
|
$equator = 69.172;
|
||
|
|
||
|
$maxlat = $latitude + $miles / $EQUATOR_LAT_MILE;
|
||
|
$minlat = $latitude - ($maxlat - $latitude);
|
||
|
$maxlong = $longitude + $miles / (cos($minlat * M_PI / 180) * $equator);
|
||
|
$minlong = $longitude - ($maxlong - $longitude);
|
||
|
|
||
|
return array(
|
||
|
'minlat' => $minlat,
|
||
|
'maxlat' => $maxlat,
|
||
|
'minlong' => $minlong,
|
||
|
'maxlong' => $maxlong
|
||
|
);
|
||
|
}
|
||
|
|
||
|
/*
|
||
|
* function to geocode address, it will return false if unable to geocode address
|
||
|
*/
|
||
|
public static function calculate( $lat1, $long1, $lat2, $long2 ) {
|
||
|
|
||
|
$EARTH_RADIUS_MILES = 3963;
|
||
|
$dist = 0;
|
||
|
|
||
|
//convert degrees to radians
|
||
|
$lat1 = $lat1 * M_PI / 180;
|
||
|
$long1 = $long1 * M_PI / 180;
|
||
|
$lat2 = $lat2 * M_PI / 180;
|
||
|
$long2 = $long2 * M_PI / 180;
|
||
|
|
||
|
if ($lat1 != $lat2 || $long1 != $long2) {
|
||
|
|
||
|
$dist = sin($lat1) * sin($lat2) + cos($lat1) * cos($lat2) * cos($long2 - $long1);
|
||
|
$dist = $EARTH_RADIUS_MILES * (-1 * atan($dist / sqrt(1 - $dist * $dist)) + M_PI / 2);
|
||
|
}
|
||
|
return $dist;
|
||
|
}
|
||
|
|
||
|
/*
|
||
|
* function to geocode address, it will return false if unable to geocode address
|
||
|
*/
|
||
|
public static function geocode( $address ){
|
||
|
|
||
|
// url encode the address
|
||
|
$address = urlencode($address);
|
||
|
|
||
|
// google map geocode api url
|
||
|
$url = opalestate_get_map_search_api_uri( $address );
|
||
|
|
||
|
// get the json response
|
||
|
// $resp_json = file get contents($url);
|
||
|
$resp_json = wp_remote_get($url);
|
||
|
|
||
|
// decode the json
|
||
|
$resp = json_decode($resp_json, true);
|
||
|
|
||
|
|
||
|
// response status will be 'OK', if able to geocode given address
|
||
|
if($resp['status']=='OK'){
|
||
|
|
||
|
// get the important data
|
||
|
$lati = isset($resp['results'][0]['geometry']['location']['lat']) ? $resp['results'][0]['geometry']['location']['lat'] : "";
|
||
|
$longi = isset($resp['results'][0]['geometry']['location']['lng']) ? $resp['results'][0]['geometry']['location']['lng'] : "";
|
||
|
$formatted_address = isset($resp['results'][0]['formatted_address']) ? $resp['results'][0]['formatted_address'] : "";
|
||
|
|
||
|
// verify if data is complete
|
||
|
if($lati && $longi && $formatted_address){
|
||
|
// put the data in the array
|
||
|
$data_arr = array();
|
||
|
array_push(
|
||
|
$data_arr,
|
||
|
$lati,
|
||
|
$longi,
|
||
|
$formatted_address
|
||
|
);
|
||
|
|
||
|
return $data_arr;
|
||
|
|
||
|
}else{
|
||
|
return false;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
else{
|
||
|
return false;
|
||
|
}
|
||
|
}
|
||
|
}
|