【问题标题】:How do I return the City, Street, and Zip Code of a google maps marker?如何返回谷歌地图标记的城市、街道和邮政编码?
【发布时间】:2014-04-04 00:43:57
【问题描述】:

我有这段代码,用于在表单上填充纬度和经度的两个文本输入。我想知道是否有办法检索城市、街道和邮政编码,以便我也可以使用它们来填充表单?

google.maps.event.addListener(marker, 'dragend', function(marker){
  var latLng = marker.latLng;
  $latitude.value = latLng.lat();
  $longitude.value = latLng.lng();
});

例子:

$zipcode.value = latLng.postal_code();
$street.value = latLng.street_address();
$city.value = latLng.city();

这是我的完整代码:

function selectState(state_id){
 if(state_id!="-1"){
loadData('city',state_id);
var e = document.getElementById("state");
var stateloc = e.options[e.selectedIndex].value;

var address = state_id + stateloc;

var $latitude = document.getElementById('latitude');
var $longitude = document.getElementById('longitude');
var latitude = 73.00636021320537;
var longitude = -23.46687316894531;

var zoom = 10;
geocoder = new google.maps.Geocoder();
var LatLng = new google.maps.LatLng(latitude, longitude);

var mapOptions = {
  zoom: zoom,
  center: LatLng,
  panControl: false,
  zoomControl: true,
  scaleControl: true,
  mapTypeId: google.maps.MapTypeId.ROADMAP
}  

var map = new google.maps.Map(document.getElementById('map'),mapOptions);



if (geocoder) {
  geocoder.geocode( { 'address': address}, function(results, status) {
    if (status == google.maps.GeocoderStatus.OK) {
      if (status != google.maps.GeocoderStatus.ZERO_RESULTS) {
      map.setCenter(results[0].geometry.location);




var marker = new google.maps.Marker({
  position: results[0].geometry.location,
  map: map,
  title: 'Drag Me!',
  draggable: true
});

google.maps.event.addListener(marker, 'dragend', function(marker){
  var latLng = marker.latLng;
  $latitude.value = latLng.lat();
  $longitude.value = latLng.lng();
});



 } else {
        alert("No results found");
      }
    } else {
      alert("Geocode was not successful for the following reason: " + status);
    }

 });
}


  }else{$("#city_dropdown").html("<option value='-1'>Select city</option>");
  }
}

【问题讨论】:

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


【解决方案1】:

您面临的问题最简单的方法是调用反向地理编码器,它位于

https://maps.googleapis.com/maps/api/geocode/json?latlng=40.714224,-73.961452&sensor=false

一个非常简单的php 脚本可能如下所示:

<?php
  $value=json_decode(file_get_contents("https://maps.googleapis.com/maps/api/geocode/json?latlng=40.714224,-73.961452&sensor=false"));
  echo $value->results[0]->formatted_address;
?>

这会产生输出

277 Bedford Avenue, Brooklyn, NY 11211, USA

我建议(根据您的用户名)从“保持简单”开始 - 从您的页面中删除所有代码,除了需要 Lon/Lat 输入的代码,然后调用上述代码。向自己证明您可以重新创建此输出(除了格式化的地址之外,还有用于数字、街道等的各个字段 - 请参阅返回的完整结构)。然后进一步增加复杂性(地图、图钉、下拉菜单等)。

使用上面的示例,

var latitude = 73.00636021320537;
var longitude = -23.46687316894531;

返回的地址是

Greenland

我想当你在荒野中间插一根大头针时会发生这种情况:

更新 如果您只想使用 Javascript 来执行此操作,建议您使用 jQuery 来获得 JSON 解析能力。示例脚本(加载页面后加载与原始示例相同的地址 - 关键是您可以用 AJAX 调用替换的 httpGet 函数,以及有助于将响应转换为可以从中提取的内容的 jQuery.parseJSON() 调用有用的信息:

<html>
<script src='./js/jquery-1.11.0.min.js'></script>
<script>
function ready()
{
  var r = httpGet("https://maps.googleapis.com/maps/api/geocode/json?latlng=40.714224,-73.961452&sensor=false");
  document.write(getAddress(r));
}

function httpGet(theUrl)
{
    var xmlHttp = null;

    xmlHttp = new XMLHttpRequest();
    xmlHttp.open( "GET", theUrl, false );
    xmlHttp.send( null );
    return xmlHttp.responseText;
}

function getAddress(response)
{
  var obj = jQuery.parseJSON(response);
  return obj.results[0].formatted_address;
}

</script>
<body onload="ready()">
</body>
</html>

http://www.floris.us/SO/geocode.html工作时看到这个

【讨论】:

  • 我可以在javascript中使用php吗?看看我在这里发布的链接 stackoverflow.com/questions/22148193/…" 。
  • @KeepinItSimple - 是的,您可以从 javascript 中调用 php;但您也可以做一个“纯 JS”解决方案,请参阅更新的答案。
猜你喜欢
  • 2019-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-05-07
  • 2012-05-18
  • 1970-01-01
相关资源
最近更新 更多