我有一个现有的 SQL 查询,它使用lat, lng
更大的圆形公式来计算特定列表周围 1 公里半径内的所有列表。
它运行良好,但我正在尝试使用 MySQL 地理空间扩展并使用 MBR 矩形而不是圆形来加速它,这对我来说很好。
问题:使用的新代码MBRcontains
返回零结果!我错过了 SQL 查询中的某些内容吗?
Lat: 42.353443
Lng: -71.076584
旧 SQL 查询
SELECT `price`, `city`, `state` FROM (`listings`)
WHERE `bedroom` = '1'
AND `post_timestamp` BETWEEN DATE_SUB( NOW(), INTERVAL 10 DAY) AND DATE_SUB( NOW(), INTERVAL 0 DAY)
AND (6371 * acos( cos( radians(listings.lat) ) * cos( radians( 42.353443 ) ) * cos( radians( -71.076584 ) - radians(listings.lng) ) + sin( radians(listings.lat) ) * sin( radians( 42.353443 ) ) ) ) < 1
LIMIT 100
新 SQL 查询(公式)
SELECT `price`, `city`, `state` FROM (`listings`)
WHERE `bedroom` = '1'
AND `post_timestamp` BETWEEN DATE_SUB( NOW(), INTERVAL 10 DAY) AND DATE_SUB( NOW(), INTERVAL 0 DAY)
AND MBRContains(
LineString( Point(42.353443 + 1 / ( 111.1 / COS(RADIANS(-71.076584))), 42.353443 + 1 / 111.1),
Point(-71.076584 - 1 / ( 111.1 / COS(RADIANS(42.353443))), 42.353443 - 1 / 111.1) )
, p)
)
LIMIT 100