Java 从字符串数组创建Android位置

Java 从字符串数组创建Android位置,java,android,arrays,location,Java,Android,Arrays,Location,我正在开发一个Android应用程序。我需要比较位置,看看它们之间的距离。然而,我有很多。我发现的最简单的方法是将它们存储在字符串数组中,然后比较它们。我已经搜索过了,但还没有找到将项目从字符串数组放入位置的方法。我试过: double distance Location locationA = new Location(“point A”) locationA.setLatitude(latitude); locationA.setLongitude(Longitude); Locat

我正在开发一个Android应用程序。我需要比较位置,看看它们之间的距离。然而,我有很多。我发现的最简单的方法是将它们存储在字符串数组中,然后比较它们。我已经搜索过了,但还没有找到将项目从字符串数组放入位置的方法。我试过:

double distance

Location locationA = new Location(“point A”)

locationA.setLatitude(latitude);

locationA.setLongitude(Longitude);

Location locationB = new Location(“point B”);

locationB.setLatitude(Latitude.get(0));

LocationB.setLongitude(latitude.get(0));

distance = locationA.distanceTo(locationB);
但它不起作用。我的代码发布在下面:

NearestStations.java

public class Neareststations extends Activity implements LocationListener {
LocationManager mLocationManager;
@SuppressLint("NewApi")
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.neareststations);
    // Show the Up button in the action bar.
    getActionBar().setDisplayHomeAsUpEnabled(true);



        mLocationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);

        Location location = mLocationManager.getLastKnownLocation(LocationManager.GPS_PROVIDER);
        double longitude = location.getLongitude();
        double latitude = location.getLatitude();
        Log.i("MYTAG", String.valueOf(longitude));
        Log.i("MYTAG", String.valueOf(latitude));
        if(location != null && location.getTime() > Calendar.getInstance().getTimeInMillis() - 2 * 60 * 1000) {
            // Do something with the recent location if it is less than two minutes old
            Log.i("MYTAG", String.valueOf(location));
            Log.i("MYTAG", String.valueOf(longitude));
            Log.i("MYTAG", String.valueOf(latitude));
        }
        else {
            mLocationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 5, 50, this);
            Log.i("MYTAG", String.valueOf(location));
        }
    }

    public void onLocationChanged(Location location) {
        if (location != null) {
        // Do something withthe current location
            Log.i("MYTAG", String.valueOf(location));

        }
    }

    public void onProviderDisabled(String arg0) {}
    public void onProviderEnabled(String arg0) {}
    public void onStatusChanged(String arg0, int arg1, Bundle arg2) {}

    String[] Stations = getResources().getStringArray(R.array.Stations);
    String[] Longitude = getResources().getStringArray(R.array.Longitude);
    String[] Latitude = getResources().getStringArray(R.array.Latitude);

    Map<String, String> myMap = new HashMap<String, String>();{
    for (int i = 0; i <8; i++) {
        myMap.put(Stations[i], Latitude[i]);
    }
    }

    Map<String, String> myMap1 = new HashMap<String, String>();{
    for (int h = 0; h <8; h++) {
        myMap1.put(Stations[h], Longitude[h]);
    }
    }
公共类Neareststations扩展活动实现LocationListener{
地点经理M地点经理;
@SuppressLint(“新API”)
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(右侧布局,最近的站点);
//在操作栏中显示“向上”按钮。
getActionBar().setDisplayHomeAsUpEnabled(true);
mLocationManager=(LocationManager)getSystemService(Context.LOCATION\u服务);
Location Location=mlLocationManager.getLastKnownLocation(LocationManager.GPS\U提供程序);
double longitude=location.getLongitude();
双纬度=location.getLatitude();
Log.i(“MYTAG”,String.valueOf(经度));
Log.i(“MYTAG”,String.valueOf(纬度));
if(location!=null&&location.getTime()>Calendar.getInstance().getTimeInMillis()-2*60*1000){
//如果最近的位置不到两分钟,请对其进行处理
Log.i(“MYTAG”,String.valueOf(location));
Log.i(“MYTAG”,String.valueOf(经度));
Log.i(“MYTAG”,String.valueOf(纬度));
}
否则{
mlLocationManager.RequestLocationUpdate(LocationManager.GPS_提供程序,5,50,本);
Log.i(“MYTAG”,String.valueOf(location));
}
}
已更改位置上的公共无效(位置){
如果(位置!=null){
//对当前位置执行某些操作
Log.i(“MYTAG”,String.valueOf(location));
}
}
公共无效onProviderDisabled(字符串arg0){}
公共无效onProviderEnabled(字符串arg0){}
public void onStatusChanged(字符串arg0,int arg1,Bundle arg2){}
String[]Stations=getResources().getStringArray(R.array.Stations);
字符串[]经度=getResources().getStringArray(R.array.Longitude);
String[]Latitude=getResources().getStringArray(R.array.Latitude);
Map myMap=newhashmap(){

对于(int i=0;i字符串需要转换为双精度。此外,在比较两点时,您应该使用distanceBetween(),但distanceTo()对于较小的距离适用

下面是一个将字符串值转换为双精度以用于位置的基本示例。距离将以米为单位返回,如果需要英里,请乘以0.000621371192237334

double distance;  

String str_lat_start = "29.287260";
String str_lon_start = "-81.100327";
String str_lat_end = "26.016045";
String str_lon_end = "-80.150169";

double lat_start = 0;
double lon_start = 0;
double lat_end = 0;
double lon_end = 0;

try {

    lat_start = Double.parseDouble( str_lat_start ); 
    lon_start = Double.parseDouble( str_lon_start );
    lat_end = Double.parseDouble( str_lat_end );
    lon_end = Double.parseDouble( str_lon_end );

} catch (NumberFormatException e) {
    Log.v("Main", "Convert to Double Failed : ");
}

Location locationA = new Location("point A");  
locationA.setLatitude( lat_start );  
locationA.setLongitude( lon_start );  

Location locationB = new Location("point B");  
locationB.setLatitude( lat_end );  
locationB.setLongitude( lon_end );  

distance = locationA.distanceTo(locationB) * 0.000621371192237334; 

字符串需要转换为双精度。此外,在比较两点时应该使用distanceBetween(),但distanceTo()适用于较小的距离

下面是一个将字符串值转换为双精度以用于位置的基本示例。距离将以米为单位返回,如果需要英里,请乘以0.000621371192237334

double distance;  

String str_lat_start = "29.287260";
String str_lon_start = "-81.100327";
String str_lat_end = "26.016045";
String str_lon_end = "-80.150169";

double lat_start = 0;
double lon_start = 0;
double lat_end = 0;
double lon_end = 0;

try {

    lat_start = Double.parseDouble( str_lat_start ); 
    lon_start = Double.parseDouble( str_lon_start );
    lat_end = Double.parseDouble( str_lat_end );
    lon_end = Double.parseDouble( str_lon_end );

} catch (NumberFormatException e) {
    Log.v("Main", "Convert to Double Failed : ");
}

Location locationA = new Location("point A");  
locationA.setLatitude( lat_start );  
locationA.setLongitude( lon_start );  

Location locationB = new Location("point B");  
locationB.setLatitude( lat_end );  
locationB.setLongitude( lon_end );  

distance = locationA.distanceTo(locationB) * 0.000621371192237334; 
A和B之间的距离是
结果[0]



A和B之间的距离是
results[0]
但它不起作用。
意味着你得到了零或者崩溃或者…什么?另外,我相信你有一些打字错误,因为你有
LocationB.setLongitude(latitude.get(0))
。至少从方法命名来看,你不应该提供经度吗?你说的“不起作用”是什么意思?你得到了错误的位置吗?你得到了异常或崩溃吗?请发布实际信息以便我们可以帮助你。你不能只做
双重解析(纬度)
?@gunar我指的是经度。
但它不起作用。
意味着你得到零或者崩溃或者…什么?另外,我相信你有一些拼写错误,因为你有
位置b.setLongitude(latitude.get(0))
。至少从方法命名来看,你不应该提供经度吗?你说的“不起作用”是什么意思?你得到了错误的位置吗?你得到了异常或崩溃吗?请发布实际信息以便我们可以帮助你。你不能只做
双重解析(纬度)
?@gunar我指的是经度。如果我错了,请纠正我,但是distanceBetween()不是只用于长距离吗?另外,你能为转换部分发布一些代码吗?我得到
当我尝试
双G;G.convert(Lon)时,类型Double的convert(String)方法未定义;
更新了一个将字符串转换为双精度的代码示例。您需要在try块中执行转换并捕获异常,否则您的应用程序将崩溃。此外,如果您使用LocationManager,您还需要将这些权限添加到清单中……谢谢,这看起来很棒。有没有简单的方法来迭代或重复此操作,bec因为我有很多事情要做。如果我错了,请纠正我,但是distanceBetween()不是只用于长距离吗?另外,你能为转换部分发布一些代码吗?我得到
当我尝试
Double G;G.convert(Lon)时,Double类型的convert(String)方法没有定义;
更新了一个将字符串转换为双精度的代码示例。您需要在try块中执行转换并捕获异常,否则您的应用程序将崩溃。此外,如果您使用LocationManager,您还需要将这些权限添加到清单中……谢谢,这看起来很棒。有没有简单的方法来迭代或重复此操作,bec因为我有很多事情要做。
float[] results = new float[3];
    Location.distanceBetween(locationA.getLatitude(), locationA.getLongitude(), locationB.getLatitude(), locationB.getLongitude(), results);