我有大约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

10-06 14:06