在android的谷歌地图上用点阵列绘制路径

在android的谷歌地图上用点阵列绘制路径,android,google-maps,google-maps-markers,google-polyline,Android,Google Maps,Google Maps Markers,Google Polyline,嗨,我已经创建了一个与谷歌地图集成的应用程序,我需要根据驾驶动作绘制路径。所以这里我可以得到每2秒有当前lat和lang的点数组现在我想用这些lat和lang点数组绘制路径,我需要把标记放在源点和目标点,而不是中间点 我怎么能做到这一点,我已经搜索了很多时间,但仍然没有得到我所期望的解决方案,所以请告诉我,如果你有任何想法或解决方案要做 升级我的代码 我通过使用这个代码得到了解决方案 private void drawPath() { PolylineOptions polylineOp

嗨,我已经创建了一个与谷歌地图集成的应用程序,我需要根据驾驶动作绘制路径。所以这里我可以得到每2秒有当前lat和lang的点数组现在我想用这些lat和lang点数组绘制路径,我需要把标记放在源点和目标点,而不是中间点

我怎么能做到这一点,我已经搜索了很多时间,但仍然没有得到我所期望的解决方案,所以请告诉我,如果你有任何想法或解决方案要做

升级我的代码

我通过使用这个代码得到了解决方案

private void drawPath() {
    PolylineOptions polylineOptions = new PolylineOptions();

    int i = 0;
    if (langtitudearray != null && latitudearray != null) {
        for (i = 0; i < latitudearray.size(); i = i + 1) {
            polylineOptions.add(new LatLng(latitudearray.get(i),
                    langtitudearray.get(i)));

        }
        addMarkers(
                new LatLng(latitudearray.get(0), langtitudearray.get(0)),
                new LatLng(latitudearray.get(latitudearray.size() - 1), langtitudearray.get(latitudearray.size() - 1)));

    }
    polylineOptions.color(Color.BLUE);
    polylineOptions.width(6);
    polylineOptions.geodesic(false);
    map.addPolyline(polylineOptions);

}
private void drawPath(){
PolylineOptions PolylineOptions=新的PolylineOptions();
int i=0;
if(langtitudearray!=null和&latitudearray!=null){
对于(i=0;i
只是我可以使用lat和lang点数组并添加标记。现在的问题是。如果我在阵列中获得更多的lat和lang点,则需要一段时间才能加载到地图上,这使得应用程序处于挂起状态,即使我可以通过30秒一次发送广播从服务中获得这些点阵列

注意:我从后台服务中运行的API响应中获取这些点数组,并生成lat和LAG数组,然后通过广播发送到活动

如何解决这个问题,更好的方法是什么?
提前感谢。

使用以下方法:调用makeURL()方法,然后调用drawPath()方法

public String makeURL (double sourcelat, double sourcelog, double destlat, double destlog ){
    StringBuilder urlString = new StringBuilder();
    urlString.append("http://maps.googleapis.com/maps/api/directions/json");
    urlString.append("?origin=");// from
    urlString.append(Double.toString(sourcelat));
    urlString.append(",");
    urlString
            .append(Double.toString( sourcelog));
    urlString.append("&destination=");// to
    urlString
            .append(Double.toString( destlat));
    urlString.append(",");
    urlString.append(Double.toString( destlog));
    urlString.append("&sensor=false&mode=driving&alternatives=true");
    return urlString.toString();

}

public void drawPath(String  result) {

    try {
            //Tranform the string into a json object
           final JSONObject json = new JSONObject(result);
           JSONArray routeArray = json.getJSONArray("routes");
           JSONObject routes = routeArray.getJSONObject(0);
           JSONObject overviewPolylines = routes.getJSONObject("overview_polyline");
           String encodedString = overviewPolylines.getString("points");
           List<LatLng> list = decodePoly(encodedString);

           for(int z = 0; z<list.size()-1;z++){
                LatLng src= list.get(z);
                LatLng dest= list.get(z+1);
                Polyline line = googleMap.addPolyline(new PolylineOptions()
                .add(new LatLng(src.latitude, src.longitude), new LatLng(dest.latitude,   dest.longitude))
                .width(5)
                .color(Color.BLUE).geodesic(true));
            }

    } 
    catch (JSONException e) {

    }
} 

private List<LatLng> decodePoly(String encoded) {

    List<LatLng> poly = new ArrayList<LatLng>();
    int index = 0, len = encoded.length();
    int lat = 0, lng = 0;

    while (index < len) {
        int b, shift = 0, result = 0;
        do {
            b = encoded.charAt(index++) - 63;
            result |= (b & 0x1f) << shift;
            shift += 5;
        } while (b >= 0x20);
        int dlat = ((result & 1) != 0 ? ~(result >> 1) : (result >> 1));
        lat += dlat;

        shift = 0;
        result = 0;
        do {
            b = encoded.charAt(index++) - 63;
            result |= (b & 0x1f) << shift;
            shift += 5;
        } while (b >= 0x20);
        int dlng = ((result & 1) != 0 ? ~(result >> 1) : (result >> 1));
        lng += dlng;

        LatLng p = new LatLng( (((double) lat / 1E5)),
                 (((double) lng / 1E5) ));
        poly.add(p);
    }

    return poly;
}
publicstringmakeurl(双sourcelat、双sourcelog、双destlat、双destlog){
StringBuilder urlString=新的StringBuilder();
urlString.append(“http://maps.googleapis.com/maps/api/directions/json");
urlString.append(“?origin=”);//来自
append(Double.toString(sourcelat));
urlString.append(“,”);
URL字符串
.append(Double.toString(sourcelog));
urlString.append(“&destination=”);//到
URL字符串
.append(Double.toString(destlat));
urlString.append(“,”);
append(Double.toString(destlog));
追加(“&sensor=false&mode=driving&alternations=true”);
返回urlString.toString();
}
公共void绘图路径(字符串结果){
试一试{
//将字符串转换为json对象
最终JSONObject json=新JSONObject(结果);
JSONArray routarray=json.getJSONArray(“路由”);
JSONObject routes=routeArray.getJSONObject(0);
JSONObject overviewPolylines=routes.getJSONObject(“overview_Polylines”);
字符串编码字符串=概览多段线。获取字符串(“点”);
列表=解码多边形(编码字符串);
对于(intz=0;z>1):(结果>>1));
lat+=dlat;
移位=0;
结果=0;
做{
b=编码的.charAt(索引++)-63;
结果|=(b&0x1f)=0x20);
int-dlng=((结果&1)!=0?~(结果>>1):(结果>>1));
液化天然气+=液化天然气;
LatLng p=新LatLng(((双)lat/1E5)),
((双)液化天然气/1E5));
poly.add(p);
}
返回多边形;
}

感谢您的回复,您的代码只用于在源和目标之间划一条线,但我有点数组(Lat,lang),需要使用这些点来划一条线。那么您能给我一个解决方案吗?我只是从json响应中的json数组中获取这些数组点,就像{“VechicleLocFinder”:[{“VechicleLocFinderID”:6,“VechicleID”:“351540060876166”,“TripDate”:“2015年3月19日12:00AM”,“TripTime”:“20:17:34”,“CurrentLat”:“13.0455132”,“CurrentLang”:“80.2221575”,“CreatedOn_M”:null,“CreatedOn”:“2015-03-19T10:19:31.96”},{“VechicleLocFinderID”:“351540060876166”,“TripDate”:“2015年3月19日12:00AM”,“TripTime”:“20:29:32”,“CurrentLat”:”13.0455097,“CurrentLang”:“80.2221559”,“CreatedOn_M”:“03-19-2015 20:29:32”,“CreatedOn”:“2015-03-19T10:27:11.243”}]}在这里,我将使用currentLat和CurrentLang绘制路径。我该怎么做?