Poloha sa získa pomocou funkcie geolocation. Ak nie sú udelené potrebné povolenia alebo prehliadač túto funkciu nepodporuje, poloha sa zistí podľa IP adresy prostredníctvom API poskytovaného spoločnosťou Naver.
Pred použitím získajte API kľúč Naveru na adrese nižšie.
(https://www.ncloud.com/product/applicationService/geoLocation)
<?
function makeSignature($secretKey, $method, $baseString, $timestamp, $accessKey)
{
$space = ' ';
$newLine = "\n";
$hmac = $method.$space.$baseString.$newLine.$timestamp.$newLine.$accessKey;
$signautue = base64_encode(hash_hmac('sha256', $hmac, $secretKey,true));
return $signautue;
}
if($_POST['order'] == 'geolocation')
{
$hostNameUrl = 'https://geolocation.apigw.ntruss.com';
$requestUrl= '/geolocation/v2/geoLocation';
$accessKey = 'Zadajte accessKey.';
$secretKey = 'Zadajte secretKey.';
$ip = $_SERVER['REMOTE_ADDR'];
$timestamp = round(microtime(true) * 1000);
$baseString = $requestUrl.'?ip='.$ip.'&ext=t&responseFormatType=json';
$signautue = makeSignature($secretKey, 'GET', $baseString, $timestamp, $accessKey);
$url = $hostNameUrl.$baseString;
$is_post = false;
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_POST, $is_post);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$headers = array();
$headers[] = 'X-NCP-APIGW-TIMESTAMP: '.$timestamp;
$headers[] = 'X-NCP-IAM-ACCESS-KEY: '.$accessKey;
$headers[] = 'X-NCP-APIGW-SIGNATURE-V2: '.$signautue;
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
$response = json_decode(curl_exec ($ch), true);
if($response['geoLocation'])
{
$lat = $response['geoLocation']['lat'];
$lng = $response['geoLocation']['long'];
}else{
$lat = 37.535053;
$lng = 127.147263;
}
echo json_encode(array('latitude'=>$lat, 'longitude'=>$lng));
exit;
}
?>
<html lang="ko">
<head>
<meta charset="UTF-8">
<title>Výpočet polohy...</title>
</head>
<body>
<div style="width: 100%; text-align: center; display: inline-block; ">
<p>Pre bezproblémové používanie sa počíta vaša poloha.</p>
<p>Povoľte, prosím, prístup k polohe.</p>
</div>
<script>
function setPositionByGeo(pos)
{
document.cookie = "latitude=" + pos.coords.latitude;
document.cookie = "longitude=" + pos.coords.longitude;
location.href = "<?=$_GET['url'] ? $_GET['url'] : '/'?>";
}
function setPositionByIP()
{
var xhr = new XMLHttpRequest();
var dat = new FormData();
dat.append("order", "geolocation");
xhr.open("POST", window.location.pathname);
xhr.send(dat);
xhr.onload = function()
{
if(xhr.status === 200 || xhr.status === 201)
{
var res = JSON.parse(xhr.responseText);
if(res.latitude&&res.longitude)
{
document.cookie = "latitude=" + res.latitude;
document.cookie = "longitude=" + res.longitude;
location.href = "<?=$_GET['url'] ? $_GET['url'] : '/'?>";
}
}
};
}
window.onload = function() {
if (navigator.geolocation)
navigator.geolocation.getCurrentPosition(setPositionByGeo, setPositionByIP);
else
setPositionByIP();
}
</script>
</body>
</html>