2013-08-13 6 views
0

Я создаю приложение, чтобы нарисовать мою прогулочную дорожку по GPS. Все в порядке, путь рисуется, когда я хожу, но у меня есть один вопрос - возможно ли как-то сделать линию пути более прямой программной?Android google maps - сделать полилинию более прямой/гладкой

Например. Во-первых, после прогулки я вижу свой путь (он не ломаная, то многоугольник в примере, но я думаю, вы получите идею): https://www.dropbox.com/s/763mq0wja6x7lpy/11.png

Но после сохранения, приложение сделал путь более ровнее/ровнее: https://www.dropbox.com/s/npwkz9coqve7m4g/22.png

Как это сделать? Потому что я понятия не имею.

Я рисую путь с LocationListener:

LocationManager locationManager = (LocationManager) this.getSystemService (Context.LOCATION_SERVICE);

Criteria criteria = new Criteria(); 
    //criteria.setPowerRequirement(Criteria.POWER_LOW); 
    criteria.setAccuracy(Criteria.ACCURACY_FINE); 
    criteria.setAltitudeRequired(false); 
    criteria.setBearingRequired(false); 
    criteria.setCostAllowed(true); 
    criteria.setSpeedRequired(false);  
    String bestProvider = locationManager.getBestProvider(criteria, true); 
    locationManager.requestLocationUpdates(bestProvider, 500, 3, this); 

И onLocationChanged слушатель:

@Override
общественного недействительными onLocationChanged (Место нахождения) {

  if(lastLocationloc == null) 
          lastLocationloc = location;  
      LatLng lastLatLng= locationToLatLng(lastLocationloc); 
      LatLng thisLatLng= locationToLatLng(location); 
      mMap.addPolyline 
         (new PolylineOptions().add(lastLatLng).add(thisLatLng).width(4).color(Color.RED)); 
      lastLocationloc = location;    
    } 
+0

Не уверен, но я бы угадал его только из-за ваших 'lastLatLng' и' thisLatLng'. Lat и long info всегда немного шаткие, поэтому, если вы используете это как прямой ввод для рисования линии ... линия будет шаткой. Вы могли бы попытаться немного настроить свою информацию о ладони, чтобы уменьшить шум, но это может быть сложно. –

+0

Что вы имеете в виду, говоря «отрегулируйте свой латлон»? – Eddwhis

ответ

1

LocationManager никогда не даст вам точное местоположение. Поэтому, хотя вы не можете ходить неравномерно, координаты GPS, которые вы получите, всегда будут неустойчивыми, даже если вы установите очень высокую точность в своих критериях.

Итак, когда вы рисуете путь, вы можете рассмотреть возможность использования Android's Path API

Для некоторого кода на это, посмотрите на этот ответ:

Android How to draw a smooth line following your finger

+0

И где я нахожу функцию QuadTo для карт? Потому что я думаю, что это то, что я искал. Или как-то использовать функцию пути для карты? – Eddwhis

+0

Это немного дальше, чем это пространство может содержать. Короче: вам нужно создать свой собственный Overlay и добавить его на карту. В Overlay вы переопределяете метод draw (Canvas canvas, MapView mv, ...). Холст важен, так как теперь вы можете рисовать прямо на карте. Чтобы преобразовать местоположения в соответствующие пиксели на карте, вам нужно будет получить проекцию и преобразовать в пиксели так: 'mapView.getProjection(). ToPixels (...)'. в этот момент вам придется применить метод Path.quadTo() для рисования плавного пути. – alvi

+0

Okey, у меня есть идея, но я думаю, что это не сработает правильно. Потому что вы можете ходить и в то же время перетаскивать карту (или камера карты может следить за вашим движением), поэтому я думаю, что ваш метод может нарисовать линию для неправильных пикселей.Но, кстати, глядя на ваши данные ссылки, я случайно нашел эту ссылку http://johan.karlsteen.com/2011/07/30/improving-google-maps-polygons-with-b-splines/, и это лучший решение, которое я нашел до сих пор. Спасибо за вашу помощь! – Eddwhis

Смежные вопросы