我想将位置的纬度和经度值存储在mysql数据库表中。考虑到未来,我将希望能够在特定位置的特定半径内找到这些位置。话虽如此,我应该将纬度和经度值存储在哪些数据类型中?请给我提供一个用于创建列的创建表脚本,如下所示:
place_id | lat | long
上表中是否可能缺少我会为我提供当前可能看不到的其他信息的列?
谢谢你的帮助。
您应将这些点存储在数据类型的单列中,Point该列可以用索引建立SPATIAL索引(如果表类型为MyISAM):
Point
SPATIAL
MyISAM
CREATE SPATIAL INDEX sx_place_location ON place (location) SELECT * FROM mytable WHERE MBRContains ( LineString ( Point($x - $radius, $y - $radius), Point($x + $radius, $y + $radius) ) location ) AND Distance(Point($x, $y), location) <= $radius
这将大大提高查询的速度,例如“在给定半径内查找所有对象”。
请注意,最好使用简单的TM公制坐标(东和北),而不是极坐标(纬度和经度)。对于小半径,它们足够精确,并且计算也大大简化了。如果您所有的点都在一个半身中并且远离极点,则可以使用单个中央子午线。
TM
当然,您仍然可以使用极坐标,但是用于计算MBR和的公式将更加复杂。
MBR