【问题标题】:Bounding Box Search in MySQL [duplicate]MySQL中的边界框搜索[重复]
【发布时间】:2013-04-18 17:00:21
【问题描述】:

我试图弄清楚如何使用地理边界框的“左上纬度和经度”和“右下纬度和经度”从下面的 MySQL 表中检索信息。

CREATE TABLE `markers` (
  `id` INT NOT NULL AUTO_INCREMENT PRIMARY KEY ,
  `name` VARCHAR( 60 ) NOT NULL ,
  `address` VARCHAR( 80 ) NOT NULL ,
  `lat` decimal(10,7) NOT NULL ,
  `long` decimal(10,7) NOT NULL,
  `geopoint` point NOT NULL,
  PRIMARY KEY  (id),
  SPATIAL geopoint (geopoint)
) ENGINE = MYISAM ;

到目前为止,我有下面的 SQL 查询,但我不确定它是否是检索信息的最有效和最高效的方式?

$sql = "SELECT * FROM `markers` WHERE (long BETWEEN '$west_long' AND '$east_long') AND (lat BETWEEN '$north_lat' AND '$south_lat')";

【问题讨论】:

  • 与从任何其他表中检索信息有什么不同?
  • 如上所述,我需要根据地图的边界框检索信息!
  • 问题保持不变。但是你也可以提供更多关于你的边界框的信息,比如……代码?
  • 我添加了一个 SQL 查询来显示我的目标

标签: php mysql geospatial bounding-box


【解决方案1】:

有相当令人印象深刻的公式可以将两个纬度转换为距离(米、英里),经度也是如此。

只要您的请求在地球的某个范围内,您就应该协助 MySQL 进行第二个大大简化的加宽 where-condition 以缩小到正确的矩形。

您可以选择在 php 或 sql 中使用这些公式 - 以米为单位的框可以转换为以纬度/经度为单位的框。

一个简单的经纬形式的矩形永远不会是一个真正的矩形,就像你在每个橘子上看到的那样。

马可

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-02
    • 1970-01-01
    • 1970-01-01
    • 2017-10-01
    • 1970-01-01
    相关资源
    最近更新 更多