Sql:Haversine 公式错误列不存在
Posted
技术标签:
【中文标题】Sql:Haversine 公式错误列不存在【英文标题】:Sql: Haversine formula error column doesn't exist 【发布时间】:2012-09-14 14:01:03 【问题描述】:我遇到了一个与我的半正弦公式有关的奇怪问题。它在我的应用程序中发生的方式是;
select lat,long,distance from(
select lat,long,( 6371 * acos( cos( radians("+testLatitude.to_s+") ) * cos( radians( lat ) ) * cos( radians( long ) - radians("+testLongitude.to_s+") ) + sin( radians("+testLatitude.to_s+") ) * sin( radians( lat ) ) ) ) as distance
from available_people) as dt where distance < "+distance.to_s+" order by distance
我 100% 确定我的 available_people 表中有一个 personName,但我无法让下面的查询正常工作。它给了我列不存在错误。
select lat,long,distance from(
select personName,lat,long,( 6371 * acos( cos( radians("+testLatitude.to_s+") ) *
cos( radians( lat ) ) * cos( radians( long ) - radians("+testLongitude.to_s+") ) + sin( radians("+testLatitude.to_s+") ) * sin( radians( lat ) ) ) ) as distance
from available_people) as dt where distance < "+distance.to_s+" order by distance
可能的原因是什么。我可以检索 personName 列以及 lat、long 信息吗?
【问题讨论】:
【参考方案1】:没有看到确切的错误(你真的应该包括它)我会说你应该在表格前面加上personName
,即available_people.personName
或dt.personName
(如果我正确地阅读了你的查询)。
第二,尽管无关,您在 lat/lng 列中使用什么列类型?这是使用mysql吗?作为浮动?
如果是这种情况,那么一旦您的表拥有足够的记录,您就会遇到严重的性能问题。我遇到了大约 5 万条记录的问题,其中查询需要 2 分钟或更长时间。
如果您正在处理地理空间数据,请考虑使用 Postgres+PostGIS 或 MongoDB。这些解决方案具有地理空间索引功能,可让您的查询超快且功能强大,因此您不必自己执行余弦或球面余弦定律。
【讨论】:
以上是关于Sql:Haversine 公式错误列不存在的主要内容,如果未能解决你的问题,请参考以下文章