【问题标题】:Filtering Data in Java/Processing在 Java/处理中过滤数据
【发布时间】:2015-12-12 04:15:19
【问题描述】:

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

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

【问题讨论】:

  • 我需要您详细说明或想要更多信息。你在处理什么数据结构?
  • 你的问题是什么?
  • 我希望地图上的位置按报告类型排序。看到我的信息当前存储在单独的数组中,分别具有地址、时间和类型。我不确定如何从设计/代码结构的角度来处理这项任务。
  • 一些示例数据可能会有所帮助...想想您的问题的理想答案可能是什么样的,并以一种征求这种类型响应的方式来表达您的问题。请记住,我们对您正在使用的系统的了解为 0。

标签: java performance processing


【解决方案1】:

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

  1. 数据层,一般是一些数据库,尽量安装使用mysql之类的数据库
  2. 数据访问层,我知道您使用的是 java,考虑使用 hibernate,它可以让您使用对象而不是 RDBMS 表来描述和使用您的数据库,在这里您还可以使用 sql / hql 查询
  3. 一些业务层在这些虚拟数据对象之上拥有逻辑,或者可能连接到一些外部服务
  4. 将这些数据提供给您的客户端,无论它在什么平台上运行,无论是 Java 客户端还是 Web 浏览器

查看 java spring http://projects.spring.io/spring-framework/,了解它在实践中是如何完成的。

然后,如果您觉得往返于服务器获取更多数据对性能的影响太大,您可能会决定在客户端缓存一些信息。

最后,永远记住 Donald Knuth 的话

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

【讨论】:

  • 我的问题肯定出在模型方面。当我问这个问题时,我有点担心我会被引导使用数据库。不幸的是,我没有任何使用/构建它们的经验,但看起来我必须开始学习。感谢您提供的链接,我将研究 java spring!
【解决方案2】:

您在为 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。有两个类,不要理会Query。有必要获取xml,但与您的问题无关。 Prop 类是数据持有者。它获取一个 xml 作为参数并将其字段解析为成员变量。目前只有一种方法。 toString() 用于向控制台显示数据。

http://pastebin.com/8gGDsFAv

【讨论】:

  • 是的,我正在使用 Processing 来构建我的项目。这看起来是访问我的数据的绝佳方式,而且看起来也很有效。我从来没有在这样的数组上使用点符号。你知道我可以看到一个使用这种技术的例子吗?感谢您的回复!
  • 您好,我编辑了上面的答案以包含一个或两个示例:)看看它是否有帮助。
  • 太棒了,我会看看它。谢谢你的例子!
猜你喜欢
  • 2023-03-22
  • 1970-01-01
  • 1970-01-01
  • 2014-11-26
  • 2016-04-20
  • 1970-01-01
  • 1970-01-01
  • 2018-11-08
  • 1970-01-01
相关资源
最近更新 更多