限制对地址自动完成的mapbox地理编码器api调用



我有一个输入框,它接受搜索查询字符串和下拉列表,下拉列表根据API调用的响应进行填充。

我不想对每个查询笔划进行调用,而是将api调用限制为仅在用户输入了6个或更多字符时进行。

这是我可以传递的可选参数吗?下面是我的代码。

dbc.InputGroup(
[
dbc.InputGroupAddon("Property Address"),
dcc.Input(id='address_autocomplete'),
dcc.Dropdown(id='address_dropdown',style={'width':'60%'})
],
style={'margin-top':'30px', 'width': '53%', 'float': 'left'},
),

# Property address autocomplete
@app.callback(Output('address_dropdown', 'options'),
[Input('address_autocomplete', 'value')])
def autocomplete_address(value):

print(value)

addr = {}

# Call mapbox API and limit Autocomplete address suggestions
ret_obj = geocoder.forward(value, lon=-112.0913905, lat=33.4514652, limit=3)
response = ret_obj.json()

for i in range(len(response['features'])):

addr["res_{}".format(i)] = response['features'][i]['place_name']

if value:

return [{'label': addr['res_0'], 'value': addr['res_0']},
{'label': addr['res_1'], 'value': addr['res_1']},
{'label': addr['res_2'], 'value': addr['res_2']}]

# Function call
r = geocoder.forward('Washington Park', lon=-112.0913905, lat=33.4514652, limit=3)
rj = r.json()
# Return
Washington Park, Phoenix, Arizona 85015, United States
Washington Park Playground, Phoenix, Arizona 85015, United States
Washington Park, Chicago, Illinois 60637, United States

我正在使用python客户端进行mapbox web服务:https://github.com/mapbox/mapbox-sdk-py

您只需检查arg的长度,并且只有当它超过5时才进行调用。否则将阻止更新。

@app.callback(Output('address_dropdown', 'options'),
[Input('address_autocomplete', 'value')])
def autocomplete_address(value):
if len(value) < 6:
raise dash.exceptions.PreventUpdate
# the rest of the function
...  

最新更新