获取Android中的两个位置之间的距离?
我需要得到两个位置之间的距离,但是我需要像图片中的蓝线那样得到距离。
我接下来尝试:
public double getDistance(LatLng LatLng1, LatLng LatLng2) { double distance = 0; Location locationA = new Location("A"); locationA.setLatitude(LatLng1.latitude); locationA.setLongitude(LatLng1.longitude); Location locationB = new Location("B"); locationB.setLatitude(LatLng2.latitude); locationB.setLongitude(LatLng2.longitude); distance = locationA.distanceTo(locationB); return distance; }
但我得到红线的距离。
使用Google Maps Directions API 。 你需要通过HTTP请求方向。 您可以直接从Android或通过您自己的服务器执行此操作。
例如,从蒙特利尔到多伦多的路线:
GET http://maps.googleapis.com/maps/api/directions/json?origin=Toronto&destination=Montreal&sensor=false
你最终会得到一些JSON。 在routes[].legs[].distance
,你会得到这样一个对象:
"legs" : [ { "distance" : { "text" : "542 km", "value" : 542389 },
您也可以直接从响应对象获取折线信息。
正如Chris Broadfoot所说的,parsing返回的JSON routes[].legs[].distance
"legs" : [ { "distance" : { "text" : "542 km", "value" : 542389 }
使用:
final JSONObject json = new JSONObject(result); JSONArray routeArray = json.getJSONArray("routes"); JSONObject routes = routeArray.getJSONObject(0); JSONArray newTempARr = routes.getJSONArray("legs"); JSONObject newDisTimeOb = newTempARr.getJSONObject(0); JSONObject distOb = newDisTimeOb.getJSONObject("distance"); JSONObject timeOb = newDisTimeOb.getJSONObject("duration"); Log.i("Diatance :", distOb.getString("text")); Log.i("Time :", timeOb.getString("text"));
用这个:
private String getDistanceOnRoad(double latitude, double longitude, double prelatitute, double prelongitude) { String result_in_kms = ""; String url = "http://maps.google.com/maps/api/directions/xml?origin=" + latitude + "," + longitude + "&destination=" + prelatitute + "," + prelongitude + "&sensor=false&units=metric"; String tag[] = { "text" }; HttpResponse response = null; try { HttpClient httpClient = new DefaultHttpClient(); HttpContext localContext = new BasicHttpContext(); HttpPost httpPost = new HttpPost(url); response = httpClient.execute(httpPost, localContext); InputStream is = response.getEntity().getContent(); DocumentBuilder builder = DocumentBuilderFactory.newInstance() .newDocumentBuilder(); Document doc = builder.parse(is); if (doc != null) { NodeList nl; ArrayList args = new ArrayList(); for (String s : tag) { nl = doc.getElementsByTagName(s); if (nl.getLength() > 0) { Node node = nl.item(nl.getLength() - 1); args.add(node.getTextContent()); } else { args.add(" - "); } } result_in_kms = String.format("%s", args.get(0)); } } catch (Exception e) { e.printStackTrace(); } return result_in_kms; }
你可以在android中使用Location类的以下方法(如果你有两个位置的lat,long)方法返回以米为单位的近似距离。
public static void distanceBetween(double startLatitude,double startLongitude,double endLatitude,double endLongitude,float [] results)
说明:
计算两个位置之间的近似距离(以米为单位),以及它们之间最短path的初始和最终方位。 距离和方位使用WGS84椭球定义。
计算出的距离存储在结果[0]中。 如果结果长度大于或等于2,则初始方位将存储在结果[1]中。 如果结果长度大于或等于3,则最终方位将存储在结果[2]中。 参数:
startLatitude – 开始的纬度
开始初始经度
endLatitude结束的纬度
结束长度结束的经度
结果是一组浮点数来保存结果
public String getDistance(final double lat1, final double lon1, final double lat2, final double lon2){ String parsedDistance; String response; Thread thread=new Thread(new Runnable() { @Override public void run() { try { URL url = new URL("http://maps.googleapis.com/maps/api/directions/json?origin=" + lat1 + "," + lon1 + "&destination=" + lat2 + "," + lon2 + "&sensor=false&units=metric&mode=driving"); final HttpURLConnection conn = (HttpURLConnection) url.openConnection(); conn.setRequestMethod("POST"); InputStream in = new BufferedInputStream(conn.getInputStream()); response = org.apache.commons.io.IOUtils.toString(in, "UTF-8"); JSONObject jsonObject = new JSONObject(response); JSONArray array = jsonObject.getJSONArray("routes"); JSONObject routes = array.getJSONObject(0); JSONArray legs = routes.getJSONArray("legs"); JSONObject steps = legs.getJSONObject(0); JSONObject distance = steps.getJSONObject("distance"); parsedDistance=distance.getString("text"); } catch (ProtocolException e) { e.printStackTrace(); } catch (MalformedURLException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } catch (JSONException e) { e.printStackTrace(); } } }); thread.start(); try { thread.join(); } catch (InterruptedException e) { e.printStackTrace(); } return parsedDistance; }
尝试这个:
private double calculateDistance(double fromLong, double fromLat, double toLong, double toLat) { double d2r = Math.PI / 180; double dLong = (toLong - fromLong) * d2r; double dLat = (toLat - fromLat) * d2r; double a = Math.pow(Math.sin(dLat / 2.0), 2) + Math.cos(fromLat * d2r) * Math.cos(toLat * d2r) * Math.pow(Math.sin(dLong / 2.0), 2); double c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1 - a)); double d = 6367000 * c; return Math.round(d); }
希望这可以帮助。
试试这个代码
public double CalculationByDistance(LatLng StartP, LatLng EndP) { int Radius = 6371;// radius of earth in Km double lat1 = StartP.latitude; double lat2 = EndP.latitude; double lon1 = StartP.longitude; double lon2 = EndP.longitude; double dLat = Math.toRadians(lat2 - lat1); double dLon = Math.toRadians(lon2 - lon1); double a = Math.sin(dLat / 2) * Math.sin(dLat / 2) + Math.cos(Math.toRadians(lat1)) * Math.cos(Math.toRadians(lat2)) * Math.sin(dLon / 2) * Math.sin(dLon / 2); double c = 2 * Math.asin(Math.sqrt(a)); double valueResult = Radius * c; double km = valueResult / 1; DecimalFormat newFormat = new DecimalFormat("####"); int kmInDec = Integer.valueOf(newFormat.format(km)); double meter = valueResult % 1000; int meterInDec = Integer.valueOf(newFormat.format(meter)); Log.i("Radius Value", "" + valueResult + " KM " + kmInDec + " Meter " + meterInDec); return Radius * c; }
private String getDistance(double lat2, double lon2){ Location loc1 = new Location("A"); loc1.setLatitude("A1"); loc1.setLongitude("B1"); Location loc2 = new Location("B"); loc2.setLatitude(lat2); loc2.setLongitude(lon2); float distanceInMeters = loc1.distanceTo(loc2); float mile = distanceInMeters / 1609.34f; String sm = String.format("%.2f", mile); return sm; }
要find两个位置之间的距离:
-
当您第一次打开应用程序时,从左上angular的下拉菜单转到“您的时间线”。
-
一旦新窗口打开,请从右上angular的菜单中select设置,然后select“添加位置”。
-
添加你的地点,并将它们命名为点1,点2或任何简单的名字来记住。
-
一旦您的地点被添加并标记,请返回到Google应用程序的主窗口。
-
点击右下angular的箭头的蓝色圆圈。
-
一个新的窗口将打开,你可以看到顶部有两个文本字段,您可以在其中添加“从位置”和“距离位置”。
-
点击任何文本字段,然后在第3点input保存的位置。
-
点击其他文本字段,并添加您的下一个保存位置。
-
通过这样做,Google地图会计算两个位置之间的距离,并显示地图上的蓝色path。