位置情報をささっと取得したい

たまに使うけど、忘れてて毎回自分のリポジトリを調べるので、まとめておく。
#位置情報をさっと取得したい

```js:kl.location.js
// -------------------------
// HTML5での位置情報取得を少しだけ楽にする
// 2016.07 @ZrelyyDereva
// License: MIT 
// -------------------------
(function(global) {
    //ブラウザ以外では使わない
    if (!("document" in global)) return;
    global.$kl = global.$kl || {};

    global.$kl.messages = global.$kl.messages || {};
    global.$kl.messages.LOCATION_ERROR_NOT_SUPPORTED = "サポートされていません";
    global.$kl.messages.LOCATION_ERROR_NOT_ALLOWED = "利用が許可されていません";
    global.$kl.messages.LOCATION_ERROR_NOT_SUPPLIED = "デバイスの位置が判定できません";
    global.$kl.messages.LOCATION_ERROR_TIMED_OUT = "タイムアウトしました";
    global.$kl.messages.LOCATION_ERROR_OTHER = "その他のエラー";
    global.$kl.consts = global.$kl.consts || {};
    global.$kl.consts.LOCATION_API_KEY = "";//※位置情報→住所変換のための、GoogleのAPIキー

    var s = function(callback) {
        var _callback = callback;
        return function getlocationsuccess(position) {
            var latlng = position.coords.latitude + "," + position.coords.longitude;
            _callback({
                latlng: latlng,
            });
            var latlng = position.coords.latitude + "," + position.coords.longitude;
            var uri = "https://maps.googleapis.com/maps/api/geocode/json?latlng=" + latlng + "&key=" + global.$kl.consts.LOCATION_API_KEY;
            if (!$kl.ajax) {
                _callback = null;
                return
            };
            $kl.ajax({
                url: uri,
                method: "GET"
            }, function(r) {
                var r2 = JSON.parse(r);
                var addr = ""
                if (r2.results && r2.results[0]) {
                    addr = (r2.results[0].formatted_address).replace("日本, ", "");
                }
                _callback({
                    latlng: latlng,
                    address: addr
                });
                _callback = null;
            });
        }
    }
    var f = function(callback) {
        var _callback = callback;
        return function locationfaiulre(params) {
            switch (error.code) {
                case 1:
                    _callback(global.$kl.messages.LOCATION_ERROR_NOT_ALLOWED);
                    break;
                case 2:
                    _callback(global.$kl.messages.LOCATION_ERROR_NOT_SUPPLIED);
                    break;
                case 3:
                    _callback(global.$kl.messages.LOCATION_ERROR_TIMED_OUT);
                    break;
                default:
                    _callback(global.$kl.messages.LOCATION_ERROR_OTHER);
            }
            _callback = null;
        }
    }

    global.$kl.getLocation = function getLocation(success, failure) {
        if (!global.navigator) return failure(global.$kl.messages.LOCATION_ERROR_NOT_SUPPORTED);
        try {
            global.navigator.geolocation.getCurrentPosition(s(success), f(failure));
        } catch (e) {
            return failure(global.$kl.messages.LOCATION_ERROR_OTHER);
        }
    }
})((this || 0).self || global);
```
これを読み込んでおけば、$kl.getLocation で緯度経度、あれば住所が割とサクッと取得できて便利です。
\$kl.ajaxに関しては、私のリポジトリのどのフォルダにもあると思いますが、要は\$.ajaxみたいなものなので、適当にjQuery準拠に直してお試しください。

**08.15 19:00追記**
あんまり同じ位置に対して位置情報を求めても申し訳ないのと、クロスドメインの関係で面倒なこともあったので、位置情報はこんなPHP作ってます

```php:geocode.php
<?php

//-8<-8<-8<-8<-8M-8<-8<
// snipped 共通関数とJWTで認証 
//->8->8->8->8->8->8->8

$apikey = "xxxxxxx"; //APIのキー
$db = "geocodes";

if(!isset($_GET['latlng'])){
    json_error("latlng required");
}
$latlng = isset($_GET['latlng'])?$_GET['latlng']:"";

$pdo = _db_connect_one($db);

try {
    $tmp = db_execute_one($db,"select latlng from geocodes limit 1",$pdo);
} catch (Exception $er){
    if(strpos($er->getMessage(),'no such table') !== false){
        $tmp = db_execute_one($db,"CREATE TABLE geocodes(
            latlng TEXT primary key,
            data TEXT
            ) ",$pdo);
    }else{
        json_error($er);
    }
}

header('Access-Control-Allow-Origin: *');
header('Access-Control-Allow-Credentials: true');

$tmp = db_execute_one($db,"select data from geocodes where latlng='".urlencode($latlng)."'",$pdo);
//print_r($tmp);
if(count($tmp)==0){
    $uri = "https://maps.googleapis.com/maps/api/geocode/json?latlng=" . $latlng . "&key=". $apikey ."&language=ja";
    $data = file_get_contents($uri);
    $sql = "insert into geocodes (latlng,data) values (?,?);";
    $tmp = db_executequery_one($db,$sql,$pdo,[urlencode($latlng),$data]);  
}
$tmp = db_execute_one($db,"select data from geocodes where latlng='".urlencode($latlng)."'",$pdo);

echo @$tmp[0]['data'];

?>
```