沿Lat和Long值绘制路径

时间:2016-03-14 11:41:31

标签: android google-maps google-maps-android-api-2

嗨,大家好我正在开发谷歌地图实施。

我正在尝试通过谷歌地图绘制路径。我有按钮来启动和停止GPS,基本上是为了获得Lat和Long值。

例如:我可以获得10个lat和long值,并将它们存储在ArrayList中。

现在我正在尝试使用上面的lat和long列表绘制路径,如果我使用Google maps API,那么我只需要发送我的ArrayList的起点和终点,然后在地图上绘制/渲染,但它不是我想要的方式。

我想在lat和long值列表中绘制路径(10个值)。原因是谷歌只是给我们从开始到结束的路径,但它可能不是用户旅行的方式/路线

我们怎么做?

以下是我正在做的事情:

private String getMapsApiDirectionsUrl(LatLng source, LatLng destination, String mode) {
        // Origin of route
        String str_origin = "origin=" + source.latitude + "," + source.longitude;
        // Destination of route
        String str_dest = "destination=" + destination.latitude + "," + destination.longitude;
        // Sensor enabled
        String sensor = "sensor=false";
        // Building the parameters to the web service
        String parameters = str_origin + "&" + str_dest + "&" + sensor + "&" + mode + "&alternatives=true";
        // Output format
        String output = "json";
        // Building the url to the web service
        String url = "https://maps.googleapis.com/maps/api/directions/" + output + "?" + parameters;

        Log.e(TAG, " " + url);
        return url;
    }

private class ReadTask extends AsyncTask<String, Void, String> {
        @Override
        protected String doInBackground(String... url) {
            String data = "";
            try {
                HttpConnection http = new HttpConnection();
                data = http.readUrl(url[0]);
            } catch (Exception e) {
                Log.d("Background Task", e.toString());
            }
            return data;
        }

        @Override
        protected void onPostExecute(String result) {
            super.onPostExecute(result);
            new 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]);
                PathJSONParser parser = new PathJSONParser();
                routes = parser.parse(jObject);
            } catch (Exception e) {
                e.printStackTrace();
            }
            return routes;
        }

        @Override
        protected void onPostExecute(List<List<HashMap<String, String>>> routes) {
            task.callBack(routes);
        }
    }

修改

我正在按照它显示的here的方式完成,但是会发生什么是基于开始和结束值Google地图APi V2给了我路线但可能不是用户旅行的路线,因为他可能已经访问了开始和结束之间的某些地方。

3 个答案:

答案 0 :(得分:2)

好吧,我从你的问题得到的是你有10个latlong并且你想在单一路线中绘制它们。这是解决方案 -

  • 创建latlong的arraylist
  • 将latlong值分配到arraylist
  • 将此arraylist添加到折线选项
  • 在地图上绘制

<强> 编程

ArrayList<LatLng> points = new ArrayList<LatLng>();
PolylineOptions lineOptions = new PolylineOptions()
points.add(position); //positions are the latlng;
lineOptions.addAll(points);
            lineOptions.width(8);
            lineOptions.color(Color.RED);
googleMap.addPolyline(lineOptions); //googleMap is the googlemap object which you are displaying on activity.
祝你好运。

如果这是你想要的,请告诉我。

答案 1 :(得分:0)

这是我在使用折线

在googlemap中绘制路径的操作
  LatLng prev = new LatLng(pLati, plongi);
    LatLng my = new LatLng(latid, longid);

    Polyline line = googlemap.addPolyline(new PolylineOptions()
            .add(prev, my).width(5).color(Color.RED));

答案 2 :(得分:0)

您可以通过以下解决方案来完成。

PolylineOptions options = new PolylineOptions().width(5).color(Color.BLUE).geodesic(true);
for (int i = 0; i < list.size(); i++) {
    LatLng point = list.get(i);
    options.add(point);
}

Polyline line = myMap.addPolyline(options);

希望这会对你有所帮助。