我先说明一下定定义,拉运地:地图中的一个点包含经度和维度,也是“起点”,运往地:地图中的一个点包含经度和维度,也是“终点”。我的数据库里存放着很多拉运地和运往地的坐标点。现在,我想要一个java语言编写的代码,我可以传入拉运地的偏差范围和运往地的偏差范围(这个偏差范围包含起始和终止两个值),然后从数据库中给我返回符合条件的坐标信息。注意:1. 我用的持久化框架是mybaties-plus。2. 我传入的偏差范围是一个单位为"千米"的数。3. 我要的代码类型为工具类。4. 要求有良好的注释
时间: 2023-04-01 18:01:27 浏览: 68
好的,根据您的需求,我可以为您提供以下Java工具类的代码,用于从数据库中获取符合条件的坐标信息:
```
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.service.additional.query.impl.QueryChainWrapper;
import com.baomidou.mybatisplus.extension.service.additional.query.impl.QueryChainWrapperEntity;
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 CoordinateUtils extends ServiceImpl<CoordinateMapper, Coordinate> {
@Autowired
private CoordinateMapper coordinateMapper;
/**
* 根据起点和终点的偏差范围,从数据库中获取符合条件的坐标信息
*
* @param startLongitude 起点经度
* @param startLatitude 起点纬度
* @param startRange 起点偏差范围(单位:千米)
* @param endLongitude 终点经度
* @param endLatitude 终点纬度
* @param endRange 终点偏差范围(单位:千米)
* @return 符合条件的坐标信息列表
*/
public List<Coordinate> getCoordinatesByRange(double startLongitude, double startLatitude, double startRange,
double endLongitude, double endLatitude, double endRange) {
// 计算起点和终点的经纬度范围
double startMinLongitude = startLongitude - startRange / (111.319 * Math.cos(startLatitude * Math.PI / 180));
double startMaxLongitude = startLongitude + startRange / (111.319 * Math.cos(startLatitude * Math.PI / 180));
double startMinLatitude = startLatitude - startRange / 110.574;
double startMaxLatitude = startLatitude + startRange / 110.574;
double endMinLongitude = endLongitude - endRange / (111.319 * Math.cos(endLatitude * Math.PI / 180));
double endMaxLongitude = endLongitude + endRange / (111.319 * Math.cos(endLatitude * Math.PI / 180));
double endMinLatitude = endLatitude - endRange / 110.574;
double endMaxLatitude = endLatitude + endRange / 110.574;
// 构造查询条件
QueryWrapper<Coordinate> queryWrapper = new QueryWrapper<>();
queryWrapper.between("start_longitude", startMinLongitude, startMaxLongitude)
.between("start_latitude", startMinLatitude, startMaxLatitude)
.between("end_longitude", endMinLongitude, endMaxLongitude)
.between("end_latitude", endMinLatitude, endMaxLatitude);
// 执行查询并返回结果
return coordinateMapper.selectList(queryWrapper);
}
}
```
这个工具类使用了MyBatis-Plus持久化框架,通过传入起点和终点的偏差范围,计算出经纬度范围,并构造查询条件,从数据库中获取符合条件的坐标信息。其中,计算经纬度范围的公式参考了WGS84坐标系下的经纬度计算公式。
希望这个工具类能够满足您的需求,如果您有任何问题或建议,欢迎随时联系我。
阅读全文