2015-02-28 7 views
0

У меня есть простое приложение, которое может получить два адреса от пользователя и получить направление движения, также показывает на карте.Пересчитать маршруты на Картах Google

Мой вопрос:

Как я должен обрабатывать случай, когда пользователь фактически использует приложение, и он/она не соответствует данным направлениям? Я имею в виду, как мне обнаружить это событие и получить новое направление?

+0

Не можете использовать 'GPS'? Я думаю, что когда пользователь «не следовал указанию», карта google должна «пересчитывать» направления в соответствии с «текущим местоположением» пользователя, если вы «исправите конечный адрес». – bjiang

+0

Да, я могу использовать GPS. Но я не знаю, как реализовать эту логику. – erbal

+0

Вам просто нужно получить «начальный адрес» и «конец адреса» и получить указания для пользователя в «карте Google»? – bjiang

ответ

1

Как мы уже говорили, я думаю, что Google map волю Recalculate directions и передать его на базу пользователей на текущем месте на GPS если вы исправили startAddress и endAddress. Для получения направления необходимо настроить AsyncTask, чтобы получить услугу Google форму данных, пример кода следующим образом:

class GetDirections extends AsyncTask<String, String, String>{ 
     @Override 
     protected String doInBackground(String... params) { 
      String startAddress = params[0]; 
      startAddress = startAddress.replaceAll(" ", "%20"); 
      getLatLng(startAddress, false); 

      String endingAddress = params[1]; 
      endingAddress = endingAddress.replaceAll(" ", "%20"); 
      getLatLng(endingAddress, true); 
      return null; 
     } 

     @Override 
     protected void onPostExecute(String s) { 
      super.onPostExecute(s); 
      String geoUriString = "http://maps.google.com/maps?addr=" + 
        addressPos.latitude + "," + 
        addressPos.longitude + "&daddr=" + 
        finalAddressPos.latitude + "," + 
        finalAddressPos.longitude; 

      Intent mapCall = new Intent(Intent.ACTION_VIEW, Uri.parse(geoUriString)); 
      startActivity(mapCall); 
     } 
    } 

    protected void getLatLng(String address, boolean setDestination) { 
     String uri = "http://maps.google.com/maps/api/geocode/json?address=" 
       + address + "&sensor=false"; 

     HttpGet httpGet = new HttpGet(uri); 

     HttpClient client = new DefaultHttpClient(); 
     HttpResponse response; 
     StringBuilder stringBuilder = new StringBuilder(); 

     try { 
      response = client.execute(httpGet); 
      HttpEntity entity = response.getEntity(); 

      InputStream stream = entity.getContent(); 

      int byteData; 
      while ((byteData = stream.read()) != -1) { 
       stringBuilder.append((char) byteData); 
      } 

     } catch (IOException e) { 
      e.printStackTrace(); 
     } 

     double lat = 0.0, lng = 0.0; 

     JSONObject jsonObject; 
     try { 
      jsonObject = new JSONObject(stringBuilder.toString()); 
      lng = ((JSONArray) jsonObject.get("results")).getJSONObject(0) 
        .getJSONObject("geometry").getJSONObject("location") 
        .getDouble("lng"); 
      lat = ((JSONArray) jsonObject.get("results")).getJSONObject(0) 
        .getJSONObject("geometry").getJSONObject("location") 
        .getDouble("lat"); 

     } catch (JSONException e) { 
      e.printStackTrace(); 
     } 

     if (setDestination) { 
      finalAddressPos = new LatLng(lat, lng); 
     } else { 
      addressPos = new LatLng(lat, lng); 
     } 

    } 

Тогда получите start and end address вид: editText и выполнить AsyncTask, когда пользователь click get direction button:

public void getDirections(View view) { 

     String startingAddress = et_address.getText().toString(); 
     String finalAddress = et_finalAddress.getText().toString(); 

     if ((startingAddress.equals("")) || finalAddress.equals("")) { 
      Toast.makeText(this, "Enter a starting and Ending address", Toast.LENGTH_SHORT).show(); 
     } else { 
      new GetDirections().execute(startingAddress, finalAddress); 
     } 
    } 

Вы можете получить весь исходный код для моего Github here.

enter image description here