【问题标题】:Creating a bounding box from a latitude/longitude and a 'radius'从纬度/经度和“半径”创建边界框
【发布时间】:2012-11-12 17:56:15
【问题描述】:

我一直在寻找一段代码(最好在 PHP 中),它可以采用纬度、经度和加/减值(以公里为单位)并返回最小和最大纬度和经度。

我似乎找不到任何东西既能用简单的术语解释它的作用,又能考虑到地球“臃肿”的曲率。

谁能帮忙?

【问题讨论】:

标签: php latitude-longitude


【解决方案1】:

这很棘手,因为纬度/经度是一个角度量,而您的半径距离是一个不相容的线性量。

这里有一些解决方法,按照准确度降序和编码简单性升序排列。

  1. 使用投影库首先在投影坐标 (x,y) 中进行计算,然后重新投影回 (lat,lon)。有一个备受推崇的proj4 library 的php 端口,我看到PEAR 也有一个投影库。
  2. 使用具有 WGS84 参数的椭球近似地球。 请参阅this question 的已接受答案。
  3. 用球体近似地球并使用球面三角法。 请参阅this question 的已接受答案。
  4. 为您感兴趣的领域使用简单比例的近似转换因子。 请参阅this question 接受的答案。

我建议不要。 1.

【讨论】:

    【解决方案2】:

    不知道为什么要在纯 PHP 中执行此操作,但 MySQLMongoDB 支持地理空间索引,这比任何纯 PHP 实现都具有巨大的性能优势。

    我个人更喜欢MongoDB 版本,因为它默认安装,您可以轻松搜索

    • 半径
    • 盒子
    • 多边形
    • 距离

    请看

    【讨论】:

    • 我正在使用 CouchDB 和 Map/Reduce。有没有类似的实现方式?
    • 不是默认的,但你可以使用GeoCouch
    • 也刚刚通过 Google 找到了 GeoCouch,这就是事情变得复杂的地方!我正在使用为我提供 CouchDB 服务的 Cloudant。
    • 所以,我已经找到并设置了一个 MongoDB 服务,你知道一个好的 PHP 库可以让我与这个服务交互吗? (我正在使用 MongoHQ)
    • 你不需要 mongoHQ 见github.com/mongodb/mongo-php-driver/downloads 并下载默认驱动
    【解决方案3】:

    为了让事情变得更简单,我已经切换到 MongoDB 的系统,目前正在使用 MongoHQ 的 REST API 通过他们的地理 API 访问数据。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-05-04
      • 2011-03-17
      • 2014-08-29
      • 2013-01-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-07-29
      相关资源
      最近更新 更多