【问题标题】:Restrict geocoder to country将地理编码器限制在国家/地区
【发布时间】:2013-01-18 13:47:17
【问题描述】:

如何使用地理编码器限制国家/地区?我使用此代码,试图只查看美国,但它返回来自意大利和其他国家/地区的结果。

Geocoder geocoder = new Geocoder (getActivity(), Locale.US);

我有搜索,但我没有找到任何有用的东西。

【问题讨论】:

  • 你到底想做什么?
  • 我只想要美国的结果
  • 老实说,您似乎已经完成了达到预期效果所需的工作,但不知道为什么它不起作用
  • 感谢您的回答马特泰勒
  • 对不起,我帮不上忙!

标签: android maps geocode country


【解决方案1】:

我最近通过简单地将", USA" 附加到用户输入的末尾解决了这个问题。只需几行代码即可完美满足我们的需求:

public String restrictQueryToUsa(@NonNull String query) {
    String suffix = ", USA";
    return query.toUpperCase().endsWith( suffix ) ? query : query + suffix;
}

注意
我已经在各种输入上验证了这一点,包括:

  • 白金汉宫
  • 大街1234号
  • 荷兰
  • 伦敦
  • 东京
  • 麦当劳
  • 90210 等邮政编码有效
  • SFO 等机场代码也可以使用

【讨论】:

    【解决方案2】:

    您应该在您的 AutoComplete 适配器中实现 getFilter 方法,该方法应用于您的 AutoCompleteTextView,您还应该实现“Filterable”

    private class AutoCompleteAdapter extends ArrayAdapter<Address> implements
                Filterable {
    .....
    
    @Override
            public Filter getFilter() {
                Filter myFilter = new Filter() {
                    @Override
                    protected FilterResults performFiltering(
                            final CharSequence constraint) {
                        List<Address> addressList = null;
                        if (constraint != null) {
                            try {
                                addressList = mGeocoder.getFromLocationName(
                                        (String) constraint, 5);
                            } catch (IOException e) {
                            }
                        }
                        if (addressList == null) {
                            addressList = new ArrayList<Address>();
                        }
    
                        final FilterResults filterResults = new FilterResults();
                        filterResults.values = addressList;
                        filterResults.count = addressList.size();
    
                        return filterResults;
                    }
    
                    @SuppressWarnings("unchecked")
                    @Override
                    protected void publishResults(final CharSequence contraint,
                            final FilterResults results) {
                        clear();
                        for (Address address : (List<Address>) results.values) {
                            try {
    
    
    /* HERE IS YOUR COUNTRY CODE / CONDITIONS TO FILTER THE SUGGESTED ADDRESS*/
    
    
                                if (address.getCountryCode().equals("US")) { 
                                    add(address);
                                }
                            } catch (Exception e) {
                                // TODO: handle exception
                            }
    
                        }
                        if (results.count > 0) {
                            notifyDataSetChanged();
                        } else {
                            notifyDataSetInvalidated();
                        }
                    }
    
                    @Override
                    public CharSequence convertResultToString(
                            final Object resultValue) {
                        return resultValue == null ? ""
                                : createFormattedAddressFromAddress((Address) resultValue);
                    }
                };
                return myFilter;
            }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-08-15
      • 2015-01-07
      相关资源
      最近更新 更多