Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/kubernetes/5.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
Android 安卓谷歌地图查找之间的距离_Android_Google Maps Android Api 2 - Fatal编程技术网

Android 安卓谷歌地图查找之间的距离

Android 安卓谷歌地图查找之间的距离,android,google-maps-android-api-2,Android,Google Maps Android Api 2,我成功地创建了谷歌地图。我可以检查我的位置,我还编写了代码,可以在谷歌地图中添加点(触摸监听器),并在起始位置和点之间画一条线。现在我想检查一下距离。我不知道我怎么能做到这一点 我在谷歌上搜索了一个例子,但是这个代码不能正常工作?我总是有一个距离 这是我的代码,如果有人知道解决方案,请帮助我 谢谢 公共类GPS扩展活动工具 OnMyLocationChangeListener,OnMapClickListener{ 最终int RQS_GooglePlayServices=1; 私人谷歌地图;

我成功地创建了谷歌地图。我可以检查我的位置,我还编写了代码,可以在谷歌地图中添加点(触摸监听器),并在起始位置和点之间画一条线。现在我想检查一下距离。我不知道我怎么能做到这一点 我在谷歌上搜索了一个例子,但是这个代码不能正常工作?我总是有一个距离 这是我的代码,如果有人知道解决方案,请帮助我 谢谢

公共类GPS扩展活动工具
OnMyLocationChangeListener,OnMapClickListener{
最终int RQS_GooglePlayServices=1;
私人谷歌地图;
圈我的圈;
TextView tvLocInfo,GPSLocation;
LatLng LatLng;
布尔标记单击;
ArrayList markerPoints;
双震级、震级、经纬度、经度;
公共按钮gpssize;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
requestWindowFeature(窗口。功能\u无\u标题);
setContentView(R.layout.gps);
markerPoints=newarraylist();
gpssize=(按钮)findViewById(R.id.gpssize);
tvLocInfo=(TextView)findViewById(R.id.GpsTxt);
GPSLocation=(TextView)findViewById(R.id.GPSLocation);
FragmentManager myFragmentManager=getFragmentManager();
MapFragment myMapFragment=(MapFragment)myFragmentManager
.findFragmentById(R.id.GpsMap);
myMap=myMapFragment.getMap();
myMap.getUiSettings().setZoomControlsEnabled(true);
myMap.getUiSettings().setCompassEnabled(true);
myMap.getUiSettings().setMyLocationButtonEnabled(true);
myMap.setMyLocationEnabled(true);
setOnMyLocationChangeListener(this);
setOnClickListener(新的OnClickListener(){
@凌驾
公共void onClick(视图v){
双倍距离;
位置A=新位置(“”);
地点a.设置纬度(纬度);
地点a.经度(震级);
位置B=新位置(“”);
位置b.设置纬度(端纬度);
位置b.设置经度(经度终点);
距离=位置A。距离(位置B)/1000;
Toast.makeText(getApplicationContext(),“”+距离,
Toast.LENGTH_LONG).show();
}
});
myMap.setOnMapClickListener(这个);
myMap.setTrafficEnabled(true);
markerClicked=false;
}
@凌驾
受保护的void onResume(){
super.onResume();
int resultCode=GooglePlayServicesUtil
.isGooglePlayServicesAvailable(getApplicationContext());
if(resultCode==ConnectionResult.SUCCESS){
Toast.makeText(getApplicationContext(),
“iGoogle PlayServicesAvailable SUCCESS”,祝酒词。长度(长)
.show();
}否则{
GooglePlayServicesUtil.getErrorDialog(结果代码,此,
RQS_谷歌游戏服务);
}
}
@凌驾
公共void onMyLocationChange(位置){
startatitude=location.getLatitude();
startongitence=location.getLongitude();
latLng=新latLng(惊跳度、惊跳度);
myMap.moveCamera(CameraUpdateFactory.newLatLng(latLng));
GPSLocation.setText(startatitude+“”+startongitude);
//myMap.setMapType(GoogleMap.MAP\u TYPE\u NORMAL);
LatLng LOCLATLING=新LatLng(location.getLatitude(),
location.getLongitude());
双精度=位置。getAccurance();
如果(myCircle==null){
CircleOptions CircleOptions=新CircleOptions().center(Localng)
.半径(精度)
.fillColor(颜色。红色)。strokeColor(颜色。黑色)。strokeWidth(5);
myCircle=myMap.addCircle(circleOptions);
}否则{
myCircle.setCenter(locLatLng);
myCircle.setRadius(精度);
}
myMap.animateCamera(CameraUpdateFactory.zoomTo(15));
}
私有字符串getDirectionsUrl(LatLng来源,LatLng目的地){
String str_origin=“origin=“+startatitude+”,“+startongite;
字符串str_dest=“destination=“+dest.latitude+”,“+dest.longitude;
字符串sensor=“sensor=false”;
字符串参数=str_origin+“&”+str_dest+“&”+传感器;
字符串输出=“json”;
字符串url=”https://maps.googleapis.com/maps/api/directions/"
+输出+“?”+参数;
返回url;
}
/**从url下载json数据的方法*/
私有字符串下载URL(字符串strUrl)引发IOException{
字符串数据=”;
InputStream iStream=null;
HttpURLConnection-urlConnection=null;
试一试{
URL=新URL(strUrl);
urlConnection=(HttpURLConnection)url.openConnection();
urlConnection.connect();
iStream=urlConnection.getInputStream();
BufferedReader br=新的BufferedReader(新的InputStreamReader(
峡流);
StringBuffer sb=新的StringBuffer();
字符串行=”;
而((line=br.readLine())!=null){
某人附加(行);
}
data=sb.toString();
br.close();
}捕获(例外e){
Log.d(“下载url时出现异常”,例如toString());
}最后{
iStream.close();
urlConnection.disconnect();
}
返回数据;
}
私有类DownloadTask扩展了AsyncTask{
@凌驾
受保护的字符串doInBackground(字符串…url){
字符串数据=”;
试一试{
数据=下载url(url[0]);
}捕获(例外e){
Log.d(“后台任务”,例如toString());
}
返回数据;
}
@凌驾
受保护的void onPostExecute(字符串结果){
super.onPostExecute(结果);
ParserTask ParserTask=新的ParserTask();
执行(结果);
}
}
私有类ParserTask扩展
异步任务{
@凌驾
受保护列表背景(
字符串…jsonData){
JSONObject jObject;
列表路由=空;
试一试{
jObject=新的JSONObject(jsonData[0]);
方向JSONParser
public class GPS extends Activity implements
    OnMyLocationChangeListener, OnMapClickListener {
final int RQS_GooglePlayServices = 1;
private GoogleMap myMap;
Circle myCircle;
TextView tvLocInfo, GPSLocation;
LatLng latLng;
boolean markerClicked;
ArrayList<LatLng> markerPoints;
double Startlatitude, Startlongitude, Endlatitude, Endlongitude;

public Button gpssize;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    requestWindowFeature(Window.FEATURE_NO_TITLE);
    setContentView(R.layout.gps);
    markerPoints = new ArrayList<LatLng>();

    gpssize = (Button) findViewById(R.id.gpssize);

    tvLocInfo = (TextView) findViewById(R.id.GpsTxt);
    GPSLocation = (TextView) findViewById(R.id.GPSLocation);
    FragmentManager myFragmentManager = getFragmentManager();
    MapFragment myMapFragment = (MapFragment) myFragmentManager
            .findFragmentById(R.id.GpsMap);
    myMap = myMapFragment.getMap();
    myMap.getUiSettings().setZoomControlsEnabled(true);
    myMap.getUiSettings().setCompassEnabled(true);
    myMap.getUiSettings().setMyLocationButtonEnabled(true);

    myMap.setMyLocationEnabled(true);
    myMap.setOnMyLocationChangeListener(this);

    gpssize.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View v) {
            double distance;

            Location locationA = new Location("");

            locationA.setLatitude(Startlatitude);

            locationA.setLongitude(Startlongitude);

            Location locationB = new Location("");

            locationB.setLatitude(Endlatitude);

            locationB.setLongitude(Endlongitude);

            distance = locationA.distanceTo(locationB) / 1000;

            Toast.makeText(getApplicationContext(), "" + distance,
                    Toast.LENGTH_LONG).show();

        }
    });

    myMap.setOnMapClickListener(this);

    myMap.setTrafficEnabled(true);

    markerClicked = false;

}

@Override
protected void onResume() {

    super.onResume();

    int resultCode = GooglePlayServicesUtil
            .isGooglePlayServicesAvailable(getApplicationContext());

    if (resultCode == ConnectionResult.SUCCESS) {
        Toast.makeText(getApplicationContext(),
                "isGooglePlayServicesAvailable SUCCESS", Toast.LENGTH_LONG)
                .show();
    } else {
        GooglePlayServicesUtil.getErrorDialog(resultCode, this,
                RQS_GooglePlayServices);
    }

}

@Override
public void onMyLocationChange(Location location) {

    Startlatitude = location.getLatitude();

    Startlongitude = location.getLongitude();

    latLng = new LatLng(Startlatitude, Startlongitude);

    myMap.moveCamera(CameraUpdateFactory.newLatLng(latLng));

    GPSLocation.setText(Startlatitude + " " + Startlongitude);
    // myMap.setMapType(GoogleMap.MAP_TYPE_NORMAL);

    LatLng locLatLng = new LatLng(location.getLatitude(),
            location.getLongitude());
    double accuracy = location.getAccuracy();

    if (myCircle == null) {
        CircleOptions circleOptions = new CircleOptions().center(locLatLng)

        .radius(accuracy)

        .fillColor(Color.RED).strokeColor(Color.BLACK).strokeWidth(5);

        myCircle = myMap.addCircle(circleOptions);
    } else {
        myCircle.setCenter(locLatLng);
        myCircle.setRadius(accuracy);
    }
    myMap.animateCamera(CameraUpdateFactory.zoomTo(15));

}

private String getDirectionsUrl(LatLng origin, LatLng dest) {

    String str_origin = "origin=" + Startlatitude + "," + Startlongitude;

    String str_dest = "destination=" + dest.latitude + "," + dest.longitude;

    String sensor = "sensor=false";

    String parameters = str_origin + "&" + str_dest + "&" + sensor;

    String output = "json";

    String url = "https://maps.googleapis.com/maps/api/directions/"
            + output + "?" + parameters;

    return url;
}

/** A method to download json data from url */
private String downloadUrl(String strUrl) throws IOException {
    String data = "";
    InputStream iStream = null;
    HttpURLConnection urlConnection = null;
    try {
        URL url = new URL(strUrl);

        urlConnection = (HttpURLConnection) url.openConnection();

        urlConnection.connect();

        iStream = urlConnection.getInputStream();

        BufferedReader br = new BufferedReader(new InputStreamReader(
                iStream));

        StringBuffer sb = new StringBuffer();

        String line = "";
        while ((line = br.readLine()) != null) {
            sb.append(line);
        }

        data = sb.toString();

        br.close();

    } catch (Exception e) {
        Log.d("Exception while downloading url", e.toString());
    } finally {
        iStream.close();
        urlConnection.disconnect();
    }
    return data;
}

private class DownloadTask extends AsyncTask<String, Void, String> {

    @Override
    protected String doInBackground(String... url) {

        String data = "";

        try {

            data = downloadUrl(url[0]);
        } catch (Exception e) {
            Log.d("Background Task", e.toString());
        }
        return data;
    }

    @Override
    protected void onPostExecute(String result) {
        super.onPostExecute(result);

        ParserTask parserTask = new ParserTask();

        parserTask.execute(result);

    }
}

private class ParserTask extends
        AsyncTask<String, Integer, List<List<HashMap<String, String>>>> {

    @Override
    protected List<List<HashMap<String, String>>> doInBackground(
            String... jsonData) {

        JSONObject jObject;
        List<List<HashMap<String, String>>> routes = null;

        try {
            jObject = new JSONObject(jsonData[0]);
            DirectionsJSONParser parser = new DirectionsJSONParser();

            routes = parser.parse(jObject);
        } catch (Exception e) {
            e.printStackTrace();
        }
        return routes;
    }

    @Override
    protected void onPostExecute(List<List<HashMap<String, String>>> result) {
        ArrayList<LatLng> points = null;
        PolylineOptions lineOptions = null;
        MarkerOptions markerOptions = new MarkerOptions();

        for (int i = 0; i < result.size(); i++) {
            points = new ArrayList<LatLng>();
            lineOptions = new PolylineOptions();

            List<HashMap<String, String>> path = result.get(i);

            for (int j = 0; j < path.size(); j++) {
                HashMap<String, String> point = path.get(j);

                double lat = Double.parseDouble(point.get("lat"));
                double lng = Double.parseDouble(point.get("lng"));
                tvLocInfo.setText(lat + " " + lng);

                LatLng position = new LatLng(lat, lng);
                points.add(position);
            }

            lineOptions.addAll(points);
            lineOptions.width(7);
            lineOptions.geodesic(true);

            lineOptions.color(getResources().getColor(R.color.mapColor));

        }

        myMap.addPolyline(lineOptions);
    }
}

@Override
public void onMapClick(LatLng point) {
    if (markerPoints.size() > 0) {
        markerPoints.clear();
        myMap.clear();
    }

    markerPoints.add(point);

    MarkerOptions options = new MarkerOptions();

    options.position(point);

    if (markerPoints.size() == 1) {
        options.icon(BitmapDescriptorFactory
                .defaultMarker(BitmapDescriptorFactory.HUE_GREEN));
    }

    myMap.addMarker(options);

    if (markerPoints.size() >= 1) {

        LatLng dest = markerPoints.get(0);
        LatLng origin = new LatLng(Endlatitude, Endlongitude);

        String url = getDirectionsUrl(origin, dest);

        DownloadTask downloadTask = new DownloadTask();

        downloadTask.execute(url);
    }

}
float[] distances = new float[1];
Location.distanceBetween(locationA.latitude, locationA.longitude,
                locationB.latitude, locationB.longitude,
                distances);

System.out.println("Distance: " + distances[0]);