Java将位置坐标转换为double和lat的double

时间:2018-03-24 16:39:42

标签: java android type-conversion

我一直在android studio上制作一个移动Android应用程序,我已经在数据库中保存了位置。我需要将这些long和lats转换为double,以便可以在google地图片段中使用它。

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

  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转换为double是一个问题,因为long和lat都保存为一个大字符串。例如,它将打印:

“52.301293 0.185935”

当我尝试这个时

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

它出错了:

这不能转换为double,因为它的两个单独的数字有没有办法以某种方式将这些分成两个双数或我是否必须重新设计我的数据库获取位置的方式?

5 个答案:

答案 0 :(得分:2)

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

String location = "52.301293 0.185935";

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

之后将它们转换为Double:

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"));

答案 1 :(得分:1)

您正在尝试将包含空格的字符串转换为double,这最终会导致app崩溃。 您需要将字符串“'location''按空格分割为两个字符串:

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

然后你可以将其转换为双倍,如下所示

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

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

答案 2 :(得分:0)

只需使用以下内容:

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

答案 3 :(得分:0)

谢谢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);

答案 4 :(得分:0)

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"