Как нарисовать файл KML на MapView в Android?


Я должен нарисовать файл KML в виде карты. Я посмотрел в интернете но я не нашел примера как это сделать, если кто-то может привести пример, как это сделать, это будет здорово!

3 2

3 ответа:

KML теперь не поддерживается. Вы можете нарисовать такой след без KML:

1) сделать запрос к сервису Google:

Request : http://maps.googleapis.com/maps/api/directions/output?parameters
Info about : https://developers.google.com/maps/documentation/directions/

2) отправить запрос

3) разбор ответа JSON следующим образом:

JSONObject jsonObject;
  ...
JSONArray results = jsonObject.optJSONArray("routes");
JSONObject route = results.optJSONObject(0);
JSONArray legs = route.optJSONArray("legs");
JSONObject leg = legs.optJSONObject(0);
JSONArray steps = leg.optJSONArray("steps");

for (int i=0; i < steps.length(); ++i) {
    JSONObject step = steps.optJSONObject(i);
    JSONObject startP = step.optJSONObject("start_location");
    JSONObject endP = step.optJSONObject("end_location");
    JSONObject polyline = step.optJSONObject("polyline");
    String encodedPoints = polyline.optString("points");
    ...

4) encodedPoints имеет много точек, которые можно декодировать следующим образом: Map View draw directions using google Directions API-decoding polylines

5) нарисуйте наложение следующим образом:
private class Road extends Overlay {
        private ArrayList<GeoPoint> list;
        private Paint paint;

        public Road(ArrayList<GeoPoint> list) {
            this.list = new ArrayList<GeoPoint>();
            this.list.addAll(list);
            paint = new Paint();
            paint.setColor(Color.MAGENTA);
            paint.setStyle(Paint.Style.STROKE);
            paint.setStrokeWidth(4);
        }

        @Override
        public void draw(Canvas canvas, MapView mapView, boolean shadow) {
            drawPath(mapView, canvas);
        }

        private void drawPath(MapView mv, Canvas canvas) {
            int x1 = -1;  
            int y1 = -1;
            int x2 = -1;
            int y2 = -1;

            Point point = new Point();

            for (int i=0; i < list.size(); i++) {
                mv.getProjection().toPixels(list.get(i), point);
                x2 = point.x;
                y2 = point.y;

                if (i > 0) {
                    canvas.drawLine(x1, y1, x2, y2, paint);
                }

                x1 = x2;
                y1 = y2;
            }
        } 

Удачи!

Google перестал работать с файлами kml, он предпочитает разбирать xml или json.

Этот способ извлечения Google Directions из Google путем синтаксического анализа файла KML больше не доступен с 27 июля 2012 года (поскольку Google изменил структуру извлечения Google Directions, теперь вы можете получить его только с помощью JSON или XML), пришло время использовать JSON вместо KML.

Смотрите ответ в моем собственном вопросе здесь.