Reputation: 131
I'm sorry if any question could be duplicate as mine. But As far as I search in Stackoverflow, I can not find any question that similar to my problem.
Well,
I have many array of point in Maps, that already encoded in Json/String.
[{"lat":"-7.75545","lng":"110.48977"},{"lat":"-7.75559","lng":"110.48904"},{"lat":"-7.75567","lng":"110.4885"},{"lat":"-7.75568","lng":"110.48826"},{"lat":"-7.75584","lng":"110.48729"},{"lat":"-7.75611","lng":"110.48582"},{"lat":"-7.75657","lng":"110.48317"},{"lat":"-7.75674","lng":"110.48198"},{"lat":"-7.75682","lng":"110.48163"},{"lat":"-7.75695","lng":"110.48113"},{"lat":"-7.75708","lng":"110.48077"},{"lat":"-7.75726","lng":"110.48038"},{"lat":"-7.75743","lng":"110.48011"},{"lat":"-7.75778","lng":"110.47967"},{"lat":"-7.75815","lng":"110.4793"},{"lat":"-7.75929","lng":"110.47832"},{"lat":"-7.75995","lng":"110.47778"},{"lat":"-7.7608","lng":"110.47706"},{"lat":"-7.76276","lng":"110.47534"},{"lat":"-7.76446","lng":"110.4738"},{"lat":"-7.76463","lng":"110.47363"},{"lat":"-7.76675","lng":"110.47183"},{"lat":"-7.76766","lng":"110.47106"},{"lat":"-7.76799","lng":"110.4708"},{"lat":"-7.76985","lng":"110.46919"},{"lat":"-7.77104","lng":"110.46814"},{"lat":"-7.77229","lng":"110.46707"},{"lat":"-7.77281","lng":"110.46661"},{"lat":"-7.77313","lng":"110.46623"},{"lat":"-7.77366","lng":"110.4652"},{"lat":"-7.77473","lng":"110.46323"},{"lat":"-7.77648","lng":"110.46001"},{"lat":"-7.77724","lng":"110.45867"},{"lat":"-7.77797","lng":"110.45729"},{"lat":"-7.77855","lng":"110.45628"},{"lat":"-7.77907","lng":"110.45533"},{"lat":"-7.77959","lng":"110.45446"},{"lat":"-7.78127","lng":"110.45135"},{"lat":"-7.78205","lng":"110.44989"},{"lat":"-7.78229","lng":"110.44941"},{"lat":"-7.78284","lng":"110.44843"},{"lat":"-7.78352","lng":"110.44718"},{"lat":"-7.78359","lng":"110.44699"},{"lat":"-7.78356","lng":"110.4462"},{"lat":"-7.78356","lng":"110.44535"},{"lat":"-7.78358","lng":"110.44392"},{"lat":"-7.78357","lng":"110.44378"},{"lat":"-7.78345","lng":"110.44378"},{"lat":"-7.78346","lng":"110.44384"},{"lat":"-7.78346","lng":"110.44392"},{"lat":"-7.78347","lng":"110.44497"},{"lat":"-7.78347","lng":"110.44687"},{"lat":"-7.78347","lng":"110.44701"},{"lat":"-7.78341","lng":"110.44714"},{"lat":"-7.78285","lng":"110.44826"},{"lat":"-7.78258","lng":"110.44872"}]
I want to draw this on google Maps. But I don't know how to draw it.
I have read this. From there I know, I must get the coordinat, and add into the PolyLine . Is it mean, I must do some substring or text splitting so i can get the coordinat ? Well, I hate any String Operation xD
Anyone know some clue ? Thank You in Advance.. :)
Upvotes: 0
Views: 637
Reputation: 1771
Hope this may help you.
String json = "[{\"lat\":\"-7.75545\",\"lng\":\"110.48977\"},{\"lat\":\"-7.75559\",\"lng\":\"110.48904\"},{\"lat\":\"-7.75567\",\"lng\":\"110.4885\"},{\"lat\":\"-7.75568\",\"lng\":\"110.48826\"},{\"lat\":\"-7.75584\",\"lng\":\"110.48729\"},{\"lat\":\"-7.75611\",\"lng\":\"110.48582\"},{\"lat\":\"-7.75657\",\"lng\":\"110.48317\"},{\"lat\":\"-7.75674\",\"lng\":\"110.48198\"},{\"lat\":\"-7.75682\",\"lng\":\"110.48163\"},{\"lat\":\"-7.75695\",\"lng\":\"110.48113\"},{\"lat\":\"-7.75708\",\"lng\":\"110.48077\"},{\"lat\":\"-7.75726\",\"lng\":\"110.48038\"},{\"lat\":\"-7.75743\",\"lng\":\"110.48011\"},{\"lat\":\"-7.75778\",\"lng\":\"110.47967\"},{\"lat\":\"-7.75815\",\"lng\":\"110.4793\"},{\"lat\":\"-7.75929\",\"lng\":\"110.47832\"},{\"lat\":\"-7.75995\",\"lng\":\"110.47778\"},{\"lat\":\"-7.7608\",\"lng\":\"110.47706\"},{\"lat\":\"-7.76276\",\"lng\":\"110.47534\"},{\"lat\":\"-7.76446\",\"lng\":\"110.4738\"},{\"lat\":\"-7.76463\",\"lng\":\"110.47363\"},{\"lat\":\"-7.76675\",\"lng\":\"110.47183\"},{\"lat\":\"-7.76766\",\"lng\":\"110.47106\"},{\"lat\":\"-7.76799\",\"lng\":\"110.4708\"},{\"lat\":\"-7.76985\",\"lng\":\"110.46919\"},{\"lat\":\"-7.77104\",\"lng\":\"110.46814\"},{\"lat\":\"-7.77229\",\"lng\":\"110.46707\"},{\"lat\":\"-7.77281\",\"lng\":\"110.46661\"},{\"lat\":\"-7.77313\",\"lng\":\"110.46623\"},{\"lat\":\"-7.77366\",\"lng\":\"110.4652\"},{\"lat\":\"-7.77473\",\"lng\":\"110.46323\"},{\"lat\":\"-7.77648\",\"lng\":\"110.46001\"},{\"lat\":\"-7.77724\",\"lng\":\"110.45867\"},{\"lat\":\"-7.77797\",\"lng\":\"110.45729\"},{\"lat\":\"-7.77855\",\"lng\":\"110.45628\"},{\"lat\":\"-7.77907\",\"lng\":\"110.45533\"},{\"lat\":\"-7.77959\",\"lng\":\"110.45446\"},{\"lat\":\"-7.78127\",\"lng\":\"110.45135\"},{\"lat\":\"-7.78205\",\"lng\":\"110.44989\"},{\"lat\":\"-7.78229\",\"lng\":\"110.44941\"},{\"lat\":\"-7.78284\",\"lng\":\"110.44843\"},{\"lat\":\"-7.78352\",\"lng\":\"110.44718\"},{\"lat\":\"-7.78359\",\"lng\":\"110.44699\"},{\"lat\":\"-7.78356\",\"lng\":\"110.4462\"},{\"lat\":\"-7.78356\",\"lng\":\"110.44535\"},{\"lat\":\"-7.78358\",\"lng\":\"110.44392\"},{\"lat\":\"-7.78357\",\"lng\":\"110.44378\"},{\"lat\":\"-7.78345\",
\"lng\":\"110.44378\"},{\"lat\":\"-7.78346\",\"lng\":\"110.44384\"},{\"lat\":\"-7.78346\",\"lng\":\"110.44392\"},{\"lat\":\"-7.78347\",\"lng\":\"110.44497\"},{\"lat\":\"-7.78347\",\"lng\":\"110.44687\"},{\"lat\":\"-7.78347\",\"lng\":\"110.44701\"},{\"lat\":\"-7.78341\",\"lng\":\"110.44714\"},{\"lat\":\"-7.78285\",\"lng\":\"110.44826\"},{\"lat\":\"-7.78258\",\"lng\":\"110.44872\"}]";
mapPolyline = googleMap.addPolyline(getPolyline(json, 3, Color.RED));
public PolylineOptions getPolyline(String json, int width, int color) {
ArrayList<LatLng> arr_pos = getDirection(json);
PolylineOptions rectLine = new PolylineOptions().width(dpToPx(width)).color(color);
for(int i = 0 ; i < arr_pos.size() ; i++)
rectLine.add(arr_pos.get(i));
return rectLine;
}
public ArrayList<LatLng> getDirection(String json) {
ArrayList<LatLng> listGeopoints = new ArrayList<LatLng>();
try {
JSONArray jsonArray = new JSONArray(json);
for (int i = 0; i < jsonArray.length(); i++) {
JSONObject latlng = jsonArray.getJSONObject(i);
double latitude = Double.parseDouble(latlng.getString("lat"));
double longitude = Double.parseDouble(latlng.getString("lng"));
listGeopoints.add(new LatLng(latitude, longitude));
}
} catch (JSONException e) {
e.printStackTrace();
}
return listGeopoints;
}
private int dpToPx(int dp) {
DisplayMetrics displayMetrics = getResources().getDisplayMetrics();
int px = Math.round(dp * (displayMetrics.xdpi / DisplayMetrics.DENSITY_DEFAULT));
return px;
}
Upvotes: 2
Reputation: 7720
You don't have to parse the string manually, you can use a JSON parser such as JSONObject.
try {
JSONArray jsonArray = new JSONArray(jsonString);
for (int i = 0; i < jsonArray.length(); i++) {
JSONObject latlng = jsonArray.getJSONObject(i);
latitude = Double.parseDouble(latlng.getString("lat"));
longitude = Double.parseDouble(latlng.getString("lon"));
}
} catch (JSONException e) {
e.printStackTrace();
}
Upvotes: 0