【发布时间】:2011-07-18 18:17:10
【问题描述】:
我正在从表单中获取邮政编码。然后我可以将此邮政编码转换为 lng,lat 坐标,因为我已将它们存储在表格中。
SELECT lng, lat from postcodeLngLat WHERE postcode = 'CV1'
我有另一张表,用于存储所选场地的 lng、lat。
SELECT v.lat, v.lng, v.name, p.lat, p.lng, p.postcode, 'HAVERSINE' AS distance FROM venuepostcodes v, postcodeLngLat p WHERE p.outcode = 'CB6' ORDER BY distance
我要做的是创建一个数据网格,显示每个场地与邮政编码(在本例中为 CV1)的距离。我知道 Haversine 公式应该做我想要实现的目标,但我不知道应该从哪里开始将它合并到我的查询中。我认为公式需要放在我在上面的查询中输入'HAVERSINE' 的位置。
有什么想法吗?
编辑
SELECT o.outcode AS lead_postcode, v.venue_name, 6371.0E * ( 2.0E *asin(case when 1.0E < (sqrt(square(sin(((RADIANS(CAST(o.lat AS FLOAT)))-(RADIANS(CAST(v.lat AS FLOAT))))/2.0E)) + (cos(RADIANS(CAST(v.lat AS FLOAT))) * cos(RADIANS(CAST(o.lat AS FLOAT))) * square(sin(((RADIANS(CAST(o.lng AS FLOAT)))-(RADIANS(CAST(v.lng AS FLOAT))))/2.0E))))) then 1.0E else (sqrt(square(sin(((RADIANS(CAST(o.lat AS FLOAT)))-(RADIANS(CAST(v.lat AS FLOAT))))/2.0E)) + (cos(RADIANS(CAST(v.lat AS FLOAT))) * cos(RADIANS(CAST(o.lat AS FLOAT))) * square(sin(((RADIANS(CAST(o.lng AS FLOAT)))-(RADIANS(CAST(v.lng AS FLOAT))))/2.0E))))) end )) AS distance FROM venuepostcodes v, outcodepostcodes o WHERE o.outcode = 'CB6' ORDER BY distance
【问题讨论】:
标签: sql sql-server haversine