java–Google Maps API和Markers之间的自定义折线路线

java–Google Maps API和Markers之间的自定义折线路线,第1张

概述我想为Android应用程序制作一个自定义路由,我不确定我应该使用哪个API以及它是否与Java兼容.据我所知,我需要使用航点来制作路线(我不需要知道两点之间的距离,只是为了制作路线).目标是从地图侧面的菜单中选择一个选项,并显示两个标记之间的自定义路线之一.解决方法:您可以使用Go

我想为Android应用程序制作一个自定义路由,我不确定我应该使用哪个API以及它是否与Java兼容.

据我所知,我需要使用航点来制作路线(我不需要知道两点之间的距离,只是为了制作路线).

目标是从地图侧面的菜单中选择一个选项,并显示两个标记之间的自定义路线之一.

解决方法:

您可以使用Google Maps API v2 for Android和Google Maps Directions webservice API执行此 *** 作

要开始使用Google Maps API,还有很多其他好的答案. See here是一个简单的Map Activity的完整工作示例.请注意,您还需要设置API密钥以使用您的项目.

至于使用Google Maps Directions网络服务API,您应该首先阅读文档.您可以使用API​​密钥并在开发人员控制台中启用API,但它仍然可以在不使用API​​密钥的情况下运行.

以下是使用Google Maps API在两点之间绘制折线所需的基本代码,请注意,从API返回的点是以需要解码的基本64位编码字符串编码的.

首先,确保您的项目包含Google Maps Utility库,该库将用于解码base64编码的折线:

dependencIEs {    compile 'com.Google.maps.androID:androID-maps-utils:0.5+'    //.......}

这是AsyncTask,你应该在调用它时给两个LatLng点.

您可以使用两个LatLng对象调用AsyncTask,例如在两个标记之间:

new GetDirectionsAsync().execute(markerOne.getposition(), markerTwo.getposition());

这是AsyncTask代码:

class GetDirectionsAsync extends AsyncTask<LatLng, VoID, List<LatLng>> {    JsONParser JsonParser;    String DIRECTIONS_URL = "https://maps.GoogleAPIs.com/maps/API/directions/Json";    @OverrIDe    protected voID onPreExecute() {        super.onPreExecute();    }    @OverrIDe    protected List<LatLng> doInBackground(LatLng... params) {        LatLng start = params[0];        LatLng end = params[1];        HashMap<String, String> points = new HashMap<>();        points.put("origin", start.latitude + "," + start.longitude);        points.put("destination", end.latitude + "," + end.longitude);        JsonParser = new JsONParser();        JsONObject obj = JsonParser.makehttpRequest(DIRECTIONS_URL, "GET", points, true);        if (obj == null) return null;        try {            List<LatLng> List = null;            JsONArray routeArray = obj.getJsONArray("routes");            JsONObject routes = routeArray.getJsONObject(0);            JsONObject overvIEwpolylines = routes.getJsONObject("overvIEw_polyline");            String encodedString = overvIEwpolylines.getString("points");            List = polyUtil.decode(encodedString);            return List;        } catch (JsONException e) {            e.printstacktrace();        }        return null;    }    @OverrIDe    protected voID onPostExecute(List<LatLng> pointsList) {        if (pointsList == null) return;        if (line != null){            line.remove();        }        polylineoptions options = new polylineoptions().wIDth(5).color(color.magenta).geodesic(true);        for (int i = 0; i < pointsList.size(); i++) {            LatLng point = pointsList.get(i);            options.add(point);        }        line = mMap.addpolyline(options);    }}

AsyncTask引用Activity的一些成员变量,即polyline和GoogleMap,Activity定义如下所示:

public class MapsActivity extends AppCompatActivity implements OnMapReadyCallback{    GoogleMap mMap;    polyline line;    //.....

这是本例中使用的JsONParser类,请注意这是为androID-23更新的修改版本,我wrote a blog post about:

public class JsONParser {    String charset = "UTF-8";    httpURLConnection conn;    DataOutputStream wr;    StringBuilder result;    URL urlObj;    JsONObject jObj = null;    StringBuilder sbParams;    String paramsstring;    public JsONObject makehttpRequest(String url, String method,                                      HashMap<String, String> params, boolean encode) {        sbParams = new StringBuilder();        int i = 0;        for (String key : params.keySet()) {            try {                if (i != 0){                    sbParams.append("&");                }                if (encode) {                    sbParams.append(key).append("=")                            .append(URLEncoder.encode(params.get(key), charset));                }                else{                    sbParams.append(key).append("=")                            .append(params.get(key));                }            } catch (UnsupportedEnCodingException e) {                e.printstacktrace();            }            i++;        }        if (method.equals("POST")) {            // request method is POST            try {                urlObj = new URL(url);                conn = (httpURLConnection) urlObj.openConnection();                conn.setDoOutput(true);                conn.setRequestMethod("POST");                conn.setRequestProperty("Accept-Charset", charset);                conn.setReadTimeout(10000);                conn.setConnectTimeout(15000);                conn.connect();                paramsstring = sbParams.toString();                wr = new DataOutputStream(conn.getoutputStream());                wr.writeBytes(paramsstring);                wr.flush();                wr.close();            } catch (IOException e) {                e.printstacktrace();            }        }        else if(method.equals("GET")){            // request method is GET            if (sbParams.length() != 0) {                url += "?" + sbParams.toString();            }            Log.d("JsONParser", "full GET url: " + url);            try {                urlObj = new URL(url);                conn = (httpURLConnection) urlObj.openConnection();                conn.setDoOutput(false);                conn.setRequestMethod("GET");                conn.setRequestProperty("Accept-Charset", charset);                conn.setConnectTimeout(15000);                conn.connect();            } catch (IOException e) {                e.printstacktrace();            }        }        try {            //Receive the response from the server            inputStream in = new BufferedinputStream(conn.getinputStream());            BufferedReader reader = new BufferedReader(new inputStreamReader(in));            String line;            result = new StringBuilder();            while ((line = reader.readline()) != null) {                result.append(line);            }            Log.d("JsON Parser", "result: " + result.toString());        } catch (IOException e) {            e.printstacktrace();        }        conn.disconnect();        // try parse the string to a JsON object        try {            jObj = new JsONObject(result.toString());        } catch (JsONException e) {            Log.e("JsON Parser", "Error parsing data " + e.toString());        }        // return JsON Object        return jObj;    }}

在两个标记之间绘制路线的结果:

总结

以上是内存溢出为你收集整理的java – Google Maps API和Markers之间的自定义折线路线全部内容,希望文章能够帮你解决java – Google Maps API和Markers之间的自定义折线路线所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1103725.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-28
下一篇 2022-05-28

发表评论

登录后才能评论

评论列表(0条)

保存