Files
dev-chiefworks f76abffdcd first commit
2022-05-31 16:21:53 -04:00

122 lines
4.2 KiB
PHP

<?php
class Geocode
{
public static function geocodeAddress($address)
{
global $httpAuthToken, $oauth_api;
if (!empty($address)) {
$data = http_build_query(
array(
'address' => $address,
)
);
$url = $oauth_api . "geocode?" . $data;
$opts = array(
'http' => array(
'method' => "GET",
'timeout' => 60, /* 1 minute */
'header' =>
"Content-Type: application/x-www-form-urlencoded\r\n" .
"Accept: application/json\r\n" .
"Authorization: Server-Token ${httpAuthToken}\r\n",
),
);
$context = stream_context_create($opts);
$body = file_get_contents($url, false, $context);
$geocoded = json_decode($body, true);
if (is_array($geocoded) && isset($geocoded["data"]) && !isset($geocoded["error"])) {
return $geocoded["data"];
}
}
return null;
}
public static function reverseGPS($latitude, $longitude)
{
global $httpAuthToken, $oauth_api;
$body = null;
if (!empty($latitude && !empty($longitude))) {
$data = http_build_query(
array(
'lat' => $latitude,
'lng' => $longitude,
)
);
$url = $oauth_api . "reverse?" . $data;
$opts = array(
'http' => array(
'method' => "GET",
'timeout' => 60, /* 1 minute */
'header' =>
"Content-Type: application/x-www-form-urlencoded\r\n" .
"Accept: application/json\r\n" .
"Authorization: Server-Token ${httpAuthToken}\r\n",
),
);
$context = stream_context_create($opts);
$body = file_get_contents($url, false, $context);
$geocoded = json_decode($body, true);
if (is_array($geocoded) && isset($geocoded["data"]) && !isset($geocoded["error"])) {
return $geocoded["data"];
}
}
return null;
}
public function getTimeZone($lat, $lng)
{
global $googleKey;
$result = array("message" => "Unexpected error", "dstOffset" => 0, "rawOffset" => 0, "status" => "Error", "timeZoneId" => "", "timeZoneName" => "");
$url = "https://maps.googleapis.com/maps/api/timezone/json?location=${lat},${lng}&timestamp=" . time() . "&key=" . $googleKey;
$resp_json = file_get_contents($url);
$resp = json_decode($resp_json, true);
if ($resp["status"] == 'OK') {
$result = $resp;
if ($resp["timeZoneId"] != "") {
$result["message"] = "";
} else {
$result["message"] = "Failed to get timezone offset for: ${lat},${lng}\n";
}
} else {
$result["message"] = "Invalid service response code\n";
}
return $result;
}
public static function getGeoInfoBigDataCloud($latitude, $longitude)
{
global $city_keywords;
$url = "https://api.bigdatacloud.net/data/reverse-geocode-client?latitude=" . $latitude . "&longitude=" . $longitude . "&localityLanguage=en";
$opts = array(
'http' => array(
'method' => "GET",
),
);
$context = stream_context_create($opts);
$body = file_get_contents($url, false, $context);
$geoinfo = json_decode($body, true);
if (count($geoinfo) > 0 && isset($geoinfo['localityInfo'])) {
$localities = $geoinfo['localityInfo']['administrative'];
foreach ($localities as $k => $v) {
$name = isset($v['name']) ? $v['name'] : "";
$description = isset($v['description']) ? $v['description'] : "";
$info = strtolower($name . $description);
foreach ($city_keywords as $key) {
if (strpos($info, $key) !== false) {
return $v['name'];
}
}
}
}
return null;
}
}