gpt4 book ai didi

google-maps - 在2个位置之间绘制路线Google Maps API Android V2

转载 作者:行者123 更新时间:2023-12-04 04:31:10 26 4
gpt4 key购买 nike

我在玩Android上的Google Maps API V2。
尝试获取两个位置之间的路径,并使用JSON解析进行此操作。

我正在上一条路线。然后路线就开始了。但是到了某个时候,它走错了路。

我的最终目的地错误。在其他一些位置,我的应用程序刚刚终止。

这就是我所做的

这是我的makeURL方法

public String makeUrl(){
StringBuilder urlString = new StringBuilder();
urlString.append("http://maps.googleapis.com/maps/api/directions/json");
urlString.append("?origin="); //start positie
urlString.append(Double.toString(source.latitude));
urlString.append(",");
urlString.append(Double.toString(source.longitude));
urlString.append("&destination="); //eind positie
urlString.append(Double.toString(dest.latitude));
urlString.append(",");
urlString.append(Double.toString(dest.longitude));
urlString.append("&sensor=false&mode=driving");

return urlString.toString();
}

我的JSON解析器
public class JSONParser {

static InputStream is = null;
static JSONObject jObj = null;
static String json = "";

public JSONParser() {
// TODO Auto-generated constructor stub
}

public String getJSONFromURL(String url){

try {
DefaultHttpClient httpClient = new DefaultHttpClient();
HttpPost httpPost = new HttpPost(url);

HttpResponse httpResponse = httpClient.execute(httpPost);
HttpEntity httpEntity = httpResponse.getEntity();

is = httpEntity.getContent();
} catch(UnsupportedEncodingException e){
e.printStackTrace();
} catch (ClientProtocolException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}

try {
BufferedReader reader = new BufferedReader(new InputStreamReader(is, "iso-8859-1"), 8);
StringBuilder sb = new StringBuilder();
String line = null;

while((line = reader.readLine()) != null){
sb.append(line + "\n");
//Log.e("test: ", sb.toString());
}

json = sb.toString();
is.close();
} catch (Exception e) {
// TODO Auto-generated catch block
Log.e("buffer error", "Error converting result " + e.toString());
}

return json;
}

我用这种方法画我的路径
public void drawPath(String result){
try{
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");
Log.d("test: ", encodedString);
List<LatLng> list = decodePoly(encodedString);

LatLng last = null;
for (int i = 0; i < list.size()-1; i++) {
LatLng src = list.get(i);
LatLng dest = list.get(i+1);
last = dest;
Log.d("Last latLng:", last.latitude + ", " + last.longitude );
Polyline line = googleMap.addPolyline(new PolylineOptions().add(
new LatLng(src.latitude, src.longitude), new LatLng(dest.latitude, dest.longitude))
.width(2)
.color(Color.BLUE));
}

Log.d("Last latLng:", last.latitude + ", " + last.longitude );
}catch (JSONException e){
e.printStackTrace();
}
}

我用解码我的JSON
private List<LatLng> decodePoly(String encoded){

List<LatLng> poly = new ArrayList<LatLng>();
int index = 0;
int length = encoded.length();
int latitude = 0;
int longitude = 0;

while(index < length){
int b;
int shift = 0;
int result = 0;

do {
b = encoded.charAt(index++) - 63;
result |= (b & 0x1f) << shift;
shift += 5;
} while (b >= 0x20);

int destLat = ((result & 1) != 0 ? ~(result >> 1) : (result >> 1));
latitude += destLat;

shift = 0;
result = 0;
do {
b = encoded.charAt(index++) - 63;
result |= (b & 0x1f) << shift;
shift += 5;
} while (b > 0x20);

int destLong = ((result & 1) != 0 ? ~(result >> 1) : (result >> 1));
longitude += destLong;

poly.add(new LatLng((latitude / 1E5),(longitude / 1E5) ));
}
return poly;
}

然后用AsyncTask编码

提前致谢。

最佳答案

抱歉,很长的等待时间..我已经解决了一段时间,但是我还没有在这里提出解决方案。

基本上是错字...

在我的Json解码器中,我使用2 Do While语句

while (b >= 0x20);

在第二个“Do While”语句中,我忘记了“=”。
因此,它无法正确呈现...

谢谢

关于google-maps - 在2个位置之间绘制路线Google Maps API Android V2,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14877878/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com