从Draggrable Marker新街道和城镇出发

时间:2016-01-08 16:53:28

标签: javascript google-maps google-maps-api-3

我的谷歌地图上有一个draggrabble标记,在infowindow显示街道和城镇

否则我在拖动标记时使用此代码在表单中获取新的lng e lat

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

google.maps.event.addListener(marker, 'dragend', function (event) {
document.getElementById("lat").value = this.getPosition().lat();
document.getElementById("lng").value = this.getPosition().lng(); 
document.getElementById("latlng").value =  this.getPosition().lat()+','+this.getPosition().lng();
geocodeLatLng(geocoder, map, infowindow);
});

在输入lng,lat,latlng都可以,所以值更改移动标记,但我可以确定其他2个输入的值是城市和街道

我正在寻找像

这样的东西
document.getElementById("address").value = this.address;
document.getElementById("city").value = this.city;

1 个答案:

答案 0 :(得分:1)

结果组件包含元素organized in this way

results[0].components

通过

过滤第n个结果[0] .components [n] .types
  • 路线匹配路线的长或短名称。

  • 位置与地区和子地区类型相匹配。

  • administrative_area 匹配所有administrative_area级别(administrative_area_level_3.political = town / city,administrative_area_level_2.political = province / county,administrative_area_level_1.political = country)

  • postal_code 匹配postal_code和postal_code_prefix。

  • 国家/地区匹配国家/地区名称或双字母ISO 3166-1国家/地区代码。

你可以在

中得到你需要的东西
   result[0].components[n].long_name

如果你只想要地方性,你应该这样迭代

  for  (var i=0;  i < results[0].address_components.length; i++ ) {
      if (results[0].address_components[i].types  == 'locality,political') {
        window.alert(results[0].address_components[i].long_name);
      };
  }