用PGraphic对象着色线

时间:2014-04-01 12:40:13

标签: java processing

我有大约1000点(gps坐标),我想使用展开地图库在地图上可视化。轨道由彩色线条(两个点)组成。我想根据速度为线条着色(如果轨道上的速度低于20km / 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();
}
}

这只绘制了初始点而没有别的。有人能告诉我什么可能是错的吗?

1 个答案:

答案 0 :(得分:2)

可能只是需要在for循环之前放置beginShape()

无论如何,我们提供的示例似乎与您要实现的目标非常接近:

使用基于速度的颜色,查看ColoredLinesMarker.java的行标记。请注意,在这个例子中我们如何从属性中读取速度(你不必像这样做,但这是一个好习惯)。 您可以找到完整的示例(包括应用程序和带有速度数据的GPX文件的自定义阅读器)here