在android的谷歌地图上用点阵列绘制路径
嗨,我已经创建了一个与谷歌地图集成的应用程序,我需要根据驾驶动作绘制路径。所以这里我可以得到每2秒有当前lat和lang的点数组现在我想用这些lat和lang点数组绘制路径,我需要把标记放在源点和目标点,而不是中间点 我怎么能做到这一点,我已经搜索了很多时间,但仍然没有得到我所期望的解决方案,所以请告诉我,如果你有任何想法或解决方案要做 升级我的代码 我通过使用这个代码得到了解决方案在android的谷歌地图上用点阵列绘制路径,android,google-maps,google-maps-markers,google-polyline,Android,Google Maps,Google Maps Markers,Google Polyline,嗨,我已经创建了一个与谷歌地图集成的应用程序,我需要根据驾驶动作绘制路径。所以这里我可以得到每2秒有当前lat和lang的点数组现在我想用这些lat和lang点数组绘制路径,我需要把标记放在源点和目标点,而不是中间点 我怎么能做到这一点,我已经搜索了很多时间,但仍然没有得到我所期望的解决方案,所以请告诉我,如果你有任何想法或解决方案要做 升级我的代码 我通过使用这个代码得到了解决方案 private void drawPath() { PolylineOptions polylineOp
private void drawPath() {
PolylineOptions polylineOptions = new PolylineOptions();
int i = 0;
if (langtitudearray != null && latitudearray != null) {
for (i = 0; i < latitudearray.size(); i = i + 1) {
polylineOptions.add(new LatLng(latitudearray.get(i),
langtitudearray.get(i)));
}
addMarkers(
new LatLng(latitudearray.get(0), langtitudearray.get(0)),
new LatLng(latitudearray.get(latitudearray.size() - 1), langtitudearray.get(latitudearray.size() - 1)));
}
polylineOptions.color(Color.BLUE);
polylineOptions.width(6);
polylineOptions.geodesic(false);
map.addPolyline(polylineOptions);
}
private void drawPath(){
PolylineOptions PolylineOptions=新的PolylineOptions();
int i=0;
if(langtitudearray!=null和&latitudearray!=null){
对于(i=0;i
只是我可以使用lat和lang点数组并添加标记。现在的问题是。如果我在阵列中获得更多的lat和lang点,则需要一段时间才能加载到地图上,这使得应用程序处于挂起状态,即使我可以通过30秒一次发送广播从服务中获得这些点阵列
注意:我从后台服务中运行的API响应中获取这些点数组,并生成lat和LAG数组,然后通过广播发送到活动
如何解决这个问题,更好的方法是什么?
提前感谢。使用以下方法:调用makeURL()方法,然后调用drawPath()方法
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");
return urlString.toString();
}
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);
for(int z = 0; z<list.size()-1;z++){
LatLng src= list.get(z);
LatLng dest= list.get(z+1);
Polyline line = googleMap.addPolyline(new PolylineOptions()
.add(new LatLng(src.latitude, src.longitude), new LatLng(dest.latitude, dest.longitude))
.width(5)
.color(Color.BLUE).geodesic(true));
}
}
catch (JSONException e) {
}
}
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;
}
publicstringmakeurl(双sourcelat、双sourcelog、双destlat、双destlog){
StringBuilder urlString=新的StringBuilder();
urlString.append(“http://maps.googleapis.com/maps/api/directions/json");
urlString.append(“?origin=”);//来自
append(Double.toString(sourcelat));
urlString.append(“,”);
URL字符串
.append(Double.toString(sourcelog));
urlString.append(“&destination=”);//到
URL字符串
.append(Double.toString(destlat));
urlString.append(“,”);
append(Double.toString(destlog));
追加(“&sensor=false&mode=driving&alternations=true”);
返回urlString.toString();
}
公共void绘图路径(字符串结果){
试一试{
//将字符串转换为json对象
最终JSONObject json=新JSONObject(结果);
JSONArray routarray=json.getJSONArray(“路由”);
JSONObject routes=routeArray.getJSONObject(0);
JSONObject overviewPolylines=routes.getJSONObject(“overview_Polylines”);
字符串编码字符串=概览多段线。获取字符串(“点”);
列表=解码多边形(编码字符串);
对于(intz=0;z>1):(结果>>1));
lat+=dlat;
移位=0;
结果=0;
做{
b=编码的.charAt(索引++)-63;
结果|=(b&0x1f)=0x20);
int-dlng=((结果&1)!=0?~(结果>>1):(结果>>1));
液化天然气+=液化天然气;
LatLng p=新LatLng(((双)lat/1E5)),
((双)液化天然气/1E5));
poly.add(p);
}
返回多边形;
}
感谢您的回复,您的代码只用于在源和目标之间划一条线,但我有点数组(Lat,lang),需要使用这些点来划一条线。那么您能给我一个解决方案吗?我只是从json响应中的json数组中获取这些数组点,就像{“VechicleLocFinder”:[{“VechicleLocFinderID”:6,“VechicleID”:“351540060876166”,“TripDate”:“2015年3月19日12:00AM”,“TripTime”:“20:17:34”,“CurrentLat”:“13.0455132”,“CurrentLang”:“80.2221575”,“CreatedOn_M”:null,“CreatedOn”:“2015-03-19T10:19:31.96”},{“VechicleLocFinderID”:“351540060876166”,“TripDate”:“2015年3月19日12:00AM”,“TripTime”:“20:29:32”,“CurrentLat”:”13.0455097,“CurrentLang”:“80.2221559”,“CreatedOn_M”:“03-19-2015 20:29:32”,“CreatedOn”:“2015-03-19T10:27:11.243”}]}在这里,我将使用currentLat和CurrentLang绘制路径。我该怎么做?