我先说明一下定定义, 拉运地:地图中的一个点,包含经度和维度,也是“起点”, 运往地:地图中的一个点,包含经度和维度,也是“终点”。 起始偏差范围:以起点或终点为圆心的半径,是一个数值。 终止偏差范围:以起点或终点为圆心的半径,是一个数值。 匹配偏差范围:从“起始偏差范围”画出的圆开始,到“终止偏差范围”之间的总区域。 下面我将“起始偏差范围“和”终止偏差范围“统称为”偏差范围“。 我的数据库里存放着很多拉运地和运往地的坐标点。 现在,我想要一个java语言编写的代码,我可以传入拉运地的偏差范围和运往地的偏差范围,然后从数据库中给我返回符合条件的坐标信息。 注意: 1. 我用的持久化框架是mybaties-plus。 2. 我传入的偏差范围是一个单位为"千米"的数。 3. 我要的代码类型为工具类。 4. 要求有良好的注释
时间: 2023-04-01 20:01:35 浏览: 95
好的,根据您的要求,我可以为您提供一个Java语言编写的工具类,用于从数据库中查询符合条件的坐标信息。以下是代码示例:
```
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.additional.query.impl.QueryChainWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import java.util.List;
@Component
public class CoordinateQueryUtil extends ServiceImpl<CoordinateMapper, Coordinate> {
@Autowired
private CoordinateMapper coordinateMapper;
/**
* 根据拉运地和运往地的偏差范围查询符合条件的坐标信息
*
* @param startLatitude 拉运地的纬度
* @param startLongitude 拉运地的经度
* @param startRadius 拉运地的偏差范围半径,单位为千米
* @param endLatitude 运往地的纬度
* @param endLongitude 运往地的经度
* @param endRadius 运往地的偏差范围半径,单位为千米
* @return 符合条件的坐标信息列表
*/
public List<Coordinate> queryByRadius(double startLatitude, double startLongitude, double startRadius,
double endLatitude, double endLongitude, double endRadius) {
// 计算起点和终点的偏差范围
double startMinLatitude = startLatitude - startRadius / 111.;
double startMaxLatitude = startLatitude + startRadius / 111.;
double startMinLongitude = startLongitude - startRadius / (111. * Math.cos(startLatitude));
double startMaxLongitude = startLongitude + startRadius / (111. * Math.cos(startLatitude));
double endMinLatitude = endLatitude - endRadius / 111.;
double endMaxLatitude = endLatitude + endRadius / 111.;
double endMinLongitude = endLongitude - endRadius / (111. * Math.cos(endLatitude));
double endMaxLongitude = endLongitude + endRadius / (111. * Math.cos(endLatitude));
// 构造查询条件
QueryWrapper<Coordinate> queryWrapper = new QueryWrapper<>();
queryWrapper.between("start_latitude", startMinLatitude, startMaxLatitude)
.between("start_longitude", startMinLongitude, startMaxLongitude)
.between("end_latitude", endMinLatitude, endMaxLatitude)
.between("end_longitude", endMinLongitude, endMaxLongitude);
// 执行查询
List<Coordinate> coordinateList = coordinateMapper.selectList(queryWrapper);
return coordinateList;
}
}
```
在这个工具类中,我们使用了Mybatis-Plus持久化框架来进行数据库操作。具体来说,我们继承了ServiceImpl类,并注入了CoordinateMapper对象,这样就可以使用Mybatis-Plus提供的各种查询方法了。
在queryByRadius方法中,我们根据传入的拉运地和运往地的偏差范围,计算出起点和终点的偏差范围,并构造了一个QueryWrapper对象来进行查询。最后,我们调用CoordinateMapper的selectList方法来执行查询,并返回符合条件的坐标信息列表。
需要注意的是,我们在计算偏差范围时,使用了简化的计算方法,可能会存在一定的误差。如果需要更精确的计算,可以参考相关的地理计算知识进行改进。
另外,我们在代码中添加了注释,以方便其他开发人员理解和维护代码。
阅读全文