在字符串中组合变量,反向地理编码-javascript

在字符串中组合变量,反向地理编码-javascript,javascript,google-maps,Javascript,Google Maps,我试图找回“用户”点击我在我的网站上实现的“谷歌地图”时的地址 我复制了源代码表单并进行了视图修改。在谷歌的源代码中,您通过输入字段获得“latlng”。我通过一个“事件”得到它 在我的“地理编码函数”中,我将我的“lat”和“lng”参数相加,得出它们从输入字段中出来时的样子 代码如下: // Set variables var clicklat; var clicklng; var geocoder = new google.maps.Geocoder(); var

我试图找回“用户”点击我在我的网站上实现的“谷歌地图”时的地址

我复制了源代码表单并进行了视图修改。在谷歌的源代码中,您通过输入字段获得“latlng”。我通过一个“事件”得到它

在我的“地理编码函数”中,我将我的“lat”和“lng”参数相加,得出它们从输入字段中出来时的样子

代码如下:

  // Set variables  

  var clicklat;
  var clicklng;
  var geocoder = new google.maps.Geocoder();
  var infowindow = new google.maps.InfoWindow;  

  // Listen for click on map

  google.maps.event.addListener(map, 'click', function(event) { 
  placeMarker(event.latLng);
  clicklat = parseFloat(event.latLng.lat());
  clicklng = parseFloat(event.latLng.lng());      
  geocodeLatLng(geocoder, map, infowindow);
  });

  // Geocode function   

  function geocodeLatLng(geocoder, map, infowindow) {
    var input = "#{clicklat},#{clicklng}"
    var latlngStr = input.split(',', 2);
    var latlng = {lat: parseFloat(latlngStr[0]), lng: parseFloat(latlngStr[1])}; 
    geocoder.geocode({'location': latlng}, function(results, status) {
      if (status === 'OK') {
        if (results[1]) {
          map.setZoom(11);
          var marker = new google.maps.Marker({
            position: latlng,
            map: map
          });
          infowindow.setContent(results[1].formatted_address);
          infowindow.open(map, marker);
        } else {
          window.alert('No results found');
        }
      } else {
        window.alert('Geocoder failed due to: ' + status);
      }
    });
  } 

现在,我遇到的问题是
console.log(输入)返回:
{clicklat},{clicklng}
。为什么,见鬼,我的变量没有在那里实现

看起来你想用一块“翡翠”却没用

无论如何,这里有一种方法可以让它发挥作用:

// Set variables  

//var clicklat;
//var clicklng;
var geocoder = new google.maps.Geocoder();
var infowindow = new google.maps.InfoWindow;  

// Listen for click on map

google.maps.event.addListener(map, 'click', function(event) { 
  placeMarker(event.latLng);

  //clicklat = parseFloat(event.latLng.lat());
  //clicklng = parseFloat(event.latLng.lng());      
  geocodeLatLng(geocoder, map, infowindow, event.latLng); //I add this as a parameter
});

 // Geocode function   

 function geocodeLatLng(geocoder, map, infowindow, thelocation) {
//  var input = "#{clicklat},#{clicklng}"
//  var latlngStr = input.split(',', 2);
//  var latlng = {lat: parseFloat(latlngStr[0]), lng: parseFloat(latlngStr[1])}; 
geocoder.geocode({'location': thelocation}, function(results, status) {
  if (status === 'OK') {
    if (results[1]) {
      map.setZoom(11);
      var marker = new google.maps.Marker({
        position: results[1].geometry.location,
        map: map
      });
      infowindow.setContent(results[1].formatted_address);
      infowindow.open(map, marker);
    } else {
      window.alert('No results found');
    }
  } else {
    window.alert('Geocoder failed due to: ' + status);
  }
});
} 

谢谢你,工作很有魅力。现在只剩下一个小问题了。当我现在点击地图时,标记和地址信息会转到下一个“村庄”或更大的“城市”,标记不会停留在确切的“点击点”,而是从那里返回完整的地址。我认为这与“位置:结果[1]。几何体。位置”有关-你知道我必须在那里放什么吗对不起。。我相信我是个该死的初学者,因为您使用的是第二个结果..或结果[1],请尝试对第一个结果使用索引0,因此只需将所有结果[1]替换为结果[0],然后让我知道没有任何更改。这是我上传的演示:怎么了?我正在巴塞罗那尝试,一切看起来都很好……你的欲望行为到底是什么?@betofarnia-我还有一个问题。我尝试在“map.setZoom(11);”之后使用“map.setCenter(results[0].geometry.location.latlng);”将地图居中。你有什么建议吗?谢谢你-我也没有用“.latlng”就试过了,但没用