Javascript google getLocation函数在我的脚本中不起作用
大家好,我需要在我的网站上显示一张谷歌地图,上面有一个像我家一样的标记(我用一个商店的位置来标记),并以用户的位置为中心。我尝试:Javascript google getLocation函数在我的脚本中不起作用,javascript,google-maps,Javascript,Google Maps,大家好,我需要在我的网站上显示一张谷歌地图,上面有一个像我家一样的标记(我用一个商店的位置来标记),并以用户的位置为中心。我尝试: <script> var myCenter = new google.maps.LatLng('xxx'); var userCenter; function getLocation() { if (navigator.geolocation) {
<script>
var myCenter = new google.maps.LatLng('xxx');
var userCenter;
function getLocation() {
if (navigator.geolocation) {
navigator.geolocation.getCurrentPosition(showPosition);
}
}
function showPosition(position) {
var latlon = position.coords.latitude + "," + position.coords.longitude;
userCenter=new google.maps.LatLng(latlon);
}
var marker;
function initialize()
{
var mapProp = {
center: userCenter,
zoom:15,
mapTypeId:google.maps.MapTypeId.ROADMAP
};
var map=new google.maps.Map(document.getElementById("googleMap"),mapProp);
marker=new google.maps.Marker({
position:myCenter,
});
marker.setMap(map);
var infowindow = new google.maps.InfoWindow({
content:"Casa"
});
google.maps.event.addListener(marker, 'click', function() {
infowindow.open(map,marker);
});
}
google.maps.event.addDomListener(window, 'load', initialize);
</script>
var myCenter=new google.maps.LatLng('xxx');
var用户中心;
函数getLocation(){
if(导航器.地理位置){
navigator.geolocation.getCurrentPosition(showPosition);
}
}
功能显示位置(位置){
var latlon=位置.coords.latitude+“,”+位置.coords.latitude;
userCenter=newgoogle.maps.LatLng(latlon);
}
var标记;
函数初始化()
{
var mapProp={
中心:用户中心,
缩放:15,
mapTypeId:google.maps.mapTypeId.ROADMAP
};
var map=new google.maps.map(document.getElementById(“googleMap”),mapProp);
marker=新的google.maps.marker({
职位:迈森特,
});
marker.setMap(map);
var infowindow=new google.maps.infowindow({
内容:“卡萨”
});
google.maps.event.addListener(标记'click',函数(){
信息窗口。打开(地图、标记);
});
}
google.maps.event.addDomListener(窗口“加载”,初始化);
如果我不使用userCenter和MyCenter,则映射将工作并显示在MyCenter的中心。问题在于函数的执行顺序。您希望在用户中心可用之前使用用户中心。这会产生一个错误(在var mapProp={center:userCenter,…}),因此initialize停止工作 顺便说一下,您从未调用getLocation()。仅定义的函数不执行任何操作。函数只有在调用某个地方时才会执行某些操作 (顺便说一句,2:navigator.geolocation不是谷歌的服务,而是网络浏览器提供的服务) 我在代码中添加了额外的注释
<script src="http://maps.googleapis.com/maps/api/js?sensor=true"></script>
<script>
var myCenter = new google.maps.LatLng(50.845463, 4.357112);
var userCenter;
var marker;
var map;
// sends a request to get the location of the user.
// Notice: you will have to wait for the callback (= showPosition) before you have the result of this request.
// So you cannot rely only on userCenter. You must use myCenter, until you are sure that showPosition receives the response
function getUserLocation() {
if (navigator.geolocation) {
navigator.geolocation.getCurrentPosition(showPosition);
}
}
// Response of getUserLocation(). The location of the client is known.
// Notice: by this time initialize() has been called. initialize() doesn't know anything about userCenter.
// userCenter will only get a value when this function is called.
function showPosition(position) {
userCenter = new google.maps.LatLng(
position.coords.latitude,
position.coords.longitude
);
// Now we know the position of the client. We can set the center of the map to this location
map.setCenter(userCenter);
}
// this function initializes Google maps. It is triggered the moment the DOM of the web page is loaded.
function initialize() {
// let's start the request to get the position of the user
getUserLocation();
var mapProp = {
center: myCenter, // notice: userCenter is still undefined, you cannot use it yet.
zoom:15,
mapTypeId:google.maps.MapTypeId.ROADMAP
};
map = new google.maps.Map(document.getElementById("googleMap"), mapProp);
marker = new google.maps.Marker({
position: myCenter,
map: map // this replaces marker.setMap(map);
});
var infowindow = new google.maps.InfoWindow({
content: "Casa"
});
// a click on the marker opens the infoWindow
google.maps.event.addListener(marker, 'click', function() {
infowindow.open(map, marker);
});
}
google.maps.event.addDomListener(window, 'load', initialize);
</script>
var myCenter=newgoogle.maps.LatLng(50.845463,4.357112);
var用户中心;
var标记;
var映射;
//发送请求以获取用户的位置。
//注意:在获得此请求的结果之前,您必须等待回调(=showPosition)。
//所以你不能只依赖用户中心。您必须使用myCenter,直到您确定showPosition收到响应为止
函数getUserLocation(){
if(导航器.地理位置){
navigator.geolocation.getCurrentPosition(showPosition);
}
}
//getUserLocation()的响应。客户机的位置是已知的。
//注意:此时已调用initialize()。initialize()对userCenter一无所知。
//用户中心仅在调用此函数时获取值。
功能显示位置(位置){
userCenter=new google.maps.LatLng(
位置坐标纬度,
位置坐标经度
);
//现在我们知道了客户端的位置。我们可以将地图的中心设置为该位置
map.setCenter(用户中心);
}
//此函数用于初始化谷歌地图。它在加载网页的DOM时触发。
函数初始化(){
//让我们开始请求以获取用户的位置
getUserLocation();
var mapProp={
center:myCenter,//注意:userCenter仍然没有定义,您还不能使用它。
缩放:15,
mapTypeId:google.maps.mapTypeId.ROADMAP
};
map=new google.maps.map(document.getElementById(“googleMap”),mapProp);
marker=新的google.maps.marker({
职位:迈森特,
map:map//这将替换marker.setMap(map);
});
var infowindow=new google.maps.infowindow({
内容:“卡萨”
});
//单击标记将打开信息窗口
google.maps.event.addListener(标记'click',函数(){
信息窗口。打开(地图、标记);
});
}
google.maps.event.addDomListener(窗口“加载”,初始化);