Android 如何从KML文件中获取路由长度?

Android 如何从KML文件中获取路由长度?,android,google-maps,kml,Android,Google Maps,Kml,我有带路线信息的KML文件。现在我需要知道这条路线的长度,以公里为单位。我看到标签中的KML文件中有这样的长度,它看起来像这样: <description><![CDATA[Distance: 750&#160;m (about 2 mins)<br/>Map data ©2012 Google]]></description> 地图数据©2012谷歌]]> 但在我看来,解析这个字符串是错误的。 如有其他选择和/或建议,将不胜感激! 谢

我有带路线信息的KML文件。现在我需要知道这条路线的长度,以公里为单位。我看到标签中的KML文件中有这样的长度,它看起来像这样:

<description><![CDATA[Distance: 750&#160;m (about 2 mins)<br/>Map data ©2012 Google]]></description>
地图数据©2012谷歌]]>
但在我看来,解析这个字符串是错误的。 如有其他选择和/或建议,将不胜感激!
谢谢

我认为最好的解决方案是使用路线点的坐标计算路线长度。以下是我解决此问题的代码:

ArrayList<GeoPoint> points;
private static final int EARTH_RADIUS = 6371;

.....
            for(int i = 0; i < (points.size() - 1); ++i) {
               final double lat1 = toRadians(points.get(i).getLatitudeE6() / LocationHelper.MILLION);
               final double lat2 = toRadians(points.get(i + 1).getLatitudeE6() / LocationHelper.MILLION);
               final double lon1 = toRadians(points.get(i).getLongitudeE6() / LocationHelper.MILLION);
               final double lon2 = toRadians(points.get(i + 1).getLongitudeE6() / LocationHelper.MILLION);

               length += acos(sin(lat1)*sin(lat2) + cos(lat1)*cos(lat2) * cos(lon2 - lon1)) * EARTH_RADIUS;
            }
        road.length = round(length, 2, BigDecimal.ROUND_HALF_UP);

....
private static double round(double unrounded, int precision, int roundingMode)
{
    final BigDecimal bd = new BigDecimal(unrounded);
    final BigDecimal rounded = bd.setScale(precision, roundingMode);
    return rounded.doubleValue();
}
arraylistpoints;
私有静态最终内部接地半径=6371;
.....
对于(int i=0;i<(points.size()-1);+i){
final double lat1=toRadians(points.get(i).getLatitudeE6()/LocationHelper.MILLION);
final double lat2=toRadians(points.get(i+1).getLatitudeE6()/LocationHelper.MILLION);
final double lon1=toRadians(points.get(i).getLongitudeE6()/LocationHelper.MILLION);
final double lon2=toRadians(points.get(i+1).getLongitudeE6()/LocationHelper.MILLION);
长度+=acos(sin(lat1)*sin(lat2)+cos(lat1)*cos(lat2)*cos(lon2-lon1))*地球半径;
}
road.length=四舍五入(长度,2,大十进制。四舍五入半向上);
....
专用静态双舍入(双未舍入、整数精度、整数舍入模式)
{
最终BigDecimal bd=新的BigDecimal(未舍入);
最终BigDecimal取整=bd.setScale(精度,取整模式);
返回四舍五入的.doubleValue();
}