我有用于在纬度和经度表单上填充两个文本输入的代码。我想知道是否还可以检索城市,街道和邮政编码,以便我也可以使用它们来填充表格?
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>");
}
}
最佳答案
您最容易解决的问题是通过调用反向地址解析器(位于
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解析功能。示例脚本(页面加载后,将与原始示例加载相同的地址-关键的事情是
httpGet
函数,您可以用AJAX调用替换该函数,而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 - 如何返回Google map 标记的城市,街道和邮政编码?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/22138790/