MySQL纬度和经度表设置

我想将位置的纬度和经度值存储在mysql数据库表中。考虑到未来,我将希望能够在特定位置的特定半径内找到这些位置。话虽如此,我应该将纬度和经度值存储在哪些数据类型中?请给我提供一个用于创建列的创建表脚本,如下所示:

place_id  |  lat  |  long

上表中是否可能缺少我会为我提供当前可能看不到的其他信息的列?

谢谢你的帮助。

回答:

您应将这些点存储在数据类型的单列中,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公制坐标(东和北),而不是极坐标(纬度和经度)。对于小半径,它们足够精确,并且计算也大大简化了。如果您所有的点都在一个半身中并且远离极点,则可以使用单个中央子午线。

当然,您仍然可以使用极坐标,但是用于计算MBR和的公式将更加复杂。

以上是 MySQL纬度和经度表设置 的全部内容, 来源链接: utcz.com/qa/431753.html

回到顶部