JQuery 地址自动完成 geocodeapi.io
JQuery adress autocomplete with geocodeapi.io
我正在尝试使用 Jquery 为地址自动完成构建一个自动完成输入字段。
我选择了 geocodeapi 作为来源,它是免费的,而且我没有 google api.
的信用卡
这是文档https://geocodeapi.io/documentation#autocomplete
自动完成工作,请求和答案来了,但我不知道如何格式化或阅读 json 以便它在自动完成中显示地址,我变得未定义
$(function() {
$("#customerAdress").autocomplete({
source: function(request, response) {
$.ajax({
url: "https://app.geocodeapi.io/api/v1/autocomplete?apikey=mykey",
dataType: "json",
data: {
text: request.term
},
success: function(data) {
console.log("here comes data for test")
console.log(data)
var data = $.map(data, function(obj) {
return {
label: obj.Street+','+obj.Housnumber+','+ obj.zip+','+ obj.city, //here is the problem i think
};
});
response(data);
}
});
},
minLength: 1,
});
});
最后,为什么可以使用层函数将结果降低到特定状态
data
是一个对象。您必须映射 data.features
,而不是 data
。那么您将获得的每个对象将是:
{
"type":"Feature",
"geometry":{
"type":"Point",
"coordinates":[
-73.976942,
40.760478
]
},
"properties":{
"id":"way/118476502",
"gid":"openstreetmap:address:way/118476502",
"layer":"address",
"source":"openstreetmap",
"source_id":"way/118476502",
"name":"666 Fifth Avenue",
"housenumber":"666",
"street":"Fifth Avenue",
"accuracy":"point",
"country":"United States",
"country_gid":"whosonfirst:country:85633793",
"country_a":"USA",
"region":"New York",
"region_gid":"whosonfirst:region:85688543",
"region_a":"NY",
"county":"New York County",
"county_gid":"whosonfirst:county:102081863",
"county_a":"NE",
"locality":"New York",
"locality_gid":"whosonfirst:locality:85977539",
"locality_a":"NYC",
"borough":"Manhattan",
"borough_gid":"whosonfirst:borough:421205771",
"neighbourhood":"Midtown West",
"neighbourhood_gid":"whosonfirst:neighbourhood:85882233",
"continent":"North America",
"continent_gid":"whosonfirst:continent:102191575",
"label":"666 Fifth Avenue, Manhattan, New York, NY, USA",
"addendum":{
"osm":{
"wikidata":"Q2818016",
"wikipedia":"en:666 Fifth Avenue"
}
}
}
},
所以你想要obj.properties.street
、obj.properties.country
等等
const objs = data.features.map( obj => ({
label: obj.properties.street+','+obj.properties.Housnumber+','+ obj.properties.zip+','+ obj.properties.city
}));
response(objs);
我正在尝试使用 Jquery 为地址自动完成构建一个自动完成输入字段。 我选择了 geocodeapi 作为来源,它是免费的,而且我没有 google api.
的信用卡这是文档https://geocodeapi.io/documentation#autocomplete 自动完成工作,请求和答案来了,但我不知道如何格式化或阅读 json 以便它在自动完成中显示地址,我变得未定义
$(function() {
$("#customerAdress").autocomplete({
source: function(request, response) {
$.ajax({
url: "https://app.geocodeapi.io/api/v1/autocomplete?apikey=mykey",
dataType: "json",
data: {
text: request.term
},
success: function(data) {
console.log("here comes data for test")
console.log(data)
var data = $.map(data, function(obj) {
return {
label: obj.Street+','+obj.Housnumber+','+ obj.zip+','+ obj.city, //here is the problem i think
};
});
response(data);
}
});
},
minLength: 1,
});
});
最后,为什么可以使用层函数将结果降低到特定状态
data
是一个对象。您必须映射 data.features
,而不是 data
。那么您将获得的每个对象将是:
{
"type":"Feature",
"geometry":{
"type":"Point",
"coordinates":[
-73.976942,
40.760478
]
},
"properties":{
"id":"way/118476502",
"gid":"openstreetmap:address:way/118476502",
"layer":"address",
"source":"openstreetmap",
"source_id":"way/118476502",
"name":"666 Fifth Avenue",
"housenumber":"666",
"street":"Fifth Avenue",
"accuracy":"point",
"country":"United States",
"country_gid":"whosonfirst:country:85633793",
"country_a":"USA",
"region":"New York",
"region_gid":"whosonfirst:region:85688543",
"region_a":"NY",
"county":"New York County",
"county_gid":"whosonfirst:county:102081863",
"county_a":"NE",
"locality":"New York",
"locality_gid":"whosonfirst:locality:85977539",
"locality_a":"NYC",
"borough":"Manhattan",
"borough_gid":"whosonfirst:borough:421205771",
"neighbourhood":"Midtown West",
"neighbourhood_gid":"whosonfirst:neighbourhood:85882233",
"continent":"North America",
"continent_gid":"whosonfirst:continent:102191575",
"label":"666 Fifth Avenue, Manhattan, New York, NY, USA",
"addendum":{
"osm":{
"wikidata":"Q2818016",
"wikipedia":"en:666 Fifth Avenue"
}
}
}
},
所以你想要obj.properties.street
、obj.properties.country
等等
const objs = data.features.map( obj => ({
label: obj.properties.street+','+obj.properties.Housnumber+','+ obj.properties.zip+','+ obj.properties.city
}));
response(objs);