我有一个map活动,上面还有一个EditText,每当地图上有拖动时,我想在EditText中显示不断变化的地址。我目前正在使用Geocoder类根据地图提供的坐标检索地址。但是这种方式在地图的流畅拖动运动中造成了很大的滞后性。是否有更好的方法检索地址或更高效的方法使用Geocoder类?现在,我已经在地图的OnCameraChangeListener事件中实现了getAddress()方法。这是密码。
mMap.setOnCameraChangeListener(new GoogleMap.OnCameraChangeListener() {
@Override
public void onCameraChange(CameraPosition cameraPosition) {
double latitude=mMap.getCameraPosition().target.latitude;
double longitude=mMap.getCameraPosition().target.longitude;
String _Location="";
Geocoder geocoder = new Geocoder(getApplicationContext(), Locale.getDefault());
try {
List<Address> listAddresses = geocoder.getFromLocation(latitude, longitude, 1);
if(null!=listAddresses&&listAddresses.size()>0){
_Location = listAddresses.get(0).getAddressLine(0);
}
} catch (IOException e) {
e.printStackTrace();
}
EditText addressTxt=(EditText) findViewById(R.id.search_address_txt);
addressTxt.setText(_Location);
}
});
geocoder$GetFromLocation()
是一个阻塞调用,这意味着它将冻结UI线程,直到api返回地址。唯一的解决方案是在后台线程上运行此调用。
有两种方法可以实现这一点:
意向服务
。您可以在这里找到如何操作的详细信息。我个人觉得这是矫枉过正,非常复杂。AsyncTask
。查看此图可获得总体思路,并根据您的需要实施。更新:我从我的一个旧项目中提取了这段代码,看看是否有用。
AsyncGeocoderObject.java // object to pass to asynctask
public class AsyncGeocoderObject {
public Location location; // location to get address from
Geocoder geocoder; // the geocoder
TextView textView; // textview to update text
public AsyncGeocoderObject(Geocoder geocoder, Location location, TextView textView) {
this.geocoder = geocoder;
this.location = location;
this.textView = textView;
}
}
AsyncTask实现
public class AsyncGeocoder extends AsyncTask<AsyncGeocoderObject, Void, List<Address>> {
private TextView textView;
@Override
protected List<Address> doInBackground(AsyncGeocoderObject... asyncGeocoderObjects) {
List<Address> addresses = null;
AsyncGeocoderObject asyncGeocoderObject = asyncGeocoderObjects[0];
textView = asyncGeocoderObject.textView;
try {
addresses = asyncGeocoderObject.geocoder.getFromLocation(asyncGeocoderObject.location.getLatitude(),
asyncGeocoderObject.location.getLongitude(), 1);
} catch (IOException e) {
e.printStackTrace();
}
return addresses;
}
@Override
protected void onPostExecute(List<Address> addresses) {
Log.v("onPostExecute", "location: " + addresses);
String address;
if (addresses != null)
address = addresses.get(0).getLocality() + ", " + addresses.get(0).getCountryName();
else address = "Service unavailable.";
textView.setText(address);
}
}
在位置更改时调用方法:
new AsyncGeocoder().execute(new AsyncGeocoderObject(
new Geocoder(this),
location,
locationTV
));
>
AsyncGeocoderObject
并复制内容AsyncGeocoder
并复制内容。现在,假设您希望在mainactivity
中获取用户的位置,并在textview中显示地址,例如LocationTV
。实例化textview之后,创建AsyncGeocoder
的新对象并传入参数。例如:
// in onCreate()
new AsyncGeocoder().execute(new AsyncGeocoderObject(
new Geocoder(this), // the geocoder object to get address
location, // location object,
locationTV // the textview to set address on
));
此外,如果您没有location对象,请使用您拥有的纬度和经度创建。请参阅此帖子了解如何。
希望这对你有帮助!
本文向大家介绍基于python实现地址和经纬度转换,包括了基于python实现地址和经纬度转换的使用技巧和注意事项,需要的朋友参考一下 中文领域: 指的是提取境内地址的经纬度,的主要调用的是百度API。中间经历了一些波折,刚开始直接使用网上代码debug半天都不行,才发现要随时跟进官方改动,使用别人的API一定要看说明书啊! 首先需要从百度地图平台上注册一个AK(在这之前要注册百度的开发者身份,免
本文向大家介绍Android编程获取地理位置的经度和纬度实例,包括了Android编程获取地理位置的经度和纬度实例的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了Android编程获取地理位置的经度和纬度。分享给大家供大家参考,具体如下: 在Android应用程序中,可以使用LocationManager来获取移动设备所在的地理位置信息。看如下实例:新建android应用程序TestLoc
本文向大家介绍使用百度地图api实现根据地址查询经纬度,包括了使用百度地图api实现根据地址查询经纬度的使用技巧和注意事项,需要的朋友参考一下 以上就是代码的全部内容了,小伙伴们可以直接使用在项目中哦,不用跟我说谢谢,请叫我雷锋大大~
问题内容: 我听说可以提交一个地址而不是经度和纬度,这对于我的系统来说将更加可行。用户在创建个人资料时必须输入他们的地址,之后他们的个人资料将显示其房屋的Google地图。我目前可以将Google Maps API与经度和纬度完美配合使用: 请有人帮我修改代码,以便它使Google Maps API可以在其位置请求地址,因为我想直接从mySQL数据库中读取用户的地址。 问题答案: 使用Google
问题内容: 给定纬度和经度,我们如何使用Javascript或Python将其转换为街道地址? 问题答案: 大多数人在99%的时间内将您链接到Google Maps的API。不错的答案。但是- 注意禁止用途,使用限制和使用条款!尽管许多分布式应用程序并未违反使用限制,但对于Web应用程序而言却是相当有限的。TOS不允许您将皮肤上的数据重新用于Google应用程序中。您不希望因Google发出的终止
本文向大家介绍JS使用百度地图API自动获取地址和经纬度操作示例,包括了JS使用百度地图API自动获取地址和经纬度操作示例的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了JS使用百度地图API自动获取地址和经纬度操作。分享给大家供大家参考,具体如下: 在实际工作中我们经常会遇到这样的问题,但是当我们去看百度API的时候往往又达不到我们的要求。 故此,本篇博文讲述如何使用百度地图API自动获