【问题标题】:PHP / Wordpress - Finding closest location based on latitude and longitudePHP / Wordpress - 根据纬度和经度查找最近的位置
【发布时间】:2012-08-14 04:23:02
【问题描述】:

我现在可以在我的网站上使用移动浏览器获取访问者的纬度和经度。我的网站上有一个包含 1000 多个位置的数据库,作为自定义 wordpress 内容类型的帖子。每个位置都有与之关联的纬度和经度。

我希望网站像这样工作:
当用户到达时,它会要求他们分享他们的位置 (DONE)
然后它将它们的 lat 和 long 存储在 PHP 变量中(EASY、NEXT)
现在获取他们的经纬度,并查询数据库,并列出最近的帖子,如下所示:
-----帖子标题 1(1.3 英里外)
-----帖子标题2(1.7英里外)
等等。

如何在我的 wordpress 安装中使用 PHP 来执行此操作?

很抱歉这么快就编辑了。我从谷歌找到了一个页面,看看它是否能满足我的需要。 https://developers.google.com/maps/articles/phpsqlsearch_v3?hl=hu-HU

这里的主要问题,我的经纬度在数据库中是这样存储的:
表:wp_postmeta
Column1:meta_key(这包含许多不同的值,但我只关心包含“location_latitude”或“location_longitude”的值)
Column2:46.346940(包含经纬度数字,具体取决于 Column1 中的内容)

那么我怎样才能将此查询转换为使用我的数据库呢?
SELECT post_id, ( 3959 * acos( cos( radians(37) ) * cos( radians( LATITUDE ) ) * cos( radians( LONGITUDE ) - radians(-122) ) + sin( radians(37) ) * sin( radians( LATITUDE ) ) ) ) AS distance FROM wp_postmeta HAVING distance < 25 ORDER BY distance LIMIT 0 , 20;

【问题讨论】:

  • 我当前的测试代码SELECT post_id, ( 3959 * ACOS( COS( RADIANS( 37 ) ) * COS( RADIANS( 34.09) ) * COS( RADIANS( -117.55 ) - RADIANS( -122 ) ) + SIN( RADIANS( 37 ) ) * SIN( RADIANS( 34.09 ) ) ) ) AS distance FROM wp_postmeta WHERE 'meta_key' LIKE '%location_l%' HAVING distance &lt;250 ORDER BY distance LIMIT 0 , 20

标签: php mysql wordpress geolocation


【解决方案1】:

试试this 发帖。基本上你需要计算两个经纬对之间的距离。这将是一些球形数学,可能使用 Haversine 距离公式。

此外,如果您害怕数学,MySQL 确实支持 spatial queries

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-10
    • 2016-10-16
    • 1970-01-01
    相关资源
    最近更新 更多