嘿,GMaps API 开发人员。首先 - Google Maps/JS API v3 是多么令人难以置信的产品和服务 - 非常感谢!现在,带着那份重要的真诚感激之情……
地址组件的short_name
vslong_name
选项是一个不错的功能,但是对于每个服务,这两个属性大多包含相同的值,除了 geocode 具有我short_name
对两者的期望,而 place 具有我long_name
对两者的期望!*眼泪*
在 Places 库出现之前,我只是假设 Google 实际上没有街道名称、地区等的短/长版本 - 但现在看来你确实在某处有这种格式 - 也许不同的产品团队有不同的数据库?
那么有什么关系呢?
我正在谈论的图像(将嵌入,但这是我的第一个 stackoverflow 问题,所以没有声誉):http: //i.imgur.com/XPVj8.png
我希望它如何工作的详细列表:
- 对于路线,地理编码的
short_name
地方'long_name
- 地理编码和地点之间的位置/子位置具有相同的“类型”值(两者都可以,只需选择一个)
- 始终为状态(administrative_area_level_1)提供短/长 - 地理编码正确但地方没有
- 国家/地区相同 - 地理编码在哪里获取格式化地址中的“美国”?
- 如果
postal_code
long_name
有 zip+4 会很整洁,但我想从数据的角度来看这将是一项巨大的努力
非常感谢 - 期待对此行为的任何见解!
图片背后的代码:
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>GMaps API V3 Geocoder vs Places Address Components | Short vs Long Name</title>
<script type="text/javascript" src="https://maps.googleapis.com/maps/api/js?sensor=true&libraries=places"></script>
<style type="text/css">
#map {height: 100px; width: 600px; border: 1px solid #333; margin-top: 0.6em; }
table { border-collapse: collapse; border-spacing: 0; }
table td {border-top: 1px solid #DDD; padding:4px 8px; }
</style>
<script type="text/javascript">
var map, geocoder, places, geocode_components, geocode_formatted, places_components, places_formatted
function initialize() {
geocoder = new google.maps.Geocoder();
geocoder.geocode({'address': '3 South Main Street, York New Salem, PA'},
function (results, status) {
geocode_components = results[0].address_components;
geocode_formatted = results[0].formatted_address;
map = new google.maps.Map(document.getElementById('map'), {
mapTypeId: google.maps.MapTypeId.ROADMAP,
center: results[0].geometry.location,
zoom: 10
});
places = new google.maps.places.PlacesService(map);
places.search({location: results[0].geometry.location, radius:100, keyword: "Pizza"},
function(results, status) {
//get details - this feels a little extraneous to me, but y'all know best
places.getDetails({reference: results[0].reference},
function(result, status) {
places_components = result.address_components;
places_formatted = result.formatted_address;
writeResults();
});
});
});
}
function writeResults() {
tbody = document.getElementById('results');
formatted = document.getElementById('formatted');
var rows = "";
for(var i=0; i<geocode_components.length; i++) {
var c = geocode_components[i];
rows = rows + '<tr><td>Geocoding</td><td>' + c.types[0] + '</td><td>' + c.short_name + '</td><td>' + c.long_name + '</td></tr>';
}
for(var i=0; i<places_components.length; i++) {
var c = places_components[i];
rows = rows + '<tr><td>Places</td><td>' + c.types[0] + '</td><td>' + c.short_name + '</td><td>' + c.long_name + '</td></tr>';
}
tbody.innerHTML = rows;
formatted.innerHTML = '<br />Geocode Formatted: ' + geocode_formatted + '<br />' + 'Places Formatted: ' + places_formatted;
}
google.maps.event.addDomListener(window, 'load', initialize);
</script>
</head>
<body>
<div id="map"></div>
<table>
<thead><tr><th>Service</th><th>Type</th><th>Short Name</th><th>Long Name</th></tr></thead>
<tbody id="results"></tbody>
</table>
<div id="formatted"></div>
</body>
</html>