我正在开发一个基于地图的数据可视化项目,该项目从XML文件中删除数据。根据地理位置将地点放置在地图上,并通过鼠标点击交互位置,然后显示有关该位置的信息。我需要根据每个位置的信息开始过滤结果。例如:假设我想显示有关树木的信息,我知道它们的位置和类型。我想用复选框过滤核桃,樱桃,橡木。 我试图从设计的角度计划如何解决这个问题。目前,所有信息都直接从XML文件中提取,很少进入新的数组/列表。我试图征服这项任务的任何建议?如果您需要我详细说明或想了解更多信息,请告诉我。
编辑: 我很抱歉,如果这是模糊的,我不完全确定如何提出这个问题。所以现在我正在根据我想要显示的信息获取311数据并将信息放入Array中。所以我想说我想得到一个地址。 (此时已经使用311数据中的所有单个位置填充了地图,例如200个点)我单击一个位置,该位置与具有所有地址的数组中的索引相关联。所以我可以随时使用索引从数组中获取信息。有多个数组包含地址,报告类型,时间等信息。我希望地图上的位置按报告类型排序。我希望这更有意义。
答案 0 :(得分:1)
我希望我理解正确,这似乎是一个常规的数据管理系统要求,用几句话来说很难覆盖这些系统,但简而言之我会说那些系统分为几层:
查看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()用于向控制台显示数据。