我正在尝试使用Google路线API在我的地图视图上显示路线,但是我很难从JSON响应中获取数据。我可以获取“级别”和“点”字符串,但无法弄清楚如何将它们解码为地图上的点。
任何帮助将非常感激。
我有一个可以为您解码它们的类,在下面添加该类,然后像这样调用您的代码:
int[] decodedZoomLevels = PolylineDecoder.decodeZoomLevels(levels);
GeoPoint[] gPts = PolylineDecoder.decodePoints(points, decodedZoomLevels.length);
您从JSON响应中提取的数据在哪里points
和levels
。然后,您可以遍历一系列地理点,在它们之间画一条线以显示方向。
希望这可以帮助!肯尼
编辑:似乎Google Directions
API不再将缩放级别字符串作为JSON响应的一部分返回,不过不用担心,我们使用的唯一目的就是检查点数,因此我们可以简单地将它们放入像这样的列表:
public static List <GeoPoint> decodePoints(String encoded_points){
int index = 0;
int lat = 0;
int lng = 0;
List <GeoPoint> out = new ArrayList<GeoPoint>();
try {
int shift;
int result;
while (index < encoded_points.length()) {
shift = 0;
result = 0;
while (true) {
int b = encoded_points.charAt(index++) - '?';
result |= ((b & 31) << shift);
shift += 5;
if (b < 32)
break;
}
lat += ((result & 1) != 0 ? ~(result >> 1) : result >> 1);
shift = 0;
result = 0;
while (true) {
int b = encoded_points.charAt(index++) - '?';
result |= ((b & 31) << shift);
shift += 5;
if (b < 32)
break;
}
lng += ((result & 1) != 0 ? ~(result >> 1) : result >> 1);
/* Add the new Lat/Lng to the Array. */
out.add(new GeoPoint((lat*10),(lng*10)));
}
return out;
}catch(Exception e) {
e.printStackTrace();
}
return out;
}
编辑:旧代码
public class PolylineDecoder {
/**
* Transform a encoded PolyLine to a Array of GeoPoints.
* Java implementation of the original Google JS code.
* @see Original encoding part: <a href="http://code.google.com/apis/maps/documentation/polylinealgorithm.html">http://code.google.com/apis/maps/documentation/polylinealgorithm.html</a>
* @return Array of all GeoPoints decoded from the PolyLine-String.
* @param encoded_points String containing the encoded PolyLine.
* @param countExpected Number of points that are encoded in the PolyLine. Easiest way is to use the length of the ZoomLevels-String.
* @throws DecodingException
*/
public static GeoPoint[] decodePoints(String encoded_points, int countExpected){
int index = 0;
int lat = 0;
int lng = 0;
int cnt = 0;
GeoPoint[] out = new GeoPoint[countExpected];
try {
int shift;
int result;
while (index < encoded_points.length()) {
shift = 0;
result = 0;
while (true) {
int b = encoded_points.charAt(index++) - '?';
result |= ((b & 31) << shift);
shift += 5;
if (b < 32)
break;
}
lat += ((result & 1) != 0 ? ~(result >> 1) : result >> 1);
shift = 0;
result = 0;
while (true) {
int b = encoded_points.charAt(index++) - '?';
result |= ((b & 31) << shift);
shift += 5;
if (b < 32)
break;
}
lng += ((result & 1) != 0 ? ~(result >> 1) : result >> 1);
/* Add the new Lat/Lng to the Array. */
out[cnt++] = new GeoPoint((lat*10),(lng*10));
}
return out;
}catch(Exception e) {
e.printStackTrace();
}
return out;
}
public static int[] decodeZoomLevels(String encodedZoomLevels){
int[] out = new int[encodedZoomLevels.length()];
int index = 0;
for(char c : encodedZoomLevels.toCharArray())
out[index++] = c - '?';
return out;
}
}
主要内容:示例可以使用类的方法在图像上绘制多段线。 以下是此方法的语法。 该方法接受以下参数 - mat - 表示要在其上绘制矩形的图像的对象。 pts - 包含类型的对象的对象。 isClosed - 指定折线的布尔型类型的参数是否为关闭的。 color - 表示矩形颜色的标量对象(BGR)。 thickness - 表示矩形厚度的整数; 默认情况下,厚度值为。 类的构造函数接受类的对象。 示例 以下程序演示
主要内容:示例可以使用类的方法在图像上绘制凸多段线。 以下是此方法的语法。 该方法接受以下参数 - mat - 表示要在其上绘制矩形的图像的对象。 points - 一个对象,表示要在其间绘制凸多段线的点。 color - 表示矩形颜色的标量对象(BGR)。 类的构造函数接受类的对象。 示例 以下程序演示如何在图像上绘制凸多段线并使用JavaFX窗口显示它。 在执行上述程序时,您将得到以下输出 -
我想创建一个包含三条线(男性、女性、未知)的折线图。这是我的数据示例: 是否有一个选项,在图中自动创建三行或我需要循环通过数据和创建三个跟踪自己?到目前为止,这是我的代码:
本文向大家介绍iOS使用Charts框架绘制折线图,包括了iOS使用Charts框架绘制折线图的使用技巧和注意事项,需要的朋友参考一下 首先先看一下效果: 折线图 一、 初始化折线图对象 创建一个折线图的用到的类是LineChartView.h, 代码如下: 二、设置折线图外观样式 1.设置交互样式 2.设置X轴样式 3.设置Y轴样式 4.设置网格线样式 主要是设置Y轴的网格线样式, 代码如下:
问题内容: 在我的程序中,我想绘制一个简单的分数线图。我有一个文本文件,并且在每一行上是一个整数分数,我已阅读该分数,并希望将其作为参数传递给图形类。我在实现graph类时遇到了一些麻烦,我所看到的所有示例都将它们的方法和它们的main放在同一个类中,而我不会。 我希望能够将数组传递给对象并生成图形,但是在调用我的绘画方法时,它要求我提供Graphics g …这是到目前为止的内容: 现在,我已经
如果我做错了什么,有人能告诉我吗?提前谢了。