2011-02-09 50 views
19

我使用的地理编码器类来获取通过使用下面的代码中的多个位置的对象:创建Android的位置对象

Geocoder geocoder = new Geocoder(this, Locale.getDefault()); 
    List<Address> addresses = geocoder.getFromLocation(LATITUDE, LONGITUDE, 3); 
    Address[] addresses_array = new Address[addresses.size()]; 

    addresses.toArray(addresses_array); 
    for(int i = 0; i < addresses_array.length; i++){ 
     //create location object here 
     locOBJ.setLatitude(LATITUDE); 
     locOBJ.setLongitude(LONGITUDE); 
    } 

此外,for循环里面,我想dymanically创建位置对象添加到阵列;

如何创建空白位置对象?

回答

38

假设您参考android.location.Location,请使用构造函数,该构造函数接受提供程序字符串并将其设置为任何您想要的。

+3

谢谢,我没有意识到字符串可能是我选择的任何东西。该文件说“位置(字符串提供商)” - 我一直想知道提供商应该是什么(GPS,3G ...?) – sisko 2011-02-09 14:23:38

+9

GPS是一个提供商,“网络”是另一个(这可能意味着wifi mac查找或最近的单元格塔)。这些是位置对象的内置系统提供者。由于它是提供(实例化)这些新的Location对象的代码,因此提供程序字符串完全取决于您。 – 2011-02-09 14:28:30

4

这实际上并不是它的目的,如果你正在寻找谷歌地图上的东西,你可能想看看GeoPoint类。处理Map OverlayItem对象时,您必须使用GeoPoint类。你打算怎么处理Location对象?您也应该在线程或AsyncTask中执行getFromLocation调用,因为它正在执行远程服务器调用。

使用GeoPoint类。

Geocoder geocoder = new Geocoder(this, Locale.getDefault()); 
List<Address> addresses = geocoder.getFromLocation(LATITUDE, LONGITUDE, 3); 
int size = addresses.size(); 
GeoPoint gp[] = new GeoPoint[size]; 
for(int i = 0; i<size; i++) { 
    Address addr = addresses.get(i); 
    gp[i] = new GeoPoint(addr.getLatitude()*1000000, 
         address.getLongitude()*1000000); 
} 

值为* 1000000,因为GeoPoint需要E6值。也意识到如果没有匹配的数组可能是长度为0.