我最近尝试了Mapbox在Android上提供的地理编码示例。它运行良好,但是即使使用反向地理编码,它仅显示我的研究中的美国城市。例如,当我在地图上点击法国时,结果显示为“未找到”。它仅适用于美国。那么有没有办法获取其他国家(例如法国)的地理编码服务呢?
我最近尝试了Mapbox在Android上提供的地理编码示例。它运行良好,但是即使使用反向地理编码,它仅显示我的研究中的美国城市。例如,当我在地图上点击法国时,结果显示为“未找到”。它仅适用于美国。那么有没有办法获取其他国家(例如法国)的地理编码服务呢?
您是否有使用MapBox提供的地理编码器而不是Android提供的地理编码器的特定原因?
如果您真的想使用MapBox的地理编码器,您可以随时联系他们并提出技术问题。根据您所在的时区,他们通常会在一两个工作日内或更快地做出回应。
否则,您可能需要考虑使用Android的地理编码器。
地理编码器
用于处理地理编码和反向地理编码的类。地理编码是将街道地址或其他位置描述转换为(纬度,经度)坐标的过程。反向地理编码是将(纬度,经度)坐标转换为(部分)地址的过程。
这是我用来将字符串转换为地址列表的代码片段:
public class Foo extends AppCompatActivity{
@Override
protected void onCreate(Bundle savedInstanceState){
if(Geocoder.isPresent()){
Geocoder gc = new Geocoder(this);
List<Address> list = gc.getFromLocationName("Amsterdam", 10);
}
}
}
在编写测试代码时,我注意到 maxResults 参数目前无法正常工作。在大多数情况下,该函数的响应只返回一个结果。尽管如此,我仍然决定将其发布为答案,因为这个 bug 很可能会有一天被修复。而且现在它确实允许您搜索美国以外的地址。
Mapbox最近已经弃用了您正在使用的库,转而推荐使用Mapbox Android Services。它包括您试图实现的地理编码器,并且随着新功能的添加,将来会得到更新。
您能否发布一下您客户端的设置方式?这是我使用过的代码片段:
private void executeSearch(String query){
MapboxGeocoder client = new MapboxGeocoder.Builder()
.setAccessToken(getString(R.string.accessToken))
.setLocation(query)
.build();
client.enqueue(new Callback<GeocoderResponse>() {
@Override
public void onResponse(Response<GeocoderResponse> response, Retrofit retrofit) {
List<GeocoderFeature> results = response.body().getFeatures();
if (results.size() > 0) {
String placeName = results.get(0).getPlaceName();
Double placeLat = results.get(0).getLatitude();
Double placeLon = results.get(0).getLongitude();
Intent returnIntent = new Intent();
Bundle bundle = new Bundle();
bundle.putDouble("placeLat", placeLat);
bundle.putDouble("placeLon", placeLon);
bundle.putString("placeName", placeName);
returnIntent.putExtra("result", bundle);
setResult(Activity.RESULT_OK, returnIntent);
finish();
} else {
Toast.makeText(SearchActivity.this, "No Results", Toast.LENGTH_LONG).show();
}
}
@Override
public void onFailure(Throwable t) {
Log.e(LOG_TAG, "Error: ", t);
}
});
}// End executeSearch