LoginSignup
0
0

More than 5 years have passed since last update.

【gnavi】位置情報をブラウザから取得し初期位置に反映するPart3

Last updated at Posted at 2014-01-16

思い切ってmap.jsの方で処理するようにしてみました

map.jsの58行目付近に

map.js
//現在地取得
function geoLocate(){
    // 位置情報取得のオプション。高精度にする
    var position_options = {
        enableHightAccuracy: true
    };
    // 現在地取得(変わる毎に更新)
    navigator.geolocation.getCurrentPosition(success, fatal);

    //位置情報取得成功時
    function success(pos){
        document.getElementById('lat').value = pos.coords.latitude;
        document.getElementById('lng').value = pos.coords.longitude;
        ShowGMap();
        var myLatLng = new google.maps.LatLng(pos.coords.latitude, pos.coords.longitude);
        // ユーザのマーカーアイコンを変更
        var markerImage = new google.maps.MarkerImage(
            // 画像の場所
            "サイトURL/images/startposition.png",
            // マーカーのサイズ
            new google.maps.Size(64, 64),
            // 画像の基準位置
            new google.maps.Point(0, 0),
            // Anchorポイント
            new google.maps.Point(32, 32)
        );
        // 現在地のマーカー表示
        var marker = new google.maps.Marker({
            map:gn_map,
            draggable:false,
            animation: google.maps.Animation.DROP,
            position: myLatLng,
            title: "現在地"
        });
        return myLatLng;
    }
    // 位置情報取得失敗時
    function fatal(error){
        var message = "";
        switch(error.code){
            // 位置情報が取得出来ない場合
            case error.POSITION_UNAVAILABLE:
                message = "位置情報の取得ができませんでした。";
                break;
            // Geolocationの使用が許可されない場合
            case error.PERMISSION_DENIED:
                message = "位置情報取得の使用許可がされませんでした。";
                break;
            // タイムアウトした場合
            case error.PERMISSION_DENIED_TIMEOUT:
                message = "位置情報取得中にタイムアウトしました。";
                break;
        }
        window.alert(message);
        return null;
    }
}

そしてShowGMap()の中にgeoLocate();と書けばOKです
197行目付近になります(追加してるので少しずれてるかも

map.js
function ShowGMap() {
// display many markers.
    // mashmap(gn_map);
    geoLocate();//位置情報取得 平成26年1月16日
    if(document.getElementById('mt').value){
        gn_mt = document.getElementById('mt').value;
    }else{
        gn_mt = 'ROADMAP';
    }
    gn_iz=parseInt(document.getElementById('z').value);
    gn_ilt=document.getElementById('lat').value;
    gn_ilg=document.getElementById('lng').value;
    if(!InitializeGmap())return;
    if(gn_drkm){
        var k = gn_url+'/kml.php?'+gn_ulop;
        var g = new google.maps.KmlLayer(k,
                { suppressInfoWindows: true,
            map: gn_map});
        g.setMap(gn_map);
    }
    searchSales();
    // addListener
    google.maps.event.addListener(gn_map, 'idle', function() {
        var p = gn_map.getCenter();
        DrawLatLngTxt(p);
        var newZoomLevel = gn_map.getZoom();
        document.getElementById('z').value  =newZoomLevel;
        document.getElementById('sz').innerHTML  =newZoomLevel;
    });
    // addListener
    google.maps.event.addListener(gn_map, 'maptypeid_changed', function() {
        document.getElementById('mt').value = gn_map.getMapTypeId().toUpperCase();
    });
    // addListener
    google.maps.event.addListener(gn_map, 'click', function(){
        gn_infowindow.close(gn_map);
    });
    // setcenter
    var c = new google.maps.LatLng(document.getElementById('lat').value,document.getElementById('lng').value);
    gn_map.setCenter(c);
    gn_map.setZoom(parseInt(document.getElementById('z').value));
    if(gn_ep)MapClick();
}

これを実装すると
開いた時にブラウザから位置情報を取得し、初期位置になった場所に現在地とタイトルをつけたマーカーを設置します

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0