简体   繁体   English

Google Maps JavaScript API V3-Geocoder API未返回地名

[英]Google Maps JavaScript API V3 - Geocoder API is not returning place name

Here is my code, i'm new to Google Maps and JavaScript, i'm trying to get the 'Place Name' by passing location (latlng) to the geocoder, but it's not returning any values. 这是我的代码,我是Google Maps和JavaScript的新手,我正在尝试通过将位置(latlng)传递给地址解析器来获取“地名”,但未返回任何值。 If is set the placeName var to 'somePlace' it set the title to 'somePlace'. 如果将placeName var设置为“ somePlace”,则将标题设置为“ somePlace”。 but i want to set title with the return value ie place name. 但我想用返回值即地名设置标题。

function setMap(position){
  //var Karachi = {lat: 24.8978176, lng: 66.9596003}; //default city
  var location = {
    lat: position.coords.latitude,
    lng: position.coords.longitude
  }

  var mapOptions = {

      center: location,
      zoom: 13,         //initial zoom level
      mapTypeId: 'hybrid'  //map type
  }
  //object of map
  var map = new google.maps.Map(document.getElementById('map'), mapOptions);

  var placeName;
  //placeName = 'SomePlace'; 
  var newLatLng = location + '';
  var latlngStr = newLatLng.split(',',2);
  var latlng = {lat: parseFloat(latlngStr[0]), lng:    parseFloat(latlngStr[1])};
  var geocoder = new google.maps.Geocoder({'location': latlng}, function(results, status) {
    if(status === 'OK'){
      if(results[1]){
        placeName = 'results[1].formatted_address';
      }
      else{
        window.alert('Error in ' + status);
      }
    }
    else{
      window.alert('Geocoder failed due to ' + status);
    }
  });

  var markerOptions = {
    position: location,
    map: map,
    title: placeName //<-- i want place name to be here

  }
  //object of marker
  var marker = new google.maps.Marker(markerOptions);
  marker.setTitle(placeName); //<-- this is also not working
}

You have syntax errors in your code. 您的代码中有语法错误。

  1. you need to call the google.maps.Geocoder geocode method, with a valid GeocoderRequest object: 您需要使用有效的GeocoderRequest对象调用google.maps.Geocoder geocode方法:
var geocoder = new google.maps.Geocoder();
  geocoder.geocode({
    location: location
  }, function(results, status) 
  1. the Geocoder is asynchronous, you need to use the returned result in the callback function when/where it is available: Geocoder是异步的,因此您需要在可用的时间/位置在回调函数中使用返回的结果:
  if (results[1]) {
    placeName = results[1].formatted_address;
    var markerOptions = {
        position: location,
        map: map,
        title: placeName //<-- i want place name to be here

      }
      //object of marker
    var marker = new google.maps.Marker(markerOptions);

proof of concept fiddle 概念证明

code snippet: 代码段:

 function setMap(position) { var location = { lat: position.coords.latitude, lng: position.coords.longitude } var mapOptions = { center: location, zoom: 13, //initial zoom level mapTypeId: 'hybrid' //map type } //object of map var map = new google.maps.Map(document.getElementById('map'), mapOptions); var geocoder = new google.maps.Geocoder(); geocoder.geocode({ location: location }, function(results, status) { if (status === 'OK') { if (results[1]) { placeName = results[1].formatted_address; var markerOptions = { position: location, map: map, title: placeName // set formatted_address as title of marker } //object of marker var marker = new google.maps.Marker(markerOptions); } else { window.alert('Error in ' + status); } } else { window.alert('Geocoder failed due to ' + status); } }); } google.maps.event.addDomListener(window, "load", function() { setMap({ coords: { latitude: 37.4419, longitude: -122.1419 } }) }); 
 html, body, #map { height: 100%; width: 100%; margin: 0px; padding: 0px } 
 <script src="https://maps.googleapis.com/maps/api/js"></script> <div id="map"></div> 

只需尝试将lat和long传递给以下查询字符串,您将获得一个json数组,从那里获取您的地名。

http://maps.googleapis.com/maps/api/geocode/json?latlng=44.4647452,7.3553838&sensor=true

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM