0

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

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

4

2 回答 2

1

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

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

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

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

最后,永远记住 Donald Knuth 的话

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

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

http://pastebin.com/8gGDsFAv

于 2013-11-14T02:08:26.127 回答