【问题标题】:get map latitude longitude from mouse position从鼠标位置获取地图纬度经度
【发布时间】:2012-12-08 16:35:32
【问题描述】:

我正在尝试将鼠标在谷歌地图上的位置转换为 LatLng 对象。我看到很多关于通过谷歌地图“点击”事件等获取位置的帖子,如下所示:

google.maps.event.addListener(map, 'click', function(event) {
  mouseLocation = event.latLng;
});

但是,这对我的目的不起作用,因为我不是在响应地图事件,而是在响应“tapHold”事件。在 tapHold 事件中,我想获取当前鼠标位置的纬度和经度。实际上,我可以看到像这样的函数在很多方面都非常有用,而不仅仅是一个 tapHold 事件。

我可以想到一些技巧,例如动态创建鼠标悬停事件,然后只让它触发一次并在从翻转事件中获取 LatLng 对象后将其删除,但是,对我来说似乎有点 hackish... 看以获得更优雅的解决方案。谢谢!

【问题讨论】:

    标签: javascript google-maps geolocation


    【解决方案1】:
    google.maps.event.addListener(map, 'mousemove', function (event) {
                  displayCoordinates(event.latLng);               
              });
    
    function displayCoordinates(pnt) {
    
              var lat = pnt.lat();
              lat = lat.toFixed(4);
              var lng = pnt.lng();
              lng = lng.toFixed(4);
              console.log("Latitude: " + lat + "  Longitude: " + lng);
          }
    

    来源:http://seydahatipoglu.wordpress.com/2012/10/21/how-to-display-cursor-coordinates-in-google-map-javascript/

    【讨论】:

      【解决方案2】:

      有几个处理像素的函数,要使用它们,你需要先访问投影。

      来自地图对象

      map.getProjection().fromPointToLatLng(new google.maps.Point(x, y))
      

      来自叠加对象:

      overlay.getProjection().fromContainerPixelToLatLng(new google.maps.Point(x, y));
      

      您也可以使用虚拟叠加层来做到这一点:

      var overlay = new google.maps.OverlayView();
      overlay.draw = function() {};
      overlay.setMap(map);
      

      这是对文档的参考:https://developers.google.com/maps/documentation/javascript/reference#Projection

      【讨论】:

      • x 和 y 是鼠标在屏幕上的位置。
      【解决方案3】:

      如果不需要很精确的值,可以根据map的bounds(bias under 1%)自行计算:

          <!DOCTYPE html>
      <html>
          <head>
              <script src="https://maps.googleapis.com/maps/api/js?v=3.exp&sensor=false"></script>
              <script>
                  var map;
      
                  function initialize() {
                      var mapOptions = {
                          zoom: 12,
                          center: new google.maps.LatLng(33.397, -81.644),
                          mapTypeId: google.maps.MapTypeId.ROADMAP
                      };
                      map = new google.maps.Map(document.getElementById('map_canvas'),
                          mapOptions
                      );
                      google.maps.event.addListener(map, 'click', function(event) {
                          document.getElementById('latMap').value = event.latLng.lat();
                          document.getElementById('lngMap').value = event.latLng.lng();
                      });
                  }
                  function mapDivClicked (event) {
                      var target = document.getElementById('map_canvas'),
                          posx = event.pageX - target.offsetLeft,
                          posy = event.pageY - target.offsetTop,
                          bounds = map.getBounds(),
                          neLatlng = bounds.getNorthEast(),
                          swLatlng = bounds.getSouthWest(),
                          startLat = neLatlng.lat(),
                          endLng = neLatlng.lng(),
                          endLat = swLatlng.lat(),
                          startLng = swLatlng.lng();
      
                      document.getElementById('posX').value = posx;
                      document.getElementById('posY').value = posy;
                      document.getElementById('lat').value = startLat + ((posy/350) * (endLat - startLat));
                      document.getElementById('lng').value = startLng + ((posx/500) * (endLng - startLng));
                  }
                  google.maps.event.addDomListener(window, 'load', initialize);
              </script>
          </head>
          <body>
              <div id="map_canvas" onclick="mapDivClicked(event);" style="height: 350px; width: 500px;"></div>
              x: <input id="posX" />
              y: <input id="posY" />
              lat: <input id="lat" />
              lng: <input id="lng" />
              <div />
              lat from map: <input id="latMap" />
              lng from map: <input id="lngMap" />
          </body>
      </html>
      

      【讨论】:

      • 我想快速获取粗略的 lat lng 信息,而您的一小段代码正是我所期待的。谢谢!
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-11-08
      • 2019-03-29
      • 2010-12-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多