三十岁的 2017-03-30 05:11 采纳率: 0%
浏览 508

经纬度计算距离 android开发

写了一段代码从数据库提取经纬度来计算距离,结果显示select语句有错误:
[53, 190] The left expression is not an arithmetic expression.
[193, 256] The right expression is not an arithmetic expression

代码如下:
@GET
@Path("returnNearbyFriends/{studentid}/{longitude}/{latitude}")
@Produces({"application/json"})
public JsonArray returnNearbyFriends(@PathParam("studentid") Integer studentid, @PathParam("longitude") Double longitude, @PathParam("latitude") Double latitude) {
TypedQuery q = em.createQuery("select distinct(l.studentid.studentid), l.date, (ACOS(SIN((:latitude * 3.1415) / 180 ) *SIN((l.latitude * 3.1415) / 180 ) +COS((:latitude * 3.1415) / 180 ) * COS((l.latitude) * 3.1415) / 180 ) *COS((:longitude * 3.1415) / 180 - (l.longitude * 3.1415) / 180) * 6380) as Distance "
+ "from Location l "
+ "where l.date in (select max(l.date) FROM Location l group by l.studentid) "
+ "order by l.date;", Location.class);
q.setParameter("studentid", studentid);
q.setParameter("longitude", longitude);
q.setParameter("latitude", latitude);
List list = q.getResultList();
JsonArrayBuilder builder = Json.createArrayBuilder();
for (Object[] obj : list){
String sid = (String) obj[0];
String ldate = (String) obj[1];
String distance = (String) obj[2];
JsonObject jsObject = Json.createObjectBuilder()
.add("StudentID", sid)
.add("LocationDate", ldate)
.add("Distance", distance)
.build();
builder.add(jsObject);

}
JsonArray result = builder.build();
return result;
}

  • 写回答

1条回答 默认 最新

  • Java000I 2024-04-12 14:35
    关注
    TypedQuery<Object[]> q = em.createQuery("SELECT DISTINCT l.studentid.studentid, l.date, "  
        + "(ACOS(SIN(:latitude * PI() / 180) * SIN(l.latitude * PI() / 180) "  
        + "+ COS(:latitude * PI() / 180) * COS(l.latitude * PI() / 180) "  
        + "* COS(:longitude * PI() / 180 - l.longitude * PI() / 180)) * 6380) AS Distance "  
        + "FROM Location l "  
        + "WHERE l.date IN (SELECT max(sub_l.date) FROM Location sub_l WHERE sub_l.studentid = l.studentid) "  
        + "ORDER BY Distance", Object[].class);  
    q.setParameter("latitude", latitude);  
    q.setParameter("longitude", longitude);  
      
    List<Object[]> list = q.getResultList();
    
    
    
    评论

报告相同问题?

悬赏问题

  • ¥15 多电路系统共用电源的串扰问题
  • ¥15 slam rangenet++配置
  • ¥15 有没有研究水声通信方面的帮我改俩matlab代码
  • ¥15 对于相关问题的求解与代码
  • ¥15 ubuntu子系统密码忘记
  • ¥15 信号傅里叶变换在matlab上遇到的小问题请求帮助
  • ¥15 保护模式-系统加载-段寄存器
  • ¥15 电脑桌面设定一个区域禁止鼠标操作
  • ¥15 求NPF226060磁芯的详细资料
  • ¥15 使用R语言marginaleffects包进行边际效应图绘制