在Java / Processing中过滤数据

时间:2013-11-13 21:47:12

标签: java performance processing

我正在开发一个基于地图的数据可视化项目,该项目从XML文件中删除数据。根据地理位置将地点放置在地图上,并通过鼠标点击交互位置,然后显示有关该位置的信息。我需要根据每个位置的信息开始过滤结果。例如:假设我想显示有关树木的信息,我知道它们的位置和类型。我想用复选框过滤核桃,樱桃,橡木。 我试图从设计的角度计划如何解决这个问题。目前,所有信息都直接从XML文件中提取,很少进入新的数组/列表。我试图征服这项任务的任何建议?如果您需要我详细说明或想了解更多信息,请告诉我。

编辑: 我很抱歉,如果这是模糊的,我不完全确定如何提出这个问题。所以现在我正在根据我想要显示的信息获取311数据并将信息放入Array中。所以我想说我想得到一个地址。 (此时已经使用311数据中的所有单个位置填充了地图,例如200个点)我单击一个位置,该位置与具有所有地址的数组中的索引相关联。所以我可以随时使用索引从数组中获取信息。有多个数组包含地址,报告类型,时间等信息。我希望地图上的位置按报告类型排序。我希望这更有意义。

2 个答案:

答案 0 :(得分:1)

我希望我理解正确,这似乎是一个常规的数据管理系统要求,用几句话来说很难覆盖这些系统,但简而言之我会说那些系统分为几层:

  1. 数据层,通常是一些数据库,尝试安装和使用像mysql这样的数据库
  2. 数据访问层,我知道你正在使用java,考虑使用hibernate,它会让你使用对象而不是RDBMS表来描述和使用你的数据库,这里你也会有sql / hql查询
  3. 某些业务层将逻辑置于这些虚拟数据对象之上,或者可能连接到某些外部服务
  4. 将此数据提供给您的客户端,无论它运行在何处,如果是Java客户端或Web浏览器
  5. 查看java spring http://projects.spring.io/spring-framework/,了解它在实践中的表现。

    然后,如果您想要在服务器上来回寻找更多关于性能的数据,您可能会决定在客户端缓存一些信息。

    最后,永远记住Donald Knuth的说法

      

    大约97%的时间:过早优化是万恶之源。

答案 1 :(得分:0)

您正在使用Processing.org的处理代码吗?如果我理解你,那么不是一个对象将所有数据分组到一个位置的情况,并在需要时使用getter甚至点符号检索信息?我虽然喜欢这样的东西:

class Local(){
String name;
String address;
//whatever else...
float mapPosX, mapPosY;


boolean ispressedOver(){
//return if mouse over
}

}

使用XML数据创建Locals,存储在Local数组中,当鼠标按下时获取它

if (localsArray[i].isPressedOver){display(localsArray[i].address);}

除了将xml解析为

之外,这将是一个非常简单的想法示例
Place[] places  = new Place[4];


void setup() {
  size(600, 400);
  noStroke();
  places[0] = new Place ("one", "That street, 12 - BR", 0.32044, 0.230098, 200, 98);
  places[1] = new Place ("two", "This street, 35 - UG", 0.22222, 0.084723, 394,176);
  places[2] = new Place ("three", "Other street, 132 - TY", 0.32321, 0.36388, 157, 283);
  places[3] = new Place ("four", "Principal street, 672 - OP", 0.909044, 0.7828939, 276, 312);
}

void draw() {
  background(75, 16, 160);
  for(Place p:places){
  p.display();
  }
}

class Place {
  String name;
  String address;
  float latitude;
  float longitude;
  float xPos;
  float yPos;
  float sz = 40;

  Place(String n, String a, float lat, float lng, float x, float y) {

    name      = n;
    address   = a;
    latitude  = lat;
    longitude = lng;
    xPos      = x;
    yPos      = y;
  }

  void display() {

    fill(200, 210, 100);
    rect(xPos, yPos, sz, sz);

    if (isOver()) {
      String quick = name + " - " + address + " - " + latitude + " - " + longitude ;
      fill(0);
      text(quick, xPos - textWidth(quick)/2, yPos - 10);
    }
  }

  boolean isOver() {
    return (mouseX > xPos && mouseX < xPos + sz && mouseY > yPos && mouseY < yPos + sz);
  }
}

在以下链接中,我粘贴了我正在处理的代码。它没有显示任何内容。但我确实获得了XML数据并基于它们构建了对象。目前输出在控制台中。我不知道是否会有所帮助。大多数变量名称都是葡萄牙语:P并没有评论......但它有效。你可以运行它。它从Web中的API获取xml。有两个类,不要打扰查询。有必要获取xml,但与您的问题无关。 Prop类是数据持有者。它获取一个xml作为参数,并将其字段解析为成员变量。目前只有一种方法。 toString()用于向控制台显示数据。

http://pastebin.com/8gGDsFAv