mysql - 在 typeorm 中查找给定半径内的地方
问题描述
如果我想将半径设为 10 英里,它会给出所有在 10 英里范围内和不在 10 英里范围内的酒店。当我将半径设置为 0.1、0.5 或类似的值时,过滤正在起作用。我使用了MySQL并将坐标存储为geometry。谢谢您的帮助。
if (filter.latitude && filter.longitude) {
queryBuilder.addSelect(
'ST_Distance(hotel.coordinate, ST_GeomFromText(:origin , 4326))',
'distance'
);
const radius = +filter.radius || 0;
queryBuilder
.andWhere(
'ST_Distance(hotel.coordinate, ST_GeomFromText(:origin , 4326)) <= :radius '
)
.setParameters({
origin: `POINT(${filter.latitude} ${filter.longitude})`,
radius
});
queryBuilder.addOrderBy('distance', 'ASC');
}
解决方案
推荐阅读
- java - Java如何像Linux的命令“du”一样获取文件的磁盘空间?
- rest-assured - 无法在 RestAssured 中设置 curl 的“用户”参数
- node.js - 带有 Express JS 的路由
- python-3.x - 如何(获取或打印)我在 tkinter 上的按钮的值
- r - 重复第一行的上三角形
- javascript - 为什么 getElementsByClassName() 在使用 puppeteer 时返回 undefined?
- reactjs - package.js 中 react-native-script 和 react-native 之间的区别
- bash - bash 脚本独立运行,但不能与 cron 一起运行
- javascript - 如何根据长度将作为 YYYYMMDD 输入的日期转换为 MM/DD/YYYY 或 MM/D/YYYY
- python - 防止分布中依赖关系变化的替代方案?