我正在尝试将Google室内地图api用于建筑物的楼层以及所有其他方面,但是当我从路线api请求路线时,它会使用道路到达那里,但是当我在网络或他们的应用程序的google map上尝试相同的操作时显示步行方向。我在请求其api时选择了相同的模式。
我尝试用解码方法解码多段线字符串,然后在地图上绘制了这些多段线,但它从道路经过。 这是我用来绘制折线的代码
if (click != 70) {
marker.showInfoWindow();
if (setstartMarker){
start = marker.getPosition();
setstartMarker = false;
}else if (setEndMarker){
end = marker.getPosition();
setEndMarker = false;
}
if (start != null && end != null){
AndroidNetworking.get("https://maps.googleapis.com/maps/api/directions/json?origin={start}&destination={end}&key={key}&mode=walking")
.addPathParameter("start",start.latitude+","+start.longitude)
.addPathParameter("end",end.latitude+","+end.longitude)
.addPathParameter("key","MY_API_KEY")
.setPriority(Priority.HIGH)
.build()
.getAsJSONObject(new JSONObjectRequestListener() {
@Override
public void onResponse(JSONObject response) {
try {
Log.d("polystring",response.toString());
JSONArray object = response.getJSONArray("routes");
JSONObject polyline = object.getJSONObject(0);
JSONArray ovrplylne = polyline.getJSONArray("legs");
JSONObject legsobject = ovrplylne.getJSONObject(0);
JSONArray steps = legsobject.getJSONArray("steps");
Log.d("steps",steps.toString());
for (int i = 0 ; i < steps.length();i++){
List<LatLng> points = decodePoly(steps.getJSONObject(i).getJSONObject("polyline").getString("points"));
PolylineOptions options = new PolylineOptions();
for (LatLng objectpoint: points){
options.add(objectpoint);
}
mMap.addPolyline(options);
}
} catch (JSONException e) {
Log.d("polystring",e.getMessage());
}
}
@Override
public void onError(ANError anError) {
Toast.makeText(getApplicationContext(),String.valueOf(anError.getErrorCode()),Toast.LENGTH_SHORT).show();
}
});
start = null;
end = null;
}
return true;
}
要使用此代码对折线进行解码
private List<LatLng> decodePoly(String encoded) {
List<LatLng> poly = new ArrayList<>();
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;
}
这是我的Android应用程序https://prntscr.com/nobqn6中的样子,现在在其Google地图的网站上检查相同的标记http://prntscr.com/nobs4s