我正在开发一个应用程序,让用户可以保存目的地,然后单击一次导航到该目的地。在多种情况下,输入的位置(由Google Place API自动填充提供)然后点击导航,会将我带到错误的位置。
一个例子是寻找乔治布什洲际机场。当我开始输入时,自动完成建议是:
乔治布什洲际机场,美国德克萨斯州休斯顿北航站楼
但是,当我启动导航到此位置的意图时:
List<Integer> filterTypes = new ArrayList<Integer>();
filterTypes.add(Place.TYPE_STREET_ADDRESS);
AutocompleteFilter filter = AutocompleteFilter.create(filterTypes);
// Create and attach adapter
mAdapter = new PlaceAutocompleteAdapter(context, android.R.layout.simple_list_item_1,
mGoogleApiClient,MainActivity.CURRENT_BOUNDS , filter);
其中mapData.getPlace()是一个等于上述地址的字符串,导航启动并指示我到William P. Hobby机场。
这是另一个例子。当我搜索Hobby Airport时,地方自动填充表明:
Hobby Airport,Airport Boulevard,Houston TX,United States
但是,当我启动导航意图(如上所述)时,它会导航到
休斯顿霍比机场希尔顿逸林酒店
似乎AutoComplete提供的地址不是可导航的地址,导航意图会选择最接近的建议。
我尝试过的一种方法是过滤自动完成结果,例如AutoCompleteFilter(如此处https://developers.google.com/places/android/autocomplete所示)。我的代码如下:
{{1}}
但这经常导致“获取自动填充预测API调用时出错:状态{statusCode = NETWORK_ERROR,resolution = null}”
答案 0 :(得分:0)
我通过对自动填充的结果进行地理编码来解决这个问题。我使用Geocoder对象并采用它提供的第一个建议。
Geocoder geocoder = new Geocoder(context, Locale.US);
try {
// Take first suggestion from geocoder object
List<Address> coordinates = geocoder.getFromLocationName(mapData.getPlace(),1);
//If a geocode result is supplied, use it. Otherwise, use the string from mapData
if (coordinates.size() > 0){
double latitude = coordinates.get(coordinates.size() - 1).getLatitude();
double longitude = coordinates.get(coordinates.size() - 1).getLongitude();
coords = (latitude + "," + longitude);}
else{
coords = mapData.getPlace();}
然后我将coords传递给导航意图。