执行地理定位请求时获取 UK outcode(邮政编码前缀)
Get UK outcode (postal code prefix) when performing geolocation request
在 SA 的帮助下,当用户想要对他们的当前位置进行地理定位时,我设法获得了纬度、经度和视口边界。
今天有人问我们是否也可以从请求中获取outcode("postal_code_prefix")。这是英国邮政编码的前 three/four 位。我说这应该不是问题,我什至可以在控制台中看到输出代码。我在这个帖子 Retrieving Postal Code with Google Maps Javascript API V3 Reverse Geocode 上阅读了几个好的和坏的答案,最简洁的答案如下:
for (i = 0; i < results.length; i++) {
for (var j = 0; j < results[i].address_components.length; j++) {
for (var k = 0; k < results[i].address_components[j].types.length; k++) {
if (results[i].address_components[j].types[k] == "postal_code_prefix") {
outcode = results[i].address_components[j].short_name;
} else if (results[i].address_components[j].types[k] == "postal_code") {
outcode = results[i].address_components[j].short_name;
}
}
}
}
我已经在 3 台不同的计算机上对此进行了测试,并且运行良好。任何人都可以看到它的缺点或改进吗?例如,最好有一个单行解决方案,例如:
var outcode = results[1].address_components.postal_code_prefix.short_name();
我搜索了一整天,没有找到简单的解决方案。
非常感谢。
因此,尽管对一个完全有效的问题进行了非理性的否决,但我在这里为任何想要通过 Google Places Autocomplete 获得英国邮政编码外码的人提供了解决方案。
if (place.address_components) {
for(var i=0; i < place.address_components.length; i++) {
var component = place.address_components[i];
if(component.types[0] == "postal_code_prefix") {
outcode = component.long_name;
} else if((component.types[0] == "postal_code") && (component.types[0] != "postal_code_prefix")) {
zipcode = component.long_name;
zipcode = zipcode.split(' ');
outcode = zipcode[0];
}
} else {
outcode = reverse_geocode(lat, lng);
}
}
基本上我所做的是告诉函数从 Places 中找到 postal_code 或 postal_code_prefix,如果两者都没有找到,则从 place.geometry.location.lat();和 place.geometry.location.lng();并将它们转发给一个函数,该函数对它们进行反向地理编码以获得外码。反向地理编码功能如下:
function reverse_geocode(lat, lng) {
var geocoder = new google.maps.Geocoder();
var latlng = new google.maps.LatLng(lat,lng);
geocoder.geocode({'latLng': latlng}, function(results, status) {
if (status == google.maps.GeocoderStatus.OK) {
if (results[0]) {
// this code has been validated by Luke
for(var i=0; i < results[0].address_components.length; i++) {
var component = results[0].address_components[i];
if(component.types[0] == "postal_code_prefix") {
appendHiddenFormField("outcode", component.long_name);
appendHiddenFormField("gz", "1");
} else if((component.types[0] == "postal_code") && (component.types[0] != "postal_code_prefix")) {
zipcode = component.long_name;
zipcode2 = zipcode.split(' ');
appendHiddenFormField("outcode", zipcode2[0]);
appendHiddenFormField("gz", "1");
}
}
} else {
console.log("no results found");
appendHiddenFormField("outcode", "");
}
} else {
console.log('Geocoder failed due to: ' + status);
appendHiddenFormField("outcode", "");
}
});
}
代码完美运行,没有任何控制台错误。请注意,我是一个初学者,但这段代码是在 SO 贡献者的帮助下编译的,这些贡献者实际上决定提供帮助,而不是那些把整个悲惨的一天都花在投票上的人;-)
在 SA 的帮助下,当用户想要对他们的当前位置进行地理定位时,我设法获得了纬度、经度和视口边界。
今天有人问我们是否也可以从请求中获取outcode("postal_code_prefix")。这是英国邮政编码的前 three/four 位。我说这应该不是问题,我什至可以在控制台中看到输出代码。我在这个帖子 Retrieving Postal Code with Google Maps Javascript API V3 Reverse Geocode 上阅读了几个好的和坏的答案,最简洁的答案如下:
for (i = 0; i < results.length; i++) {
for (var j = 0; j < results[i].address_components.length; j++) {
for (var k = 0; k < results[i].address_components[j].types.length; k++) {
if (results[i].address_components[j].types[k] == "postal_code_prefix") {
outcode = results[i].address_components[j].short_name;
} else if (results[i].address_components[j].types[k] == "postal_code") {
outcode = results[i].address_components[j].short_name;
}
}
}
}
我已经在 3 台不同的计算机上对此进行了测试,并且运行良好。任何人都可以看到它的缺点或改进吗?例如,最好有一个单行解决方案,例如:
var outcode = results[1].address_components.postal_code_prefix.short_name();
我搜索了一整天,没有找到简单的解决方案。
非常感谢。
因此,尽管对一个完全有效的问题进行了非理性的否决,但我在这里为任何想要通过 Google Places Autocomplete 获得英国邮政编码外码的人提供了解决方案。
if (place.address_components) {
for(var i=0; i < place.address_components.length; i++) {
var component = place.address_components[i];
if(component.types[0] == "postal_code_prefix") {
outcode = component.long_name;
} else if((component.types[0] == "postal_code") && (component.types[0] != "postal_code_prefix")) {
zipcode = component.long_name;
zipcode = zipcode.split(' ');
outcode = zipcode[0];
}
} else {
outcode = reverse_geocode(lat, lng);
}
}
基本上我所做的是告诉函数从 Places 中找到 postal_code 或 postal_code_prefix,如果两者都没有找到,则从 place.geometry.location.lat();和 place.geometry.location.lng();并将它们转发给一个函数,该函数对它们进行反向地理编码以获得外码。反向地理编码功能如下:
function reverse_geocode(lat, lng) {
var geocoder = new google.maps.Geocoder();
var latlng = new google.maps.LatLng(lat,lng);
geocoder.geocode({'latLng': latlng}, function(results, status) {
if (status == google.maps.GeocoderStatus.OK) {
if (results[0]) {
// this code has been validated by Luke
for(var i=0; i < results[0].address_components.length; i++) {
var component = results[0].address_components[i];
if(component.types[0] == "postal_code_prefix") {
appendHiddenFormField("outcode", component.long_name);
appendHiddenFormField("gz", "1");
} else if((component.types[0] == "postal_code") && (component.types[0] != "postal_code_prefix")) {
zipcode = component.long_name;
zipcode2 = zipcode.split(' ');
appendHiddenFormField("outcode", zipcode2[0]);
appendHiddenFormField("gz", "1");
}
}
} else {
console.log("no results found");
appendHiddenFormField("outcode", "");
}
} else {
console.log('Geocoder failed due to: ' + status);
appendHiddenFormField("outcode", "");
}
});
}
代码完美运行,没有任何控制台错误。请注意,我是一个初学者,但这段代码是在 SO 贡献者的帮助下编译的,这些贡献者实际上决定提供帮助,而不是那些把整个悲惨的一天都花在投票上的人;-)