当前位置: 首页 > 面试题库 >

mySQL经度和纬度查询x英里半径内的其他行

微生令
2023-03-14
问题内容

我有一个目前约有1万行的数据库。它们都基于邮政编码的中心具有经度/纬度。我发现了一个我正在尝试扩展的查询,但是总的来说它在某种程度上运行良好。但是,在下面的示例中,我试图找到半径25英里以内的事物,这似乎在大多数情况下都是可行的。我的大部分结果都在25英里标准范围内,但是我得到的结果很少,偏离了86英里到800英里。

示例:这是我的中心经度:37.2790669,-121.874722 =加利福尼亚州圣何塞我得到的结果是:33.016928,-116.846046
=加利福尼亚州圣地亚哥,距离圣何塞约355英里。

我当前的查询看起来像:

SELECT *,(((acos(sin(($lat*pi()/180)) * sin((`latitude`*pi()/180))+cos(($lat*pi()/180))
* cos((`latitude`*pi()/180)) * cos((($lon - `longitude`)*pi()/180))))*180/pi())*60*1.1515)
AS `distance` FROM `geo_locations` HAVING `distance` <= 25 ORDER BY `distance` ASC"

问题答案:

这是我在商店定位器上使用的查询:

SELECT
    `id`,
    (
        6371 *
        acos(
            cos( radians( :lat ) ) *
            cos( radians( `lat` ) ) *
            cos(
                radians( `long` ) - radians( :long )
            ) +
            sin(radians(:lat)) *
            sin(radians(`lat`))
        )
    ) `distance`
FROM
    `location`
HAVING
    `distance` < :distance
ORDER BY
    `distance`
LIMIT
    25

:lat:long是用户传递的点,其中latlong存储在数据库中的点。

:distance以英里为单位,在代码的工作版本中,:distance实际上是从10-50英里范围内的下拉列表中拉出的

借助joshhendo的解决方案,可以将3959(从地球中心到地面的距离,以英里为单位)更改为6371(将3959英里转换为公里),从而将代码更改为以千米为单位。



 类似资料:
  • 我有一个Postgres表,其中包含一些使用shapefile创建的数据。我需要找到所有在给定纬度和经度半径2英里范围内相交的记录。我使用了一些查询,包括下面这个。 从us_census_zcta中选择 ST_INTERSECTS(几何、圆(点(40.730610, -73.935242), 2)); 但是没有一个管用。我到底做错了什么?如何才能得到我需要的结果? SRID为4269(NAD 83

  • 问题内容: 在询问具体的代码示例之前,我只想问一下是否可以进行类似此伪代码的查询: 从表中选择项目,其中经度/经度=-在某个经度/经度点的x英里内- 那可行吗?还是我必须跳过一些箍?可以推荐的任何好的方法都很棒! 问题答案: 您应该搜索Haversine公式,但是一个好的开始可能是: 使用PHP,MySQL和Google Maps创建商店定位器 -请参见“使用MySQL查找位置”部分 使用MySQ

  • 我试图使用Hibernate Spatial中的谓词在X英里(用户定义)的半径范围内进行搜索。 虽然这类问题以前被问过,但在谓词中只问过一次,而且可能不是最新的,因为它不起作用。我必须能够使用谓词,而不是HQL。 我通过另一个答案找到了如何为PostGIS的WITHIN关键字设置谓词,但无法运行查询。 安装结束后,我声明错误输出和包版本。 以下是我的模式中的内容: 在我的模型中: 其中更新位置在l

  • 问题内容: 这是CSV格式的PostgreSQL示例。 我在世界各地有成千上万行这样的跨越坐标。 我只想查询表中特定半径内的坐标。如何使用PostGIS和PostgreSQL做到这一点? 问题答案: 我结合了欧文(Erwin)和帕特里克(Patrick)的答案。

  • 问题内容: 我是Hibernate Spatial的新手,正在尝试对给定半径内的对象执行简单查询。我已经使用来自Google Maps和其他来源的数据在数据库中创建了许多条目,这些条目的属性分别对应于经度和纬度。此属性在我的Entity类中定义如下: 我现在正在尝试找出如何搜索所有坐标位于距给定点 x 公里半径内的实体对象的方法。例如,我想找到落在该点半径50公里以内的对象(12.34567,-7

  • 问题内容: 我想将位置的纬度和经度值存储在mysql数据库表中。考虑到未来,我将希望能够在特定位置的特定半径内找到这些位置。话虽如此,我应该将纬度和经度值存储在哪些数据类型中?请给我提供一个用于创建列的创建表脚本,如下所示: 上表中是否可能缺少我会为我提供当前可能看不到的其他信息的列? 谢谢你的帮助。 问题答案: 您应将这些点存储在数据类型的单列中,该列可以用索引建立索引(如果表类型为): 这将大