如何根据Json字符串中的Point数组在Google Map上绘制路径

时间:2016-08-09 06:43:29

标签: android json google-maps google-maps-android-api-2

如果有任何问题可能像我一样重复,我很抱歉。 但就我在Stackoverflow中搜索而言,我找不到任何类似于我的问题的问题。

那么,

我在地图中有许多点,已经用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"}]

我想在谷歌地图上绘制这个。但我不知道如何绘制它。

我看过this。从那里我知道,我必须得到协调,并添加到PolyLine。这是不是意味着,我必须做一些子字符串或文本分割,这样我才能得到协调?好吧,我讨厌任何字符串操作xD

任何人都知道一些线索? 谢谢你提前.. :)

2 个答案:

答案 0 :(得分:2)

希望这可以帮助你。

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;
}

答案 1 :(得分:0)

您不必手动解析字符串,可以使用JSONObject等JSON解析器。

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();
}