谷歌地图静态地图折线穿过湖泊,河流,山脉
我的程序使用Google Maps的网络服务路线来查找两点之间的路线。结果被解析并存储在变量中。
然后,此变量用于组成google静态地图URL。
解析和URL正常工作。问题是绘制的“路线”穿过湖泊和山脉。
{ String GPS = "-22.978823,-43.233249";
String link = MAPS_BASE_URL + "center=brazil," + GPS +
"&markers=color:blue|brazil," + GPS +
"&path=color:0xff0000ff" + "%s" +
"&zoom=13&size=1024x1024&sensor=false";
String htmlContent = "";
String direction_URL= "";
URL url = null;
String parsedStr = null;
Scanner scan = null;
origin = GPS;
destination ="Maracanã";
try {
direction_URL = MAPS_DIRECTIONS_URL;
direction_URL += URLEncoder.encode(origin, "UTF-8");
direction_URL += "&destination=";
direction_URL += URLEncoder.encode(destination, "UTF-8");
direction_URL += "&key=AIzaSyARNFl6ns__p2OEy3uCrZMGem8KW8pXwAI";
}catch(UnsupportedEncodingException e){
Logger.getLogger(Service.class.getName()).log(Level.SEVERE, null, e);
}
try {
url = new URL(direction_URL);
} catch (MalformedURLException ex) {
Logger.getLogger(AlertService.class.getName()).log(Level.SEVERE, null, ex);
}
try {
scan = new Scanner(url.openStream());
} catch (IOException ex) {
Logger.getLogger(AlertService.class.getName()).log(Level.SEVERE, null, ex);
}
String str = new String();
while (scan.hasNext())
str += scan.nextLine();
scan.close();
parsedStr = parseJson(str);
try {
InputStream htmlInputStream =
AlertService.class.getResourceAsStream("/resources/gapi.html");
BufferedReader htmlReader = new BufferedReader(
new InputStreamReader(htmlInputStream));
String locationsContent = "";
String wilcardContent = "";
Scanner strScanner = new Scanner(parsedStr);
while (strScanner.hasNextLine())
{
locationsContent = strScanner.nextLine() + "\n";
StringTokenizer st = new StringTokenizer(locationsContent, ";");
if (st.countTokens() == 2)
wilcardContent += "|" + st.nextToken().trim()
+ "," + st.nextToken().trim();
}
link = link.replaceFirst("%s", wilcardContent);
htmlContent = "";
while (htmlReader.ready())
htmlContent += htmlReader.readLine() + "\n";
htmlContent = htmlContent.replaceAll("%s", link);
} catch (FileNotFoundException ex) {
Logger.getLogger(Service.class.getName()).log(Level.SEVERE, null, ex);
} catch (IOException ex) {
Logger.getLogger(Service.class.getName()).log(Level.SEVERE, null, ex);
}
return htmlContent;
}
解析功能:
private String parseJson(String s){ String coordinates = new String ();
final JSONObject json = new JSONObject(s);
final JSONObject jsonRoute = json.getJSONArray("routes").getJSONObject(0);
//Get the leg, only one leg as we don't support waypoints
final JSONObject leg = jsonRoute.getJSONArray("legs").getJSONObject(0);
//Get the steps for this leg
final JSONArray steps = leg.getJSONArray("steps");
//Number of steps for use in for loop
final int numSteps = steps.length();
for(int i = 0; i< numSteps; ++i){
final JSONObject step = steps.getJSONObject(i);
final JSONObject startLocation = step.getJSONObject("start_location");
final Double startLat = startLocation.getDouble("lat");
final Double startlng = startLocation.getDouble("lng");
final JSONObject endLocation = step.getJSONObject("end_location");
final Double endtLat = endLocation.getDouble("lat");
final Double endtlng = endLocation.getDouble("lng");
coordinates = coordinates.concat(" ");
coordinates = coordinates.concat(startLat.toString());
coordinates = coordinates.concat(";" + " ");
coordinates = coordinates.concat(startlng.toString());
coordinates = coordinates.concat("\n");
coordinates = coordinates.concat(" ");
coordinates = coordinates.concat(endtLat.toString());
coordinates = coordinates.concat(";" + " ");
coordinates = coordinates.concat(endtlng.toString());
coordinates = coordinates.concat("\n");
}
return coordinates;
}
杰森回应:
https://maps.googleapis.com/maps/api/directions/json?origin=-22.978823,-43.233249&destination=Maracan%C3%A2&key=AIzaSyARNFl6ns__p2OEy3uCrZMGem8KW8pXwAI
最终到达网址如下所示:
http://maps.google.com/maps/api/staticmap?center =
brazil,-22.978823,-43.233249&markers = color:blue
|巴西,-22.978823,-43.233249&path = color:0xff0000ff | -22.9783362,-43.2336781 |
-22.9772355,-43.23076390000001 | -22.9772355,-43.23076390000001 |
-22.9789792,-43.2300162 | -22.9789792,-43.2300162 | -22.9790772,-43.23036 |
-22.9790772,-43.23036 | -22.9786979,-43.22698949999999 |
-22.9786979,-43.22698949999999 | -22.9771399 ,-43.2196208 |
-22.9771399,-43.2196208 | -22.9624962,-43.20396840000001 |
-22.9624962,-43.20396840000001 | -22.9583858,-43.2043807 |
-22.9583858,-43.2043807 | -22.934896,-43.2094454 | -22.934896,-43.2094454 |
-22.9333061,- 43.2096873 | -22.9333061,-43.2096873 | -22.913577,-43.2099889 |
-22.913577,-43.2099889 | -22.9106681,-43.2154625 | -22.9106681,-43.2154625 |
-22.9101261,-43.2217923 | -22.9101261,-43.2217923 | -22.9114561,-43.2254838 |
-22.9114561,-43.2254838 | -22.9135546,-43。2276606&zoom = 13&size =
1024x1024&sensor =
false
回答:
我想出了如何在java中解决它。我改编了用户geocozip
javascript代码。就我而言,由于没有提供任何航路点,所以我只需要一条腿。所以我的解析函数得到了这个:
List<LatLng> path = new ArrayList(); for(int j = 0; j< numSteps; ++j){
final JSONObject step = steps.getJSONObject(j);
final JSONObject polyline = step.getJSONObject("polyline");
final String polylinePoint = polyline.getString("points");
List<LatLng> coordinates = decodePath(polylinePoint);
for( int k = 0; k < coordinates.size(); ++k){
path.add(coordinates.get(k));
}
}
还需要重新编码,然后以可读的URL格式输入。
String newPath = path.createPolyLine(encodedPath);String locationsContent="";
locationsContent = URLEncoder.encode(newPath, "UTF-8")
.replaceAll("\\%40", "@")
.replaceAll("\\+", "%20")
.replaceAll("\\%21", "!")
.replaceAll("\\%27", "'")
.replaceAll("\\%28", "(")
.replaceAll("\\%29", ")");
以上是 谷歌地图静态地图折线穿过湖泊,河流,山脉 的全部内容, 来源链接: utcz.com/qa/406399.html