2017-11-20 7 views
-1

私の店舗ロケーターはユーザーの現在地を中心に設定されていますが、ユーザーが自分の場所を許可しない場合、その場所をデフォルトに設定するにはどうすればよいですか知られている? elseステートメントのコードは機能しませんが、私はなぜそれがわかりません。ここで私が持っているものです。Googleマップはユーザーの現在地を中心にしています。

google.maps.event.addDomListener(window, 'load', function() { 

(function() { 

    if(!!navigator.geolocation) { 

     var map; 

     var mapOptions = { 
      zoom: 12, 
      mapTypeId: google.maps.MapTypeId.ROADMAP 
     }; 

     map = new google.maps.Map(document.getElementById('map-canvas'), mapOptions); 

     navigator.geolocation.getCurrentPosition(function(position) { 

      var geolocate = new google.maps.LatLng(position.coords.latitude, position.coords.longitude); 

      map.setCenter(geolocate); 

     }); 

    } else { 

    var map = new google.maps.Map(document.getElementById('map-canvas'), { 
     center: new google.maps.LatLng(37.7749, -122.4194), 
     zoom: 12, 
     mapTypeId: google.maps.MapTypeId.ROADMAP 
    }); 
    } 

    var panelDiv = document.getElementById('panel'); 

    var data = new MedicareDataSource; 

    var view = new storeLocator.View(map, data, { 
    geolocation: false, 
    features: data.getFeatures() 
    }); 

    new storeLocator.Panel(panelDiv, { 
    view: view 
    }); 

})(); 
}); 
+1

コンソールは何と言っていますか?あなたは働いていないということは何を意味するのでしょうか? –

+0

[Geolocation map in default]の複製が可能です(https://stackoverflow.com/questions/33092631/geolocation-map-by-default) – geocodezip

答えて

0

、それが実行されることはありませんので、他のコードは動作しない(!!navigator.geolocationが真です)。 geolocationが使用可能でエラーが発生した場合は、error関数が呼び出されますが、定義されていません。

getCurrentPosition方法は(the documentationから)次のように定義される。

navigator.geolocation.getCurrentPosition(成功[、エラー[、オプション]])
パラメータ
成功 - コールバックPositionオブジェクトを唯一の入力パラメータとして受け取る関数です。
エラー - オプション - PositionErrorオブジェクトを唯一の入力パラメータとして使用するオプションのコールバック関数です。
オプション - オプション - オプションのPositionOptionsオブジェクト。その後

function error(err) { 
    console.log('ERROR('+err.code+'): '+err.message); 
    if (map && map.setCenter) map.setCenter(new google.maps.LatLng(37.7749, -122.4194)) 
}; 

.getCurrentPositionコールにそれを追加します:

navigator.geolocation.getCurrentPosition(function(position) { 
    var geolocate = new google.maps.LatLng(position.coords.latitude, position.coords.longitude); 
    map.setCenter(geolocate); 
    }, error); 

proof of concept fiddle (https: works)
proof of concept fiddle (http: fails due to non-secure origin)

コードSNI

マップの中央を設定するには誤差関数を追加します。 PPET:

var map; 
 

 
function error(err) { 
 
    console.log('ERROR(' + err.code + '): ' + err.message); 
 
    if (map && map.setCenter) map.setCenter(new google.maps.LatLng(37.7749, -122.4194)) 
 
}; 
 

 
google.maps.event.addDomListener(window, 'load', function() { 
 

 
    if (!!navigator.geolocation) { 
 

 
    var mapOptions = { 
 
     zoom: 12, 
 
     mapTypeId: google.maps.MapTypeId.ROADMAP 
 
    }; 
 

 
    map = new google.maps.Map(document.getElementById('map-canvas'), mapOptions); 
 

 
    navigator.geolocation.getCurrentPosition(function(position) { 
 
     var geolocate = new google.maps.LatLng(position.coords.latitude, position.coords.longitude); 
 
     map.setCenter(geolocate); 
 
    }, error); 
 

 
    } else { 
 

 
    map = new google.maps.Map(document.getElementById('map-canvas'), { 
 
     center: new google.maps.LatLng(37.7749, -122.4194), 
 
     zoom: 12, 
 
     mapTypeId: google.maps.MapTypeId.ROADMAP 
 
    }); 
 
    } 
 
});
html, 
 
body, 
 
#map-canvas { 
 
    height: 100%; 
 
    width: 100%; 
 
    margin: 0px; 
 
    padding: 0px 
 
}
<script src="https://maps.googleapis.com/maps/api/js"></script> 
 
<div id="map-canvas"></div>

+0

ありがとうございました! –

関連する問題