Cevap : iki nokta v2 Android API Google Maps kullanarak arasında yol Çizmek
Google Android için harita API değişti ve API V2 tanıtıldı. Çizim yolu önceki kodları API V2 ile çalışmıyor.
API V2 ile bir yol çizmek için başardım. Çözüm için bir sürü arama yaptım ama herhangi bir cevap bulamadı. Onun cevabı paylaşıyorum.
CEVAP
Öncelikle hangi arasında rota çizmek zorundayız kaynak ve hedef puan almak olacaktır. Sonra aşağıdaki fonksiyonu için bu özniteliği geçeceğiz.
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");
urlString.append("&key=YOUR_API_KEY");
return urlString.toString();
}
Bu işlev, Yön API yanıt almak için göndereceğiz url yapacaktır. O zaman bu yanıtı ayrıştırılamadı edeceğiz . Parser sınıfı
public class JSONParser {
static InputStream is = null;
static JSONObject jObj = null;
static String json = "";
// constructor
public JSONParser() {
}
public String getJSONFromUrl(String url) {
// Making HTTP request
try {
// defaultHttpClient
DefaultHttpClient httpClient = new DefaultHttpClient();
HttpPost httpPost = new HttpPost(url);
HttpResponse httpResponse = httpClient.execute(httpPost);
HttpEntity httpEntity = httpResponse.getEntity();
is = httpEntity.getContent();
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
} catch (ClientProtocolException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
try {
BufferedReader reader = new BufferedReader(new InputStreamReader(
is, "iso-8859-1"), 8);
StringBuilder sb = new StringBuilder();
String line = null;
while ((line = reader.readLine()) != null) {
sb.append(line "\n");
}
json = sb.toString();
is.close();
} catch (Exception e) {
Log.e("Buffer Error", "Error converting result " e.toString());
}
return json;
}
}
Bu ayrıştırıcı bizi dize döndürür. Böyle çağıracağız.
JSONParser jParser = new JSONParser();
String json = jParser.getJSONFromUrl(url);
Şimdi drawpath fonksiyon bu dize göndereceğiz. Drawpath işlevidir
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);
Polyline line = mMap.addPolyline(new PolylineOptions()
.addAll(list)
.width(12)
.color(Color.parseColor("#05b1fb"))//Google maps blue color
.geodesic(true)
);
/*
for(int z = 0; z<list.size()-1;z ){
LatLng src= list.get(z);
LatLng dest= list.get(z 1);
Polyline line = mMap.addPolyline(new PolylineOptions()
.add(new LatLng(src.latitude, src.longitude), new LatLng(dest.latitude, dest.longitude))
.width(2)
.color(Color.BLUE).geodesic(true));
}
*/
}
catch (JSONException e) {
}
}
Yukarıdaki kodu yüksek yolunu çizecektir. DecodePoly kuralıdır
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;
}
Yön aramak zaman alabilir kadar zaman Uyumsuz bir görev, tüm bu yapacağız. Zaman Uyumsuz benim görevim oldu
private class connectAsyncTask extends AsyncTask<Void, Void, String>{
private ProgressDialog progressDialog;
String url;
connectAsyncTask(String urlPass){
url = urlPass;
}
@Override
protected void onPreExecute() {
// TODO Auto-generated method stub
super.onPreExecute();
progressDialog = new ProgressDialog(MainActivity.this);
progressDialog.setMessage("Fetching route, Please wait...");
progressDialog.setIndeterminate(true);
progressDialog.show();
}
@Override
protected String doInBackground(Void... params) {
JSONParser jParser = new JSONParser();
String json = jParser.getJSONFromUrl(url);
return json;
}
@Override
protected void onPostExecute(String result) {
super.onPostExecute(result);
progressDialog.hide();
if(result!=null){
drawPath(result);
}
}
}
Yardımcı olacağını umuyoruz.
Haritayı iki yer arasında Konumu ve Ya...
Android bir niyet ile başlatıyoruz Goo...
Google maps V3 iki nokta arasındaki me...
Google Maps 3 - Özel işaretleyici vars...
Google Maps API v2 Yetkilendirme hatas...