Android Intent for Navigation - 我如何确保它能够导航到正确的位置?

时间:2015-06-24 15:17:52

标签: android android-intent navigation google-places-api

我正在开发一个应用程序,让用户可以保存目的地,然后单击一次导航到该目的地。在多种情况下,输入的位置(由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}”

1 个答案:

答案 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传递给导航意图。

相关问题