从邮政编码谷歌地理编码中获取城市名称
Get City Name from Zip Code google geocoding
我在这个网站上找到了从邮政编码中获取sate的代码,但我还需要获取城市名称。
这是我获取状态的代码:(注意我也使用jQuery)
var geocoder = new google.maps.Geocoder();
$('.zip').bind('change focusout', function () {
var $this = $(this);
if ($this.val().length == 5) {
geocoder.geocode({ 'address': $this.val() }, function (result, status) {
var state = "N/A";
//start loop to get state from zip
for (var component in result[0]['address_components']) {
for (var i in result[0]['address_components'][component]['types']) {
if (result[0]['address_components'][component]['types'][i] == "administrative_area_level_1") {
state = result[0]['address_components'][component]['short_name'];
// do stuff with the state here!
$this.closest('tr').find('select').val(state);
}
}
}
});
}
});
只需添加result[0]['address_components'][1]['long_name']
所以它会是
var geocoder = new google.maps.Geocoder();
$('.zip').bind('change focusout', function () {
var $this = $(this);
if ($this.val().length == 5) {
geocoder.geocode({ 'address': $this.val() }, function (result, status) {
var state = "N/A";
var city = "N/A";
//start loop to get state from zip
for (var component in result[0]['address_components']) {
for (var i in result[0]['address_components'][component]['types']) {
if (result[0]['address_components'][component]['types'][i] == "administrative_area_level_1") {
state = result[0]['address_components'][component]['short_name'];
// do stuff with the state here!
$this.closest('tr').find('select').val(state);
// get city name
city = result[0]['address_components'][1]['long_name'];
// Insert city name into some input box
$this.closest('tr').find('.city').val(city);
}
}
}
});
}
});
我已经重写了上面的解决方案,使其看起来更优雅:
var zipCode = '48201';
var country = 'United States';
var geocoder = new google.maps.Geocoder();
geocoder.geocode({ 'address': zipCode + ',' + country }, function (result, status) {
var stateName = '';
var cityName = '';
var addressComponent = result[0]['address_components'];
// find state data
var stateQueryable = $.grep(addressComponent, function (x) {
return $.inArray('administrative_area_level_1', x.types) != -1;
});
if (stateQueryable.length) {
stateName = stateQueryable[0]['long_name'];
var cityQueryable = $.grep(addressComponent, function (x) {
return $.inArray('locality', x.types) != -1;
});
// find city data
if (cityQueryable.length) {
cityName = cityQueryable[0]['long_name'];
}
}
});
以下是使用googleapis从邮政编码中检查城市名称的代码。
<html>
<head>
<meta name="viewport" content="initial-scale=1.0, user-scalable=no">
<meta charset="utf-8">
<title>Geocoding service</title>
<script src="https://maps.googleapis.com/maps/api/js?v=3.exp"></script>
<script>
var geocoder;
var map;
function codeAddress() {
geocoder = new google.maps.Geocoder();
var address = document.getElementById('address').value;
geocoder.geocode({ 'address': address }, function (results, status) {
if (status == google.maps.GeocoderStatus.OK) {
for (var component in results[0]['address_components']) {
for (var i in results[0]['address_components'][component]['types']) {
if (results[0]['address_components'][component]['types'][i] == "administrative_area_level_1") {
state = results[0]['address_components'][component]['long_name'];
alert(results[0]['address_components'][1]['long_name'] + ' , ' + state);
}
}
}
} else {
alert('Invalid Zipcode');
}
});
}
</script>
</head>
<body>
<div id="panel">
<input id="address" type="textbox" value="Sydney, NSW">
<input type="button" value="Geocode" onclick="codeAddress()">
</div>
<div id="map-canvas"></div>
</body>
</html>
此 TypeScript 将返回 JSON 结果,例如:
{
country : { long_name : "someString", short_name : "someStrong" },
city : { long_name : "someString", short_name : "someString" },
state : { long_name : "someString", short_name : "someString" }
}
并且可以使用代码调用: let test = new ZipCodeDeconstructor().deconstruct('20009');
let rp = require('request-promise');
enum IGoogleMapResultType {
COUNTRY = <any>'country',
LOCALITY = <any>'locality',
SUBLOCALITY_LEVEL_1 = <any>'sublocality_level_1',
ADMINISTRATIVE_AREA_LEVEL_1 = <any>'administrative_area_level_1',
// These may be used later, don't delete them, they're for reference
POSTAL_CODE = <any>'postal_code',
NEIGHBORHOOD = <any>'neighborhood',
POLITICAL = <any>'political',
ADMINISTRATIVE_AREA_LEVEL_2 = <any>'administrative_area_level_2',
ADMINISTRATIVE_AREA_LEVEL_3 = <any>'administrative_area_level_3'
}
interface IGoogleMapResult {
address_components : {
long_name? : string
short_name? : string
types : IGoogleMapResultType[]
}[],
formatted_address : string,
geometry: any,
place_id: string,
types: IGoogleMapResultType[]
}
type IGoogleMapResults = any[];
type ZipCodeDeconstructorProperty = {
long_name: string,
short_name: string
}
// What we return from this component
export type ZipCodeDeconstructorResponse = {
city: ZipCodeDeconstructorProperty,
state: ZipCodeDeconstructorProperty,
country: ZipCodeDeconstructorProperty
}
export class ZipCodeDeconstructor {
static apiUrl = "http://maps.googleapis.com/maps/api/geocode/json?address=";
constructor() {}
// main entry point, deconstruct a 5 digit zip into city, state, zip into the corresponding properties
async deconstruct(zip):Promise<ZipCodeDeconstructorResponse> {
let response:any = await this._makeCall(zip);
let firstResult = response.results[0];
let returnObject = {
city : this._extractCity(firstResult),
state : this._extractState(firstResult),
country : this._extractCountry(firstResult)
};
console.log("[Zip Code Deconstructor] returning: ", returnObject);
return returnObject;
}
private _createZipcodeUrl(zip) {
return ZipCodeDeconstructor.apiUrl + zip + '&sensor=true';
}
private async _makeCall(zip) {
return await rp({uri : this._createZipcodeUrl(zip), json : true });
}
private _extractOfTypeFromResult(typesArray:IGoogleMapResultType[], result:IGoogleMapResult) {
for(let i = 0; i < result.address_components.length; i++) {
let addressComponentAtIndex = result.address_components[i];
let type:IGoogleMapResultType = addressComponentAtIndex.types[0];
if(typesArray.indexOf(type) !== -1) {
return {
long_name : addressComponentAtIndex.long_name,
short_name : addressComponentAtIndex.short_name
}
}
}
}
private _extractCity(result:IGoogleMapResult) {
return this._extractOfTypeFromResult([IGoogleMapResultType.SUBLOCALITY_LEVEL_1,
IGoogleMapResultType.LOCALITY], result)
}
private _extractState(result:IGoogleMapResult) {
return this._extractOfTypeFromResult([IGoogleMapResultType.ADMINISTRATIVE_AREA_LEVEL_1], result);
}
private _extractCountry(result:IGoogleMapResult) {
return this._extractOfTypeFromResult([IGoogleMapResultType.COUNTRY], result);
}
}
// let test = new ZipCodeDeconstructor().deconstruct('20009');
顶部的接口应该可以帮助您了解返回的内容以及应该传入的内容。
相关文章:
- 从城市名称获取惊喜
- 如何使用onLoad加载jQuery JSON.从Zipcode On Form获取城市和州
- 获取地理位置's城市名称
- 传递国家名称时获取所有州/地区/城市
- 仅通过 Google 地图 API 自动完成功能获取城市名称
- 从邮政编码谷歌地理编码中获取城市名称
- 地理位置代码获取附近的城市
- 使用Google api获取城市的州/国家建议
- 如何在谷歌地图中通过ip获取城市名称
- 从城市名称获取邮政编码的最简单方法
- 使用谷歌地图地理编码反向获取城市名称的简单功能
- Javascript,使用地理位置获取城市名称
- 如何从地理编码对象获取地区/城市
- 在bing地图中使用HTML,js从城市名称中获取经纬度
- 在提交表单时识别/获取城市
- 从输入javascript的邮政编码中获取城市和州
- 如何从经纬度点获取城市名称
- 如何在电话缺口中从经纬度获取城市名称
- 如何使用谷歌地图地理编码获取城市
- 使用Google地理编码API从州/省获取城市/城镇列表