在边界框中查找所有地理位置
Find all geolocations in a bounding box
我有一个 MySQL table(大约有 ~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 的内容,但我并没有真正了解它的复杂性。所以我宁愿坚持一个简单干净的解决方案。
尝试这样的事情:
SELECT *
FROM poi
WHERE lat >= @lat - @degrees
AND lat <= @lat + @degrees
AND lng >= @lng - @degrees
AND lng <= @lng + @degrees
当然你也可以给lat和lng传upper和lower参数,这样效率会更高
我有一个 MySQL table(大约有 ~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 的内容,但我并没有真正了解它的复杂性。所以我宁愿坚持一个简单干净的解决方案。
尝试这样的事情:
SELECT *
FROM poi
WHERE lat >= @lat - @degrees
AND lat <= @lat + @degrees
AND lng >= @lng - @degrees
AND lng <= @lng + @degrees
当然你也可以给lat和lng传upper和lower参数,这样效率会更高