【问题标题】:Java convert location coordinates into double for long and latJava将位置坐标转换为long和lat的double
【发布时间】:2018-03-24 16:39:42
【问题描述】:

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

目前它正在像这样从数据库中获取字符串:

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

它给出了一个错误:

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

【问题讨论】:

    标签: java android type-conversion


    【解决方案1】:

    你需要像这样分开保存纬度和经度信息:

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

    【讨论】:

      【解决方案2】:

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

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

      然后你可以将它转换为如下所示的两倍

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

      【讨论】:

        【解决方案3】:

        只要使用这样的东西:

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

        【讨论】:

          【解决方案4】:

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

          【讨论】:

            【解决方案5】:

            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"
            

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多