谷歌地图 api 中心在我的位置上有一个按钮

Posted

技术标签:

【中文标题】谷歌地图 api 中心在我的位置上有一个按钮【英文标题】:google maps api center on my location with a button 【发布时间】:2014-11-28 15:33:53 【问题描述】:

一切正常,但我真的很喜欢最后一个按钮(GPS)(抱歉无法发布图片) 将地图以用户位置为中心,而不是像我目前设置的那样仅刷新地图。

这个工作原理的一个例子是,用户打开网页并在地图上滚动,可能会更改为卫星视图,然后能够点击上面的按钮(或任何按钮)并获得地图平移回他们的位置。不确定这是否可能,但我似乎无法自己弄清楚。很感谢任何形式的帮助。这是我的弗兰肯斯坦地图的链接。 http://deepfrogphoto.com/Brett-Pelletier-Photography/Links/maps/wasatch-ski-map-mobile.htm

var map, GeoMarker;      

    function toggleLayer(this_layer)
  if(this_layer.getMap()) 
    this_layer.setMap(null)
   else 
    this_layer.setMap(map);

      function initialize() 
    var mapOptions = 
      zoom: 20,
      center: new google.maps.LatLng(40.563855, -111.675426),
      mapTypeId: google.maps.MapTypeId.TERRAIN
    ;

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

    GeoMarker = new GeolocationMarker();
    GeoMarker.setCircleOptions(fillColor: '#808080');

    google.maps.event.addListenerOnce(GeoMarker, 'position_changed', function() 
      map.setCenter(this.getPosition());
      map.fitBounds(this.getBounds());
    );

    google.maps.event.addListener(GeoMarker, 'geolocation_error', function(e) 
      alert('There was an error obtaining your position. Message: ' + e.message);
    );

    GeoMarker.setMap(map);

     trafficLayer = new google.maps.TrafficLayer();
        trafficLayer.setMap(map); 

    layer1 = new google.maps.FusionTablesLayer(
  map: map,
  heatmap:  enabled: false ,
  query: 
    select: "skilines",
    from: "1R5pCEyNN74N8Dt9MkfNXA6A9D1HbQESzOR1fYFa7",
    where: ""
  ,
  options: 
    styleId: 2,
    templateId: 2
  
);   

layer2 = new google.maps.FusionTablesLayer(
  map: map,
  heatmap:  enabled: false ,
  query: 
    select: "resorts",
    from: "19iu58FDFcBIZZ-wU1iZcf89AI5ABDJ7YTv355su5",
    where: ""
  ,
  options: 
    styleId: 2,
    templateId: 2
  
);      

 layer3 = new google.maps.FusionTablesLayer(
  map: map,
  heatmap:  enabled: false ,
  query: 
    select: "summerhiking",
    from: "1t1XNnG7J7Zu1p5mIUpm6qIGVYwzhkCgPy_je0IKr",
    where: ""
  ,
  options: 
    styleId: 2,
    templateId: 2
  
);       

layer4 = new google.maps.KmlLayer('URL-to-KML.kml',
              
                  suppressInfoWindows: false,
                  map: map,
                  preserveViewport: true
              );        
  

  google.maps.event.addDomListener(window, 'load', initialize);

  if(!navigator.geolocation) 
    alert('Your browser does not support geolocation');

//]]>
</script>

<title>Wasatch Map by deepfrogphoto</title>
</head>

<body>
<b>Wasatch Map by deepfrogphoto -</b>

<form>

<button onclick="myFunction()">Center Map on My Location</button>

</form>

<div id="map_canvas"></div>
</body>

【问题讨论】:

请在您的问题中发布(相关)代码。一旦你的页面被“修复”,你的问题将不再有上下文。 您知道坐标还是希望它自动检测任何用户位置? 对不起,就像我在这里说的很菜鸟一样。我不确定相关代码是什么......这在我的脑海中都是相关的,因为一点点错误就会把它搞砸。我认为人们可以查看我的页面链接,获取代码,并按照我发布问题的方式帮助我解决问题.. 【参考方案1】:

添加一个带有 onclick 事件监听器的按钮

<button onclick="myFunction()">Center</button>

然后创建 myFunction 以将地图居中到用户位置

function myFunction()
      Map.panTo(UserCords);//UserCords = user current latitude, longitude. I suppose you have them!!!

编辑

function myFunction()
     if (navigator.geolocation)
         navigator.geolocation.getCurrentPosition(getPosition,showError);
     
     else
          alert("Geolocation is not supported by this browser.");
     
 

function getPosition(position)
   
      UserLatitude = position.coords.latitude;
      UserLongitude = position.coords.longitude;
      showPosition(UserLatitude, UserLongitude);
  

function showPosition(userLatitude, userLongitude)
        lat= userLatitude;
        lon= userLongitude;
        latlon=new google.maps.LatLng(lat, lon);
        YourMap.panTo(latlon);


function showError(error)
  
  switch(error.code) 
    
    case error.PERMISSION_DENIED:
      alert("User denied the request for Geolocation.");
      break;
    case error.POSITION_UNAVAILABLE:
      alert("Location information is unavailable.")
      break;
    case error.TIMEOUT:
      alert("The request to get user location timed out.")
      break;
    case error.UNKNOWN_ERROR:
      alert("An unknown error occurred.")
      break;
    
  

【讨论】:

谢谢,这似乎是我需要的,但我不知道你所说的“我想你有它们”是什么意思......当我的页面加载时,我有地理位置(蓝点)工作,但不确定这些 UserCords... 它对你有用吗?我的意思是 e.x UserCords = new google.maps.LatLng(40.563855, -111.675426) 还没有...我添加了按钮代码...并且可以看到...并添加了功能代码,但它对我不起作用....它可能是我放的地方,或者UserCords ..也许我没有它们..或者它们被称为别的东西? 检查我的编辑并复制粘贴代码并使用您的地图名称更改 YourMap(正如我在您的源代码中看到的,您的地图名称是“地图”)。所以用地图改变Yourmap,它必须玩! 哇,我真的很感谢你在这方面的帮助.. 虽然我仍然无法让它工作。我已经尝试将上面的功能代码编辑添加到我的代码中,但我没有像以前那样收到错误,但它仍然对我不起作用..按钮没有做任何事情......是吗为你工作??你能给我一个完整的例子,所以我不质疑在哪里添加你的代码。

以上是关于谷歌地图 api 中心在我的位置上有一个按钮的主要内容,如果未能解决你的问题,请参考以下文章

如何在 C++ 语言中将谷歌地图 API 与 MFC 或 QT 一起使用?

谷歌地图api中的Html5地理位置[重复]

如何使用相机谷歌地图 xcode 移动标记(图钉)

离子框架:不在设备上加载谷歌地图库

谷歌地图 - 当前位置 - 没有 HTML5

移动谷歌地图中心javascript api