【问题标题】:Find all geolocations in a bounding box在边界框中查找所有地理位置
【发布时间】:2016-10-12 08:35:28
【问题描述】:

我有一个这样的 MySQL 表(大约有 100.000 个条目):

CREATE TABLE IF NOT EXISTS `poi` (
  `poi_id` int(10) unsigned NOT NULL auto_increment,
  `lat` decimal(10,6) default NULL,
  `lng` decimal(10,6) default NULL,
  PRIMARY KEY  (`poi_id`),
  KEY `lat` (`lat`),
  KEY `lng` (`lng`),
) ENGINE=InnoDB;

基本上我想要对这些条目做的就是获取给定边界框 (bbox) 中的所有 POI。

什么是实现这一目标的好(快速但不太复杂)的方法?

如果能带来任何好处,我可以选择更改数据库架构(甚至是 DBMS)。我怀疑我的幼稚模式是一种快速的方法。

顺便说一句:我已经阅读过有关 PostGIS 的信息,但我并没有那么复杂。所以我宁愿坚持一个简单干净的解决方案。

【问题讨论】:

  • “快速但不太复杂”——这两个要求相互矛盾。

标签: mysql database-design geolocation database-schema bounding-box


【解决方案1】:

试试这样的:

SELECT * 
FROM poi
WHERE lat >= @lat - @degrees 
AND lat <= @lat + @degrees
AND lng >= @lng - @degrees
AND lng <= @lng + @degrees

当然,你也可以传递 lat 和 lng 的上限和下限参数,这样可能更有效

【讨论】:

  • “盒子”有点像矩形,而不是正方形。在 lng 测试中,除以cos(@lat)
  • 彼得,我缩小兴趣点列表的快速解决方案有帮助吗?
猜你喜欢
  • 2011-07-23
  • 2014-06-11
  • 1970-01-01
  • 2019-05-27
  • 2022-01-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多