Java 将位置坐标转换为长整型和纬度的双精度



我一直在安卓工作室上制作一个移动安卓应用程序,我已经在数据库中保存了位置。我需要将这些长和纬度转换为双精度,以便它可以在谷歌地图片段中使用。

目前,它正在从数据库中获取字符串,如下所示:

  Cursor res = dbHelper3.getEvent(journey, message);
    if (res.getCount() == 0) {
        showMessageData("Error", "No data");
        return;
    }
    StringBuffer buffer = new StringBuffer();
    while (res.moveToNext()) {
        buffer.append(res.getString(1));
    }

但是将其转换为双精度存在问题,因为 long 和 lat 都保存为一个大字符串。例如,它将打印:

"52.301293 0.185935"

当我尝试这个

 String location = buffer.toString();
    locationText.setText(buffer.toString().trim());
    float f = Float.parseFloat(location);

它给出了一个错误:

这不能转换为双精度值,

因为它的两个单独的数字有没有办法以某种方式将它们分成两个双精度数字,或者我是否必须重新设计我的数据库获取位置的方式?

您正在尝试将包含空格的字符串转换为双精度,这最终会导致应用程序崩溃。您需要按空格将字符串"位置"拆分为两个字符串,如下所示:

String[] splited = location.split("\s+");

然后你可以隐蔽它翻倍,如下所示

double latitude = Double.parseDouble(splited[0]);
double longitude = Double.parseDouble(splited[1]);

您需要像这样分别保存纬度和经度信息:

String location = "52.301293 0.185935";
String[] afterSplitLoc = location.split(" ");

之后将它们转换为双倍,如下所示:

double latitude = Double.parseDouble(afterSplitLoc[0]);
double longitude = Double.parseDouble(afterSplitLoc[1]);

而不是在地图上使用。例如,添加一个标记:

   private GoogleMap googleMap((MapView)rootView.findViewById(R.id.YOURMAPID)).getMap();
   googleMap.addMarker(new MarkerOptions().position(new LatLng( latitude, -longitude)).title("Marker"));

IMO,除非您有特殊原因,否则您应该将纬度和经度保存在单独的列中,因为这将使将来的更新操作更容易。


您可以使用 split(( 方法来分隔这两个值:

String location = "52.301293 0.185935"; 
String[] latlng = location.split(" ");
System.out.println("Lat = " +latlng[0]+" Longitude = "+latlng[1]);
//You will get sth like "Lat = 52.301293 Longitude = 0.185935"

只需使用这样的东西:

String location = buffer.toString().trim();
String[] latLon = location.split(" ");
double lat = Double.parseDouble(latLon[0]);
double lon = Double.parseDouble(latLon[1]);

感谢kshetline,

工作完美

 String string = buffer.toString();
    String[] parts = string.split(" ");
    String part1 = parts[0]; // 004
    String part2 = parts[1]; // 034556
    locationText.setText(part1 + "n" + part2);
    float longNum = Float.parseFloat(part1);
    float latNum = Float.parseFloat(part2);
    locationText.setText(longNum + "n" + latNum);
    final LatLng eventLocation1 = new LatLng(longNum, latNum);

最新更新