我有大约1000个点(gps坐标),我想使用“展开地图”库在地图上可视化。轨道由彩色线(两个点)组成。我想根据速度为线条涂色(如果赛道速度低于20 km / h,则应该为红色,否则为绿色)。
以下代码代表一种颜色的自定义线条,其工作原理是:
class MyPolygonMarker extends SimplePolygonMarker {
public void draw(PGraphics pg, List<MapPosition> mapPositions) {
pg.pushStyle();
pg.strokeWeight(2);
pg.fill(255,0,0,0);
pg.stroke(#2688AD);
pg.beginShape();
for(int i=0; i<mapPositions.size();i++)
{
pg.vertex(mapPositions.get(i).x, mapPositions.get(i).y);
}
pg.endShape();
pg.popStyle();
}
}
因此,在for循环中,我想放置一个if语句来检查速度值。我尝试了这个:
class MyPolygonMarker extends SimplePolygonMarker {
public void draw(PGraphics pg, List<MapPosition> mapPositions) {
pg.pushStyle();
pg.strokeWeight(2);
pg.fill(255,0,0,0);
for(int i=0; i<mapPositions.size();i++)
{
Float speed_value = Float.parseFloat(lines[i].split("\t")[7]);
if(speed_value > 20)
{
pg.stroke(green);
pg.beginShape();
}
else
{
pg.stroke(red);
pg.beginShape();
}
pg.vertex(mapPositions.get(i).x, mapPositions.get(i).y);
}
pg.endShape();
pg.popStyle();
}
}
这仅绘制初始点,没有其他内容。有人可以告诉我什么地方可能出问题吗?
最佳答案
可能很简单,您需要将beginShape()
放在for循环之前。
无论如何,我们提供的示例似乎确实与您要实现的目标非常接近:
看看ColoredLinesMarker.java带有基于速度的颜色的线标记。请注意,在该示例中,我们如何从属性中读取速度(您不必这样做,但这是一个好习惯)。
您可以找到完整的示例(包括应用程序和具有速度数据的GPX文件的自定义阅读器)here。