在javascript中将lat-long转换为Address



我正在尝试将标记窗口中的显示从lat-long更改为地址。我很难理解谷歌API如何做到这一点。我对使用谷歌API或地理编码宝石持开放态度,无论哪种效果更好。我只是不知道如何将它们中的任何一个包含到我的代码中。

    var map;
  function initialize() {
    //initializing map view
    var myOptions = {
      zoom: 13,
      center: new google.maps.LatLng(42.32657009662249, -71.06678009033203),
      disableDefaultUI: true,
      panControl: true,
      zoomControl: true,
      scaleControl: true,
      mapTypeId: google.maps.MapTypeId.ROADMAP, 
      panControl: true,
      panControlOptions: {
        position: google.maps.ControlPosition.TOP_RIGHT
      },
      zoomControl: true,
      zoomControlOptions: {
        style: google.maps.ZoomControlStyle.LARGE,
        position: google.maps.ControlPosition.TOP_RIGHT
      }
    };
    map = new google.maps.Map(document.getElementById('map_canvas'),
        myOptions);
    //BIKE STUFF
    var bikeLayer = new google.maps.BicyclingLayer();
    bikeLayer.setMap(map);
    <% @Reports.each do |x|%>
      addMarker(<%= x.latitude %>, <%=x.longitude%>);
    <% end %>
  }
  function addMarker(lat, long){
        var marker = new google.maps.Marker({
          position: new google.maps.LatLng(lat, long),
          map: map,
          title: 'REPORT'
        });
        //DROP PIN
        marker.setAnimation(google.maps.Animation.DROP);
        marker.setTitle('DROP');
        //DROP MARKER INFOWINDOW
        var latlng = new google.maps.LatLng(lat, long);
        google.maps.event.addListener(marker, 'click', function(){
          infowindow.open(map, this);
          marker = this
        });
        var infowindow = new google.maps.InfoWindow({
          content:"Lat: " + lat + ", Long: " + long
        });
        //CLOSING MARKER INFOWINDOW
        google.maps.event.addListener(infowindow,'closeclick',function(){
          infowindow.close(map, this); //removes the marker
        });
    }    
  console.log("message")
  google.maps.event.addDomListener(window, 'load', initialize);

相反,在信息窗口中显示内容的地方,我希望它显示地址。

从现有代码开始,显示标记地址的一种方法是将其存储在数据库中(或查询以获取纬度和经度的任何信息),然后将其传递给"addMarker"调用(在更改addMarker函数以接受包含地址的第三个参数之后)。

未测试:

function addMarker(lat, long, address){
    var marker = new google.maps.Marker({
      position: new google.maps.LatLng(lat, long),
      map: map,
      title: 'REPORT'
    });
    //DROP PIN
    marker.setAnimation(google.maps.Animation.DROP);
    marker.setTitle('DROP');
    //DROP MARKER INFOWINDOW
    var latlng = new google.maps.LatLng(lat, long);
    google.maps.event.addListener(marker, 'click', function(){
      infowindow.open(map, this);
      marker = this
    });
    var infowindow = new google.maps.InfoWindow({
      content:address
    });

如果你还没有存储地址,你可以使用谷歌的地理编码服务作为反向地理编码器,将lat/lng转换为地址。

编辑:您可以从讨论地理编码策略的文档中看到这篇"文章",地理编码和反向地理编码服务是相似的,并且相同的配额和速率限制适用于它们。

  • 这是关于反向地理编码服务的文档

  • 以下是文档中关于反向地理编码(客户端)的示例

  • 下面是一个使用反向地理编码器返回拖动标记的地址并在信息窗口中显示返回地址的示例

最新更新