您好我有一个Java EE应用程序,我有一个查询,它从供应商表中检索所有供应商。 我有另一张桌子位置,我有供应商的经纬度。
以下是该应用程序目前的工作:
这是我想要做的。
在另一张表中,我有我当前的位置。
在servlet中使用Haversine公式我想找到我所在位置与所有供应商之间的距离。
我正在考虑将其作为servlet中的方法实现。 但我遇到了麻烦:
如何使供应商位置列表重复并发送到我的半正式公式方法。
如何将结果发送到jsp页面。
如何以排序的方式显示它们,首先是最小距离。
答案 0 :(得分:0)
2. how to send the result to the jsp page.
您可以在请求的参数中设置列表,并在客户端获取该参数。之后,您可以在jsp中迭代并显示数据。
3. how to display them in a sorted way, smallest distance first.
您应该为供应商位置编写比较器。您可以通过它对列表进行排序。例如,
Comparator<Supplier> comp = new Comparator<Supplier>(){
@Override
public int compare(Supplier o1, Supplier o2) {
// your logic
return 0;
}
};
Collections.sort(your supplier location list, comp);
http://docs.oracle.com/javase/1.4.2/docs/api/java/util/Comparator.html
答案 1 :(得分:0)
检查您的基础数据库是否允许您应用hasrsine表单(即支持三角公式)作为查询的一部分。数据库有效地完成排序和过滤。填充表只是将排序列表传递给jstl。您始终可以使用自定义比较器对列表进行排序。我宁愿使用jsp custom tag。
答案 2 :(得分:0)
Plz参考以下链接获取计算距离的公式(以km或英里为单位) Calculating distance using latitude longitude coordinates in kilometers with Java
1.如何使供应商位置列表重复并发送到我的半正式公式方法。
Map dist;
for (Supplier s : supplist) {
dist.put(s, calcDist(s.getLatitude(), s.getLongitude(), currLat, currLong));
}
3.如何以排序的方式显示它们,首先显示最小距离。
根据距离编写自定义比较器进行排序。
答案 3 :(得分:0)
您可以在供应商类中放置2个方法,一个用于通过给出坐标设置距离,另一个用于检索坐标;类似的东西:
void setDistance(long latitude, long longitude) {
// calcultate distance and set it
//...
this.distance = distance;
}
long getDistance() {
return this.distance;
}
然后在检索供应商后,您可以使用比较器对它们进行分类;类似的东西:
Collections.sort(suppliers, new Comparator<Supplier>(){
public int compare(Supplier o1, Supplier o2) {
return new Long(o1.getDistance()).compare(o2.getDistance());
}
});
我没有编译这段代码;所以它可能包含一些语法错误,但它会完成这项工作。您甚至可以创建一个类似Comparator_distance的类来代替匿名类,您可以在其中设置coördinates来计算距离,因此您不必在供应商中设置距离,但可以在比较时计算它。对我来说感觉有点干净。
如果您想要分页结果,请确保在分页之前进行排序,否则您将得到不正确的结果。