Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/316.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 通过在EditText中输入纬度和经度来计算两个位置之间的距离_Java_Android_Google Maps - Fatal编程技术网

Java 通过在EditText中输入纬度和经度来计算两个位置之间的距离

Java 通过在EditText中输入纬度和经度来计算两个位置之间的距离,java,android,google-maps,Java,Android,Google Maps,我试图计算谷歌地图上两个地点之间的距离。我正在从EditText输入纬度和经度, 但返回值为0米。代码中出现了什么问题,即如何获得实际距离 以下是我的应用程序的图片: public class Ma`inActivity extends AppCompatActivity implements OnMapReadyCallback { private TextView source; private TextView destination; private EditText sLatitude

我试图计算谷歌地图上两个地点之间的距离。我正在从
EditText
输入纬度和经度, 但返回值为0米。代码中出现了什么问题,即如何获得实际距离

以下是我的应用程序的图片:

public class Ma`inActivity extends AppCompatActivity implements OnMapReadyCallback {
private TextView source;
private TextView destination;
private EditText sLatitude1;
private EditText sLongtiude1;
private EditText dLatitude2;
private EditText dLongtiude2;
private Button button;

private GoogleMap mMap;
boolean mapReady = false;
MarkerOptions elsedaway;
MarkerOptions Elrob3;
Location location;



 static final CameraPosition elfayoum = CameraPosition.builder()
        .target(new LatLng(29.309324, 30.842973))
        .zoom(1)
        .bearing(6)
        .tilt(45)
        .build();
double lati1;
double longi1;
double lati2;
double longi2;
TextView textView;


@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    // find text that display distance
    textView = (TextView) findViewById(R.id.distance);
    MapFragment mapFragment = (MapFragment) getFragmentManager().findFragmentById(R.id.map);
    mapFragment.getMapAsync(this);
    // find edit text and text view
    source = (TextView) findViewById(R.id.sourc);
    destination = (TextView) findViewById(R.id.destination);
    sLatitude1 = (EditText) findViewById(R.id.lat1);
    sLongtiude1 = (EditText) findViewById(R.id.long1);
    dLatitude2 = (EditText) findViewById(R.id.lat2);
    dLongtiude2 = (EditText) findViewById(R.id.long2);
    // find button
    button = (Button) findViewById(R.id.getDistance);
    // find string from edittext
    String lat1 = sLatitude1.getText().toString();
    // parse string to double
    lati1 = ParseDouble(lat1);
    String lon1 = sLongtiude1.getText().toString();
    longi1 = ParseDouble(lon1);
    String lat2 = dLatitude2.getText().toString();
    lati2 = ParseDouble(lat2);
    String lon2 = dLongtiude2.getText().toString();
    longi2 = ParseDouble(lon2);
    Log.i("**lat", lat2);
    button.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {

            double xy1 = distanceBetween(new LatLng(lati1, longi1), new LatLng(lati1, longi2));
            String distanceis = fmt(xy1) + "meter";
            textView.setText(distanceis);
        }

    });


}

// mehtod to parse double from string

double ParseDouble(String strNumber) {
    if (strNumber != null && strNumber.length() > 0) {
        try {
            return Double.parseDouble(strNumber);
        } catch (Exception e) {
            return -1;   // or some value to mark this field is wrong. or make a function validates field first ...
        }
    } else return 0;
}

// get distance
public static Double distanceBetween(LatLng point1, LatLng point2) {
    if (point1 == null || point2 == null) {
        return null;
    }
    double vw = SphericalUtil.computeDistanceBetween(point1, point2);
    Log.i("distance isby utillib ", String.valueOf(vw));
    return vw;
}

public String fmt(double d) {

    return String.format("%s", d);
}

@Override
public void onMapReady(GoogleMap googleMap) {
    mapReady = true;
    mMap = googleMap;
    //    if(elsedaway!=null){
    //    mMap.addMarker(elsedaway);};
   //      mMap.addMarker(Elrob3);

 mMap.addPolyline(new PolylineOptions().geodesic(true)
                    .add(new LatLng(lati1, longi1))
                    .add(new LatLng(lati2, lati2))
            mMap.addCircle(new CircleOptions()
                    .center(new LatLng(29.291540, 30.601884))
                    .radius(500044)
                    .strokeColor(Color.GREEN)
                    .fillColor(Color.argb(54, 99, 255, 0)));
    flyTo(elfayoum);
}


首先,这里有一个错误:

double xy1 = distanceBetween(new LatLng(lati1, longi1), new LatLng(lati1, longi2));
在第二个参数中,应该使用
lati2
而不是
lati1

另外,将
getText()
移动到
onClick(…)
块中

    button.setOnClickListener(new View.OnClickListener() {
          @Override
          public void onClick(View v)
          {
              // find string from edittext
              String lat1 = sLatitude1.getText().toString();
              // parse string to double
              lati1 = ParseDouble(lat1);
              String lon1 = sLongtiude1.getText().toString();
              longi1 = ParseDouble(lon1);
              String lat2 = dLatitude2.getText().toString();
              lati2 = ParseDouble(lat2);
              String lon2 = dLongtiude2.getText().toString();
              longi2 = ParseDouble(lon2);

              ...
          }
      });

将这段代码移到onCLick中,并更正您的值,您的代码应该如下所示:

  button.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
    String lat1 = sLatitude1.getText().toString();
    // parse string to double
    lati1 = ParseDouble(lat1);
    String lon1 = sLongtiude1.getText().toString();
    longi1 = ParseDouble(lon1);
    String lat2 = dLatitude2.getText().toString();
    lati2 = ParseDouble(lat2);
    String lon2 = dLongtiude2.getText().toString();
    longi2 = ParseDouble(lon2);
            double xy1 = distanceBetween(new LatLng(lati1, longi1), new LatLng(lati2, longi2));
            String distanceis = fmt(xy1) + "meter";
            textView.setText(distanceis);
        }

    });
这可能会帮助您找到两个lat-long点之间的距离

是haversine公式的java实现


希望这可能有帮助

我更改它给我相同的距离保持距离为零还可以移动
getText()
中的
onClick
。请参阅我的编辑。谢谢它完成了--另一个问题--我需要将标记选项添加到我得到它的位置,这是我的代码,但应用程序崩溃----------------------------------------------------------------elsedaway=new MarkerOptions().position(new LatLng(lati1,longi1)).title(“place”).icon(BitmapDescriptorFactory.fromResource(R.drawable.bubble_掩码));我把它放在onClick上可以给我一些帮助看看2方法:distanceBetween和distanceTo on感谢它完成了--另一个问题--我需要在我得到它的位置上添加标记选项,这是我的代码,但应用程序崩溃----------------------------------------------------------------elsedaway=new MarkerOptions().position(new LatLng(lati1,longi1)).title(“place”).icon(BitmapDescriptorFactory.fromResource(R.drawable.bubble_mask));我把它放在onClick上,可以给我一些help@mohammedragabmohammedborik最好用新问题问新问题,你可以用它提到我,如果我的回答对你也有帮助,你可以接受:)我接受你的回答:(感谢它完成了——另一个问题——我需要在我得到它的位置添加标记选项,这是我的代码,但应用程序崩溃了-------------------------------------------------------------------------------elsedaway=new MarkerOptions().position(new LatLng(lati1,longi1)).title(“place”).icon(BitmapDescriptorFactory.fromResource)(R。‌​可抽式泡泡口罩‌​)); 我把它放在onClick上可以给我一些帮助我向你提到但没有提到出现我不知道为什么?我的名声不到15。